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する基盤が出来たので次は出来ることを充実させていこうと思います。