RedmineとChatOpsとで新しいシステム運用の形を模索している8amjpです。
今回は、チャットツールMattermostでの発言に自動応答する簡単なプログラム、いわゆるBotをNode.jsで作成してみます。
今回作成するのは、誰かが「寝てる?」と発言したら、「寝てないよ!」と返事するだけのBotです。
Node.js
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
const responseBody = {"text": "寝てないよ!"}
res.setHeader('Content-Type', 'application/json');
res.write(JSON.stringify(responseBody));
res.end();
})
server.listen(3000);
Node.js側で用意するソースはたったこれだけです。
出来上がったら、node app.js
で起動してください。
3000番ポートでリクエストを待ち受け続け、リクエストがあったら「寝てないよ!」というレスポンスをJSON形式で返します。ほんとにたったこれだけ。
(ちなみに、終了させるときはCtrl + C
で。)
Mattermostの設定
続いてMattermost側の設定です。
Integrations(統合機能)
外部システムとの連携は、「Integrations(統合機能)」の「Outgoing Webhook (外向きのウェブフック)」で設定します。
タイトル(Title): 特になんでもいいです。
コンテントタイプ(Content Type): application/json
を指定します。
チャンネル(Channel): ウェブフックを作動させるチャンネルを指定します。とりあえずデフォルトで作成されている「Town Square」にします。
トリガーワード(Trigger Words): 外部のプログラムを呼び出すトリガーになるキーワードです。「寝てる?」という言葉を指定すれば、その言葉に反応します。
コールバックURL(Callback URLs): トリガーワードに反応した時にアクセスするURLを指定します。先ほど作成したNode.jsのプログラムのURL、 http://localhost:3000 を指定します。
(別のホストでプログラムを稼働させている場合は、そのホストのアドレスを指定してください)
システムコンソール(System Console)での設定
さて、Outgoing Webhook(外向きのウェブフック)の設定は以上ですが、これだけでは動作しません。localhostへのアクセスは、セキュリティ上の理由で動作が制限されているので、システムコンソールで変更する必要があります。
(別のホストでプログラムを稼働させている場合は特に考慮する必要はありません)
開発者の設定(Developer Settings)
メニューの一番下、「開発者(Developer)」を選択してください。
「信頼されていない内部接続を許可する: (Allow untrusted internal connections to:)」の項目で「localhost」と指定し、通信を許可する必要があります。
(その下に書かれている注意書きもよく読んでくださいね!)
完成
以上で完成です。
「Town Square」チャンネルで「寝てる?」と聞いてみましょう。「寝てないよ!」という発言が帰ってきたら見事成功です。おめでとうございます。
なお、発言者はウェブフックの作成者と同じアカウントになり、名前の横に「BOT」と表示されます。
……これだけでは何の役にも立たないBotですが、これを応用すれば、発言に応じて何らかの処理を走らせ、その結果を返すBotなんかも作成できます。これこそがChatOpsの真髄ですねー。