Mattermost記事まとめ: https://blog.kaakaa.dev/tags/mattermost/
本記事について
Mattermostの統合機能アドベントカレンダーの第12日目の記事です。
本記事では、Mattermostで特定の用途向けのBotアカウントを作成する機能について紹介します。
Botアカウントの概要
Mattermostの外部からMattermostのリソースを操作するようなアプリケーションについて考えてみます。
Mattermost外部から投稿を作成するだけであれば、WebHookやSlash Commandを利用すれば実現することができますが、これらの機能では投稿作成以外の処理を行うことができません。Mattermost REST APIを使うことでMattermost上のチャンネル・チーム・投稿など様々なリソースをMattermost外部から操作することができますが、REST APIを実行するにはユーザーに紐づいたアクセストークンが必要なため、統合機能用のサーバーアプリケーションなどを構築する場合、ユーザー情報の不正利用を防ぐためにトークンの厳密な管理などを意識する必要が出てきます。
このような場合に有効なのがBotアカウント機能です。
Botアカウント機能により特定の処理専用のユーザーアカウントを作成することができ、Botアカウントのアクセストークンを利用することで、ユーザー情報の不正な利用を心配することなくREST APIの実行などを行うことができます。
また、Enterpriseを利用している場合、Botアカウントは登録ユーザーとしてカウントされないため、統合機能専用のユーザーを作りやすくなります。
設定
Mattermostの画面上からBotアカウントを作成するには、システムコンソール > Botアカウント > Botアカウントの作成を有効にする の設定が有効
になっている必要があります。
作成
メインメニュー > 統合機能 > Botアカウント > Botアカウントを追加するからBotアカウントを作成できます。
Botアカウントの作成画面で入力する情報は下記の通りです。
- ユーザー名: Botアカウントのユーザー名です。既存のアカウントと同じユーザー名は使用できません。
- Botアイコン: Botアカウントのアイコンをアップロードできます。
- 表示名: Botアカウントの表示名です。
- 説明: Botアカウント一覧画面に表示されるアカウントの説明です。
- 役割: Botアカウントに割り当てられる役割を メンバー(一般ユーザー) と システム管理者 から選択します。
- 投稿:全て: 公開チャンネルだけでなく、非公開チャンネルやダイレクトメッセージチャンネルなどにもBotアカウントによる投稿を作成する場合、こちらにチェックします。
- 投稿:チャンネル: Botアカウントによる投稿の作成が公開チャンネルだけで良い場合、こちらにチェックします。
役割、投稿:全て、投稿:チャンネルが実際にどのような効果があるかが分かりづらいですが、例えば、役割がメンバーで、投稿:全てにも投稿:チャンネルにもチェックがない場合、そのBotはチャンネルにメンバーとして追加されない限り、そのチャンネルに投稿を作成できないということになります。投稿:チャンネルが設定された場合は、公開チャンネルであればチャンネルにメンバーとして参加していなくてもそのチャンネルに投稿は作成できますが、非公開チャンネルやダイレクトメッセージチャンネルにはメンバーとして追加されるまで投稿を作成する権限がないということになります。
Botアカウントの作成が完了すると、このBotアカウントに割り当てられたアクセストークンが表示されます。このトークンはこの画面を閉じると二度と表示することができませんが、Botアカウントにはいくつもアクセストークンを追加することができるため、アクセストークンを忘れてしまった場合は再生しすることになります。
作成されたBotアカウントはBotアカウント一覧画面に表示されます。
実行
Botアカウントに割り当てられたアクセストークンを使用してREST APIを実行すると、BotアカウントによってMattermostのリソースを操作することができます。
BODY='{
"channel_id": "89xmji6bibbn9eqpe1okx8j8fe",
"message": "Create post by bot account"
}'
curl -i \
-H 'Authorization: Bearer 3uhox91m6bdbt8pqsczouy9mny' \
-H 'Content-Type: application/json' \
-d "$BODY" \
http://localhost:8065/api/v4/posts
また、Botアカウントはユーザーと同じようにチャンネルやチームに参加させることもできます。
Botアカウント作成時に投稿:全てや投稿:チャンネルにチェックを入れなかった場合、このようにBotをチャンネルに参加させない限り、Botアカウントはそのチャンネルにアクセスできない(権限エラーで投稿が作成できない)ことになります。
また、Botアカウントのアクセストークンを使ってWebSocket APIをListenしている場合、Botを参加せているチャンネルのイベントだけが取得できるため、Botアカウントが参加しているチャンネルのみを対象とした処理を実装することもできます。Outgoing Webhookで指定できたのは1つのチャンネルのみ、Custom Slash Commandでは作成したチーム内の全チャンネルを対象としていましたが、Botアカウントの場合、Botアカウントをチャンネルさせるかどうかで柔軟に統合機能の対象チャンネルを設定できるようになります。
Botアカウントの削除
Botアカウントを利用しなくなった場合、無効化はBotアカウントの一覧画面から実行できます。
しかし、Botアカウントの削除はMattermost画面からは実行できません(できないはずです)。Botアカウントの削除を行うにはMattermostのCLIツールである mattermost
コマンドを使用する必要があります。mattermost
コマンドはMattermostを起動しているサーバーのMattermostインストールディレクトリ内のbin/mattermost
という場所に存在するはずです。
Linux用のバイナリであればMattermostのダウンロードページからダウンロードできるMattermost本体に含まれていますが、mattermost
コマンドはMattermostサーバーの設定ファイルconfig.json
を読み込んで動作するため、Mattermostサーバー上で実行するのが無難です。
$ bin/mattermost user delete sample_bot
と、mattermost user delete
コマンドの引数としてBotアカウントのユーザー名を指定することで、Botアカウントの削除を行うことができます。
さいごに
本日は、Botアカウントについて紹介しました。 明日はMattermostの機能から一旦離れて、今までMattermostから受け取ったSwag(Contributors Gift)を紹介します。