Mattermost 記事まとめ: https://blog.kaakaa.dev/tags/mattermost/
本記事について
Mattermost の統合機能アドベントカレンダーの第 11 日目の記事です。
本記事では、Mattermost の WebSocket API ついて紹介します。
WebSocket API の概要
Mattermost は WebSocket API を利用することで、Mattermost 上でやり取りされている WebSocket のイベントを取得することもできます。
WebSocket API については REST API のドキュメントに説明があります。 https://api.mattermost.com/#tag/WebSocket
WebSocket イベントの取得
Mattermost の WebSocket Event を取得するために、Mattermost 公式の WebSocket クライアント websocket_client.go を利用します。
package main
import (
"log"
"github.com/mattermost/mattermost-server/v5/model"
)
const (
// (1) Mattermost WebSocket Endpoint
MattermostWebSocketURL = "ws://localhost:8065"
// (2) Access Token
AccessToken = "4cacdozwn3fndnzobbpha3nnhy"
)
func main() {
// (3) WebSocket Clientの構築
client, appErr := model.NewWebSocketClient4(MattermostWebSocketURL, AccessToken)
if appErr != nil {
log.Fatal(appErr.Error())
}
// (4) 接続
if appErr = client.Connect(); appErr != nil {
log.Fatal(appErr.Error())
}
client.Listen()
for {
select {
case event := <-client.EventChannel:
// (5) WebSocket Eventについての処理
log.Printf("Received: %v", event)
}
}
}
(1)
で Mattermost WebSocket の URL を宣言しています。プロトコルがhttp(s)
ではなくws(s)
になります。また、WebSocket API のエンドポイントは/api/v4/websocket
ですが、この部分は Mattermost の WebSocket Driver が付与してくれます。
(2)
では WebSocket API にアクセスするために使用するアクセストークンを宣言しています。REST API 実行用と同じ Token です。
(3)
で、Mattermost の WebSocket Driver を利用して WebSocket クライアントを生成し、このクライアントを使って(4)
で WebSocket API へ接続しています。
接続が問題なく完了すると、 WebSocket クライアントのEventChannel
フィールドに WebSocket Event が流れてきます。(5)
で、流れてきたイベントを出力しています。
上記コードを実行しておくと、Mattermost 上で何か操作をした時に WebSocket Event がコンソールに表示されるようになります。
Ctrl + c
を入力するとプログラムを終了します。
今回は単に受け取ったイベント情報を出力するだけでしたが、受け取ったWebSocketEventの内容に応じた処理を実装することもできます。
WebSocketEvent
構造体のData
フィールドの内容はイベントの種類によって異なり、イベントの種類は下記から確認できます。
https://github.com/mattermost/mattermost-server/blob/c54ab6da211af861b25af1364518e549d3a1ed91/model/websocket_message.go#L14
WebSocket API の実行
Mattermost では WebSocket API を通じてリクエストを送信することもできるようですが、現在利用可能なのが下記 3 種類のみのようで、ちょっと用途が今のところ分かりません。
- user_typing
- get_statuses
- get_statuses_by_id
さいごに
Mattermost WebSocket API の使い方について紹介しました。 明日は、Bot アカウントの使い方を紹介します。