Hubotはチャット専用botなので、基本的に誰かの発言に対して応答を返すような仕組みが充実しています。
で、ふと気づくのです。bot側から自発的に話すのってどうするだろうと。
今日はそんな話です。(別に哲学的な話ではないです)
参考スクリプト
http-say.coffeeを参考にしようとしましたが、これこのまま使った方が早いので、こちらを見てください。
もうこれで動くのですが、実際試したら動かすのに微妙に苦労したので、そちらの話を続けます。
botが自発的に話すためのスクリプトを運用する
とりあえず話を簡単にするために、自分のMacでnode.jsを動かしてその上でhubotが動いている前提とします。hubotの接続先はhipchatとします。
http-say.coffeeの使い方は
GET /hubot/say?message=[&room=<room>&type=<type>]
と書いてあるのですが、node.jsのlistenポートを調べて、直接WEBブラウザから
http://localhost:8080/hubot/say?message=test
と打ち込んでも反応しません。
roomパラメータは必須なのかと思い、room名を直接入れてみますがこれも反応しません。
どうも、XMPP JIDがroomパラメータとして必要なようです。これを調べる簡単な方法はあるのでしょうか。
今hubotがいるroomのXMPP JIDを調べる
一番簡単なのが、hubotがすでにその部屋にいるのであれば、次のコマンドを打つ事でXMPP JIDがわかります。@hubotは適宜hubotにつけている名前で置き換えてください。
@hubot show storage
これはhubot内のstorage情報をチャット画面上に表示するhubotのコマンドです。
この情報の中に、
{ users:
'544000':
{ id: '544xxx',
jid: '76xxx_544xxx@chat.hipchat.com',
name: 'hubot',
mention_name: 'hubot',
room: '76xxx_xxxx@conf.hipchat.com' } },
というhubot自身の情報が入った部分があります。このroomをそのまま貼付けると、ようやくhubotの発言としてmessageパラメータの内容が出力されるようになりました。
http://localhost:8080/hubot/say?message=test&room=76xxx_xxxx@conf.hipchat.com
これで、定期的な通知内容や天気情報等もhubot経由でしゃべらせられるようになりますね。
よいhubotライフを!