先日から妄想してる緩いサーバー監視ツール Obbo の実現にとって一番大事な Hipchat 用BOTを GAS(Google Apps Script)で実装してみたので、それの記録。

Hipchat は以前から API を公開してたので少し利用してたのだけど、今回 API のページを見てみたところ V2 になっていてメソッドも増えている事に気がついた。
おまけに、新しく WebHook メソッドが増えている!メッセージをスキャンして新しい投稿の判断をしなきゃいけないと思ってたから、これはありがたい。

ということで、早速テストも兼ねて実装してみた。

HipchatWebHook を登録する実際のコードの抜粋はこんな感じ。

具体的には、

  1. YourApiAccesページでトークンを作成
  2. 作成したトークンをURLに含みながら WebHook 作成URLを叩く
  3. Hookは2つの条件をトリガーとして指定したURLへメッセージを転送
    • Hipchatへメッセージが投稿されたとき: room_message
    • メッセージが「/」から始まるアルファベットまたは「?」: ^\/[a-z\?]

という動き。

このWebHookはGUIで登録することは出来ないようなので、コードを書いて投げる必要がある。ちなみに、同じ名前でいくつでも登録できてしまう感じなんで、テストの時は deleteWebHook も一緒に実装したほうがいいと思う。

それで、このHookを登録してメッセージを飛ばすと、指定したURLへJSONを含むPOSTが飛んでくるので、それを受け取る GAS はこんな感じ。

doPost で受け取りメッセージの内容で処理を振り分けて、BOTらしく最後にまたメッセージを投げるという動き。

一応公開サーバーになるので、WebHookを登録した時にもらえるIDを保存しておき、そのIDを持つPOSTのみ処理するようにして最小限のセキュリティは確保してるつもり。

そうして、一つ目のHipchat.jsにある sendRoomNotification メソッドでメッセージを送れば、めでたくHipchat用BOTが完成。

ということで、めでたく反応を返してくれたBOTのデビューショットがこちら。後はHTMLでテーブル化してやったりとかの見た目を調整しなきゃ。
hipcahtbot

最初はCronライクな GAS のトリガーでポーリングして履歴取得して必要そうなメッセージを手作業で選別しなきゃいけないかと思ってたんだけど、Hipchat側にWebHook機能が付いていたのでだいぶ楽に実装できた。
おまけにBOTサーバーもGoogleのAppsScript使えば無料で実装できるし、本当にイイ時代になったもんだ。少し動作は遅いけど、自宅サーバーなくても十分遊べる。