Powershell経由でRocket.chatへメッセージを投稿する

· ·

概要 🔗

WindowsのPowershell経由でRocket.chatへメッセージを投稿するまでのざっくりとした内容をメモしたものである。

データを取得する際のuserId/authTokenの取得 🔗

webhookではなくプログラム経由でメッセージをポストしたり、ルーム一覧を取得するなどの際に必ず必要となる情報。

1
Invoke-RestMethod -Method Post -Body "user=*****&password=*****" http://localhost:3000/api/v1/login

参考ドキュメント 🔗

https://developer.rocket.chat/reference/api/rest-api/endpoints/other-important-endpoints/authentication-endpoints/login

RoomID取得 🔗

メッセージをポストする際にどのRoomへポストするかをRoomIDで指定するため、事前にIDを取得する必要がある。

今回はRoom名からRoomIDを取得する流れとしてRoom名を引数で渡している。

1
2
3
4
5
6
$headers = @{
    'X-Auth-Token': '*****'
    'X-User-Id': '*****'
}

Invoke-RestMethod http://localhost:3000/api/v1/rooms.info?roomName=***** -Headers $headers -ContentType 'application/json'

参考ドキュメント 🔗

https://developer.rocket.chat/reference/api/rest-api/endpoints/team-collaboration-endpoints/rooms-endpoints/info

メッセージのポスト 🔗

実際にメッセージをPostする場合はヘッダー情報に加えてpayload情報をjsonで渡す必要がある。Powershellの場合はjson変換処理を間にかませる必要がありそう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$headers = @{
    'X-Auth-Token': '*****'
    'X-User-Id': '*****'
}

$payload = @{
    'roomId': '*****'
    'text': '*****'
}

$JsonData = $payload | ConvertTo-Json
$SendJson = [System.Text.Encoding]::UTF8.GetBytes($JsonData)

Invoke-RestMethod -Method Post -Uri http://localhost:3000/api/v1/chat.postMessage -Body $SendJson -Headers $headers -ContentType 'application/json'

Webhook経由で投稿する場合も同様に以下のような感じで投げれば投稿が可能。

1
2
3
4
5
6
7
8
$payload = @{
    'text': '*****'
}

$JsonData = $payload | ConvertTo-Json
$SendJson = [System.Text.Encoding]::UTF8.GetBytes($JsonData)

Invoke-RestMethod -Method Post -Uri http://localhost:3000/hooks/***** -Body $SendJson -ContentType 'application/json'

rocket chat側から提供されているpythonモジュールもあるみたいですがpythonで普通にpostすれば投稿できます

1
2
3
4
5
6
7
8
9
import requests, json

WEBHOOKURL = 'http://localhost:3000/api/v1/chat.postMessage'
HEADERS = {'X-Auth-Token': '*****', 'X-User-Id': '*****', 'Content-Type' : 'application/json'}
r = requests.post(WEBHOOKURL, data = json.dumps({
    'roomId': '*****',
    'text': '*****'
}), headers = HEADERS)
print(r)

参考ドキュメント 🔗

https://developer.rocket.chat/reference/api/rest-api/endpoints/team-collaboration-endpoints/chat-endpoints/postmessage

comments powered by Disqus