終電23時11分って早くね?

都内のIT企業で働くカラオケ大好きエンジニアの雑記

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のXMPPGatewayを有効にする

https://my.slack.com/admin/settings#permissions

管理者権限を持ったユーザで上記URLにアクセスし、

f:id:blue_goheimochi:20141019003136p:plain

「Gateways」の「expand」で設定項目を開き、
上記の画像のように「Enable XMPP gateway(SSL only)」にチェックを入れ「Save Settings」をする。

Hubot用ユーザの認証情報を取得する

https://my.slack.com/account/gateways

「Getting Started: XMPP」の項目を確認すると、

f:id:blue_goheimochi:20141019003742p:plain

上記画像のように認証情報が表示されていると思います。
ここが、「XMPP is disabled for your team. Ask your team owner to enable it.」と表示されている場合は、
まだXMPPGatewayが有効になってないので、再度管理者権限をもったユーザでXMPPGatewayを有効にしてください。

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してみる

f:id:blue_goheimochi:20141019004010p:plain

ping すると hubot-xmppユーザがPONGを返すようになりました!

「Procfileを編集する」のところにも記述しましたが、

参考

Hubot起動時の -n [名前] の名前に反応するので、その点お気をつけください。

Procfileに

web: bin/hubot -a xmpp -n hoge-hoge

と設定した場合

f:id:blue_goheimochi:20141019004149p:plain

となります。


おわり

という感じで、hubot-slackのアダプターを使うよりは少し複雑ですが、
hubot-xmppのアダプターを使えばプライベートグループでもHubotと連携できますので、
より幅が広がるのではないでしょうか?

参考サイト

Slack を XMPP プロトコルで Hubot と連携する - ja.ngs.io
Home · markstory/hubot-xmpp Wiki · GitHub

ちなみに、xmppと連携しないバージョンはこっち↓
PRIVATE GROUPで使わないのならこっちのが楽ちん。


blue-goheimochi/hubot-slack-base · GitHub

おまけ

「誰か教えてくれるかな・・・」という淡い期待を持ってつぶやいたんですが、
@ex_takezawaさんに「知りたい(ので調べてね)」って言われたので調べさせていただきました 笑