2017年1月31日火曜日

Slack と Hubot を連携してみた

概要

Slack の Hubot Integration を使って連携してみました
Hubot サーバは Heroku で管理してみたいと思います

環境

  • Slack 2016/06/30 時点
  • Mac OS X 10.11.5
  • nodejs 5.9.1
  • npm 3.7.3
  • yo 1.8.4
  • heroku-toolbelt 3.43.2

ローカルで Hubot の作成

まずはローカルの Mac で Hubot を作成します

  • mkdir test-bot
  • cd test-bot
  • npm install -g yo generator-hubot
  • yo hubot

とすると Hubot のセットアップがはじまります
hubot_chain_heroku_slack_setup_bot.png

この後、Hubot の作成に必要な情報を入力します
今回は以下のように入力しました

? Owner hawksnowlog
? Bot name test-bot
? Description Test bot
? Bot adapter slack

ポイントはアダプタのところで「slack」と入力するところです
これで Slack と Hubot を連携することができるようになります

とりあえずインストール後にローカルでテストしたい場合は

  • ./bin/hubot -a shell -n test-bot

で動作させることができます

Heroku にローカルで作成した Hubot を登録する

ローカルで作成した Hubot を Heroku に登録します
事前に Heroku のアカウント登録と toolbelt の設定は済ませておいてください (heroku login など)
今回はとりあえず動かすことが目的なのでさくっと登録します

  • git init
  • git add .
  • git commit -m “Initial Commit”
  • heroku create
  • git push heroku master

で OK です
これで Heroku のアプリ一覧を確認するとアプリが作成されていると思います
今回はアプリの名前を「test-bot」に変更しました
名前が被った場合は適宜変更してください

Slack に Hubot Integration を追加する

Slack から Hubot Integration を追加しましょう
ログインした状態で https://testorg.slack.com/apps/manage にアクセスしてください
( Organization は testorg となっているので、各自の状況に合わせて適宜変更してください )

Hubot があるので選択します
hubot_chain_heroku_slack_select_app.png

Configure で新しい Hubot を追加します
hubot_chain_heroku_slack_add_app.png

Slack 上で Hubot に話かける名前を設定します
hubot_chain_heroku_slack_input_name.png

すると Hubot に設定するためのトークンがもらえるのでメモしておきます
hubot_chain_heroku_slack_make_token.png

このトークンを Heroku 上の Hubot に設定してあげます
設定はコマンドから行います

  • heroku config:set HUBOT_SLACK_TOKEN=xxxx –app test-bot

xxxx の箇所を取得できたトークンに変更してください

チャネルに Hubot を招待する

あとは Hubot を動かしたいチャネルに Hubot を招待するだけです
招待は Slack 上で

  • /invite @test-bot

という感じで入力すれば OK です
ボットの名称はさきほど Integration を追加するときに Hubot に設定した Username を指定してください

動作確認

以下のような感じで Slack 上で Hubot に話かけてみましょう

  • @test-bot: help
  • @test-bot: echo hoge

Hubot が応答してくれるはずです

最後に

ローカルで Hubot を作成して、Heroku にデプロイして Slack に連携という流れを紹介しました
もちろん、Heroku にデプロイしなくてもローカルのまま Slack に連携することも可能です

何点か Tips も紹介しておきます

  • invite 時に指定した Username から変更すると Hubot が反応しなくなる

これはもしかするとバグかもしれないのですが、Hubot Integration の Customize Name を変更すると Hubot が反応してくれなくなりました
名前を変更したい場合は再度 Integration を作成し直す必要がありそうです

  • Heroku 上の Hubot がスリープになると応答しなくなる

Heroku を無料枠で使っている場合アプリへのアクセスが一定時間ないとアプリはスリープしてしまいます
再度アクセスすれば起動するのですが、Hubot の場合 Slack からコマンドを投げただけだとスリープから復帰してくれません
ブラウザなどでアプリにアクセスすると起動できますが、毎回そんなことするのも面倒なので別途 cron 的な仕組みが必要そうです

  • HUBOT_SLACK_TEAM, HUBOT_SLACK_BOTNAME などの変数がなくなった

これらは Slack の Hubot Integration 上で設定する感じになりました
なので、直接 Hubot に設定するのは HUBOT_SLACK_TOKEN だけになります
確かにこっちのほうが綺麗だとは思いますが、代わりにチャネル設定等が「/invite」になっているので、その辺が見落としがちなポイントです

参考サイト

0 件のコメント:

コメントを投稿