SlackとHubotを連携させてPRIVATE GROUPでも動くようにしてみた
Hubotをhubot-slackで連携させるのは非常に簡単で、
hubot-slack:
https://github.com/tinyspeck/hubot-slack
を使えばすぐできるんですが、PRIVATE GROUP上では反応してくれないようで、
なんとかしたい・・ってことで調べてみた結果できましたので
その方法を残しておこうと思います。
結論としては、
hubot-xmpp:
https://github.com/markstory/hubot-xmpp
でXMPPプロトコルによりHubotとSlackを連携させる感じです。
今回はHubot自体はHerokuにデプロイして動かしています。
※2014年11月21日追記
GitHubにも置いてみた。ツッコミありましたらぜひ!
あわせて見ていただければ。
blue-goheimochi/hubot-slack-xmpp-base · GitHub
事前準備
Hubot用のユーザをSlackで用意しておく。
このユーザがSlack上で反応するので、アイコンとかユーザ名とかbotにあったものにしくといいかもです。
Hubot用のユーザをPRIVATE GROUPに所属させておく。
Hubot用のユーザを反応してもらいたいPRIVATE GROUPに参加させる必要があるので参加させておきましょう。Hubotのインストールとボットの作成
$ npm install -g hubot coffee-script $ hubot --create hubot-xmpp
npmコマンド使えない人は、インストールしてください。
Hubotの動作確認
$ cd hubot-xmpp
$ bin/hubot
Hubot> hubot ping
Hubot> PONG (←自動で応答することを確認)
hubot-xmppのアダプターを追加
$ npm install hubot-xmpp --save
Procfileを編集する
$ vi Procfile web: bin/hubot -a xmpp -n hubot-xmpp
Procfireに記述する -n [文字列]で指定した文字列(上の例で言うとhubot-xmpp)を監視してHubotが反応してくれます。
※Slack上のユーザ名で反応するわけではないので注意
Heroku appを作成する
$ git init $ git add . $ git commit -m "first commit" $ heroku create yourname-hubot-xmpp
herokuコマンド使えない人は、インストールしてください。
Herokuにデプロイする
$ git push heroku master
Herokuのconfig設定する
※2014年11月20日追記
しばらくするとherokuのインスタンスがアイドル状態になってて、
hubot-slackのときはそんなことなかったのになーと思って調べまして、
$ heroku config:add HEROKU_URL=http://yourname-hubot-xmpp.herokuapp.com
HEROKU_URLの設定をしておくと20分に1回URLにPOSTされて、
アイドル状態にならなくなる。とのコトでした。
参考
Hubot - HerokuにデプロイしたHobotをIdlingさせない方法 - Qiita
HubotとSlackの連携の設定をする
おそらくここが肝です。
SlackのXMPPのGatewayを有効にする
https://my.slack.com/admin/settings#permissions
管理者権限を持ったユーザで上記URLにアクセスし、
「Gateways」の「expand」で設定項目を開き、
上記の画像のように「Enable XMPP gateway(SSL only)」にチェックを入れ「Save Settings」をする。
Hubot用ユーザの認証情報を取得する
https://my.slack.com/account/gateways
「Getting Started: XMPP」の項目を確認すると、
上記画像のように認証情報が表示されていると思います。
ここが、「XMPP is disabled for your team. Ask your team owner to enable it.」と表示されている場合は、
まだXMPPのGatewayが有効になってないので、再度管理者権限をもったユーザでXMPPのGatewayを有効にしてください。
HerokuにSlackの認証情報を設定
$ heroku config:add HUBOT_XMPP_USERNAME="hubot-xmpp@your-team.xmpp.slack.com" $ heroku config:add HUBOT_XMPP_PASSWORD="HUBOT_XMPP_PASSWORD" $ heroku config:add HUBOT_XMPP_ROOMS="test@conference.your-team.xmpp.slack.com"
上記の画像で赤枠で囲った部分をそれぞれ設定します。
PRIVATE GROUPでHubotにpingしてみる
ping すると hubot-xmppユーザがPONGを返すようになりました!
「Procfileを編集する」のところにも記述しましたが、
参考
Hubot起動時の -n [名前] の名前に反応するので、その点お気をつけください。Procfileに
web: bin/hubot -a xmpp -n hoge-hoge
と設定した場合
となります。
おわり
という感じで、hubot-slackのアダプターを使うよりは少し複雑ですが、
hubot-xmppのアダプターを使えばプライベートグループでもHubotと連携できますので、
より幅が広がるのではないでしょうか?
参考サイト
Slack を XMPP プロトコルで Hubot と連携する - ja.ngs.ioHome · markstory/hubot-xmpp Wiki · GitHub
ちなみに、xmppと連携しないバージョンはこっち↓
PRIVATE GROUPで使わないのならこっちのが楽ちん。
blue-goheimochi/hubot-slack-base · GitHub
おまけ
@blue_goheimochi 知りたい
— ytake (@ex_takezawa) 2014, 10月 16
「誰か教えてくれるかな・・・」という淡い期待を持ってつぶやいたんですが、
@ex_takezawaさんに「知りたい(ので調べてね)」って言われたので調べさせていただきました 笑