[ChatOps] サーバサイドで起きた諸々の事象をSlackbotに通知してもらう


(2014/09/09追記)

こちらも併せてご覧下さい。

コード1行でBotがSlackへ通知してくれるGemを公開しました - Qiita
http://qiita.com/kidachi_/items/debfd0474d0888e5b1f1

概要

Qiita::Teamでも連携対応されたSlack
http://blog.qiita.com/post/88252533014/qiita-team-slack

最近はHipChatとの比較で、デザインが良い/後発だけに出来ることが多い等、
話題に上がることも多いですね。

基本的なAPIは用意されているので、タイトル程度の内容ならhubotを使わずとも実現可能です。

APIトークンの生成

まずは準備として、各種APIを利用するために

よりAPIトークンの発行を行います。

Slack内にサインインし、かつ何らかのteamに属していれば、以下のようにCreate tokenを押下するだけで発行可能です。

※もしteamに属していない場合は
Please log into your team and then reload this page to view your tokens.
といったメッセージが表示されています。
まずはteamを作成(もしくはどこかのteamに招待を依頼)し参加しましょう。

APIの選定

上記Authenticationの項目の下に様々なAPIが載っています。

今回は、シンプルに指定のchannelにメッセージを投げてくれる
chat.postMessage
https://api.slack.com/methods/chat.postMessage
を使います。

インターフェースを見ると、以下を構築してgetで叩くだけで良さそうです。

https://slack.com/api/chat.postMessage?channel=<channel_name>&text=<text>&token=<your_token>&username=<bot_name>

実際に利用する

今回はRubyで書いてみます。

require 'addressable/uri'
require 'net/http'

endpoint = 'https://slack.com/api/chat.postMessage'
token='hogehoge'
channel='#slack_bot_test'
text='hello,slackbot!'
username='slackbot'

uri = Addressable::URI.parse(endpoint)
query = {token: token, channel: channel, text: text, username: username}
uri.query_values ||= {}
uri.query_values = uri.query_values.merge(query)

Net::HTTP.get(URI.parse(uri))
=> "{\"ok\":true,\"channel\":\"C02EZTYKS\",\"ts\":\"1407134492.000010\"}"

結果

出来ました。

自分はこれをサーバ側で何らかの例外が吐かれる時に叩かせて、チャット上に通知してもらっています。

記事のタイトルはサーバサイドで起きた諸々の事象を〜としましたが、
getのAPIを叩くだけなのでどんなシーンでも利用できそうですね。

インタラクティブな作業(チャットからbotにデプロイを依頼するなど)はhubotが必要になりますが、
まずはお手軽なChatOpsの第一歩として、こちらもぜひ試してみてください。