SlackやMattermostのSlash comandをOutgoing webhooksのように使えるHubotスクリプトを作ってnpmに公開しました。
https://www.npmjs.com/package/hubot-slash-command
どんなもの?
Slash Commandsに渡した引数をHobotに横流します。
例えば/bot ping
を実行すると<ボットの名前> ping
のように話かけたのと同じ結果を得られます。
Slash CommandのレスポンスとHubotに送るメッセージはカスタマイズ出来るようにしています。
構成
Hubot内臓のexpressでスラッシュコマンドを受け付けています。 受け付けたパラメータをrobot.receiveでHubotに渡しています。
何で作ったの?
会社ではMattermostを使っているのですが、Hubotを使ってChatOpsをしようとすると色々制約がありました。
- プライベートチャンネル中心に使っているのでOutgoing Webooksが使えない
- 雰囲気的にパブリックに切り替えにくいし、そもそもプライベートチャンネルをパブリックに切り替える機能もない
- Botユーザを使うタイプのHubotアダプターの hubot-matteruserが使えれば色々解決できそうなんですが、GitLabとのSSOに対応していない、BotだけにSSOを介さないログインを許可することが出来ない。
Slash Commandsを受けつけるAPIを実装してIncoming Webhooksで結果を返せば何でも作れるのですが、 色々公開されているHubotスクリプトが使えないので、Slash Commandsの引数をそのままHubotへ連携するスクリプトを作成しました。 (hubot-scheduleとか使いたかった)
設定方法
Slackでも使えるので、試しにSlackとHerokuに設定しています。
(Slack公式のHubot連携があるので実際Slackで使いたい場面はない気もしますが)
Hubotの設定
(1) 公式サイトに従ってHubotプロジェクトを作成します。 アダプターはhubot-mattermostを指定してください。 (Mattermost用のアダプターですがSlackでも動きます)
Herokuへデプロイするのに必要なProcfileは自動的に追加されています。
web: bin/hubot -a mattermost
(2) hubot-slash-commandをインストールします。
$ npm i hubot-slash-command --save
(3) external-scripts.jsonに追加します。
["hubot-slash-command"]
(4) git push heroku master
しておきます。
Outgoing Webhooksの設定
URLはHerokuのURL + “/hubot-slash-command"を指定してます。 TokenはあとでHerokuに設定するのでコピーしておいてください。
Herokuに環境変数を設定
hubot-mattermostとhubot-slash-commandに必要なパラメータを設定しましょう。
hubot-slash-commandのHUBOT_SLASH_COMMAND_TOKENS
は必須なので先ほどコピーしたToknenを設定してください。
以上で設定完了となります。
ChatOpsする基盤が出来たので次は出来ることを充実させていきます。