📆

[Mattermost Integrations] Botアカウント

2021/06/19に公開

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 アカウントの作成を有効にする の設定が有効になっている必要があります。

system console

作成

メインメニュー > 統合機能 > Bot アカウント > Bot アカウントを追加するから Bot アカウントを作成できます。

bot menu

Bot アカウントの作成画面で入力する情報は下記の通りです。

create bot

  • ユーザー名: Bot アカウントのユーザー名です。既存のアカウントと同じユーザー名は使用できません。
  • Bot アイコン: Bot アカウントのアイコンをアップロードできます。
  • 表示名: Bot アカウントの表示名です。
  • 説明: Bot アカウント一覧画面に表示されるアカウントの説明です。
  • 役割: Bot アカウントに割り当てられる役割を メンバー(一般ユーザー) と システム管理者 から選択します。
  • 投稿:全て: 公開チャンネルだけでなく、非公開チャンネルやダイレクトメッセージチャンネルなどにも Bot アカウントによる投稿を作成する場合、こちらにチェックします。
  • 投稿:チャンネル: Bot アカウントによる投稿の作成が公開チャンネルだけで良い場合、こちらにチェックします。

役割投稿:全て投稿:チャンネルが実際にどのような効果があるかが分かりづらいですが、例えば、役割メンバーで、投稿:全てにも投稿:チャンネルにもチェックがない場合、その Bot はチャンネルにメンバーとして追加されない限り、そのチャンネルに投稿を作成できないということになります。投稿:チャンネルが設定された場合は、公開チャンネルであればチャンネルにメンバーとして参加していなくてもそのチャンネルに投稿は作成できますが、非公開チャンネルやダイレクトメッセージチャンネルにはメンバーとして追加されるまで投稿を作成する権限がないということになります。

Bot アカウントの作成が完了すると、この Bot アカウントに割り当てられたアクセストークンが表示されます。このトークンはこの画面を閉じると二度と表示することができませんが、Bot アカウントにはいくつもアクセストークンを追加することができるため、アクセストークンを忘れてしまった場合は再生しすることになります。

complete bot

作成された Bot アカウントは Bot アカウント一覧画面に表示されます。

list 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

post from bot

また、Bot アカウントはユーザーと同じようにチャンネルやチームに参加させることもできます。

join channel

Bot アカウント作成時に投稿:全て投稿:チャンネルにチェックを入れなかった場合、このように Bot をチャンネルに参加させない限り、Bot アカウントはそのチャンネルにアクセスできない(権限エラーで投稿が作成できない)ことになります。

また、Bot アカウントのアクセストークンを使って WebSocket API を Listen している場合、Bot を参加せているチャンネルのイベントだけが取得できるため、Bot アカウントが参加しているチャンネルのみを対象とした処理を実装することもできます。Outgoing Webhook で指定できたのは 1 つのチャンネルのみ、Custom Slash Command では作成したチーム内の全チャンネルを対象としていましたが、Bot アカウントの場合、Bot アカウントをチャンネルさせるかどうかで柔軟に統合機能の対象チャンネルを設定できるようになります。

websocket

Bot アカウントの削除

Bot アカウントを利用しなくなった場合、無効化は Bot アカウントの一覧画面から実行できます。

deactivate 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)を紹介します。

Discussion