最近社内でMattermostを使うようになり、全てのチャンネルを閲覧するようにしているが、新規にチャンネルが増えても分からない。少し調べてみたがチャンネル追加を通知するような設定は無いようだった。
そこで、チャンネルが新規に追加されたら適当なチャンネルにその情報を投稿するbotを作ってみた。
Mattermostの公式HPにはJavaScript、Go用のドライバはあるが、Javaしか書けないマンなのでJavaで書いた。
作成したbot
cronで定期的に動かし、その時点のチャンネル一覧と、前回実行時に書き出しておいたチャンネルIDの一覧を比べて差異があったものの情報を投稿する。
利用したAPI
- ログイン
- URL:/api/v3/users/login
- リクエストメソッド:POST
- POSTするデータ
- login_id
- password
- レスポンスヘッダのTokenから認証用トークンを取得できる。
以後リクエストヘッダに「Authorization: Bearer {{トークン}}」を追加して通信することで認証された状態となる
- チームの取得
- URL:/api/v3/teams/all
- リクエストメソッド:GET
- チーム名、チームIDが取得できる。ここで取得したIDを使ってチャンネル情報を取得する
- 参加しているチャンネル一覧の取得
- URL:/api/v3/teams/{{チームID}}/channels/
- リクエストメソッド:GET
- ダイレクトメッセージや非公開グループも取れてしまうので、typeの値を見て判断する。
- O:公開チャンネル
- P:非公開チャンネル
- D:ダイレクトメッセージ
- 参加していないチャンネル一覧の取得
- URL:/api/v3/teams/{{チームID}}/channels/more
- リクエストメソッド:GET
- Incoming Webhookでの投稿
- URL:Incoming Webhookの作成時に表示されるURL
- リクエストメソッド:POST
- POSTするデータ
- text
- channel
- username
- icon_url
- Incoming Webhookを使わずAPIのみでも投稿できるが、Incoming Webhookを使うとBOTと投稿時にマークがつくので分かり易い
参考
- JavaでJSONをPOSTする方法
[Java] HttpClient の POST で JSON を送信する件. | hirooka.pro - Mattermost APIのtopページ
Web Service API — Mattermost 3.0 documentation - JavaScript版のドライバ(client.jsx)
mattermost/mattermost-driver-javascript: Javascript library for interacting with the Mattermost API
※最近APIのリファレンスページが出来たようなので今ならそっちを見たほうがよさそう - Incoming Webhookの使い方
Incoming Webhooks — Mattermost 3.4 documentation