超簡単!MattermostにBOTを追加する

Mattermost

記事をご覧の方へ

現在vivibit.netは旧システムからの移行に伴い修正作業を行っています。
表示上の問題や軽微なエラーが発生する可能性がありますが、ご利用に問題はありません。
また、現在一部ファイルのダウンロードができなくなっています。
順次対応予定ですが、お急ぎの場合や問題を発見された場合はコメント欄でご指摘いただけると助かります。


Mattermost(バージョン3.4系)にBOTを追加するのが予想以上に簡単だったにもかかわらず、日本語ドキュメントがあまり見つからなかったので簡単に紹介しておきます。
BOTとしては最も一般的?なechoの実装を紹介します。
画像には一部モザイク等の処理を施していますが気にしないでください。

必要なもの

  1. Mattermostを設置しているのと別のサーバー(要動的コンテンツ動作環境)
  2. お好きなテキストエディタ

面倒なので検証はしていませんが、Mattermostを設置している鯖にBOTは置けないらしいです。
BOTを設置する鯖には、PerlなりPHPなりPythonなりのCGIっぽいやつが動くような環境が必要です。
今回はPHPにします。

BOTをMattermostに登録する

PC版でしかBOTは登録できないようです。
PCで閲覧していてもウィンドウ幅が狭いとタブレットやスマホ用の表示になり、BOTの登録ができないようです。
できるならどなたか教えてください。

ログイン後、左上にあるアカウント名の右側にある縦3つに並んだ点をクリックするとメニューが出ます。
メニューの中にある統合機能をクリックします。

統合機能には3種類ありますが、ユーザの発言をトリガーとしてBOTを起動するような場合、外向きを選択してください。

「外向きのウェブフックを追加する」をクリックします。

表示名、説明は適当でかまいません。
統合機能一覧で表示される名前であって、BOTの名前はプログラム中で設定できます。
コンテントタイプはデフォのapplication/x-www-form-urlencodedでいいです。
これを用いると、POSTでデータが拾えます。

トリガーワードには、BOTを起動するための単語を入力してください。
下のような設定では、
echo ほげほげ
のような発言に対してBOTが起動します。また、全角スペースによる区切りにも対応しています。
つまり、
echo ふがふが
でもちゃんと認識してくれます。
ただし、「トリガーとなる場合」を「最初の単語がトリガーワードと正確に一致する」にしていると
echoooo ぬるぽ
のような場合にはBOTが起動しません。
この項目は適宜、目的に合わせて選択してください。

コールバックURLには、後述のBOTプログラム(今回はPHP)を外部からアクセスできる場所に設置した際のURLを記述してください。

「保存する」をクリックすると、下図のようにトークンが与えられます。
用いているMattermost以外からのアクセスをはじくにはこのトークンが必要になります。

BOTのプログラム

[php]
<?php
header("Content-Type: application/json; charset=utf-8");

if($_POST[‘token’] != "p9x6okxxgbyk3rnnsijbfa1aco"){
return;
}

$text = $_POST[‘text’];
$query = preg_split(‘/[\s\x{3000}]/u’,$text,2);
$q = $query[1];
$name = ‘echo’;

echo json_encode(array("icon_url" => "/static/emoji/1f60a.png", "username" => $name, "text" => $q));
return;

?>
[/php]
echoBOTはこれだけです。短いでしょ?
順に説明していきます。

content-type指定(2行目)

jsonで出力するので、念のためにapplication/jsonを指定しておきます。
また、マルチバイト文字を使うこともあるので文字セットも指定しておきます。

アクセス排他処理(4-6行目)

Mattermost以外からのアクセスをはじくため、tokenを用いた認証を行います。
BOTを登録した際にもらえるtokenをここで用います。
コンテントタイプをapplication/x-www-form-urlencodedにしておくとPOSTに投げられてくるのでPHPを使う場合なんかは超便利です。

データの処理(8-10行目)

token同様、データはPOSTで投げられてきます。
ただし、トリガーワードも含まれた状態で届くため、9-10行目のような処理が必要になります。
9行目では半角もしくは全角スペースで発言全体を2つに分けています。
echoBOTではトリガーワードは固定ですから、単純に2つ目のみ($query[1])を用います。
なお、BOTを呼んだユーザ名は$_POST['user_name']で取得できます。

Mattermostへのデータの送信(13行目)

Mattermostにはjson形式でデータを返します。
この際、アイコンや名前も同時に設定できます。

挙動テスト

echoBOTは正常に作動しました。やったね!

コメント

  1. […] 参考と試しのphpファイルは以下のサイトからお借りしました。 超簡単!MattermostにBOTを追加する […]

タイトルとURLをコピーしました