TL;DR
会社でSlackを使っていてbotにGitのPushなどの情報を流しているけど
もっと気軽にローカルマシンの状況をHubotに報告して欲しい!
例えば、時間の掛かるスクリプト処理が終わったタイミングとか!
(ターミナルを沢山開いていると走らせていたスクリプトが終わっていることに気がつくのが遅れたりするので^^;)
※ 会社用Slackに流すとヘンに通知が飛ぶので個人用Slackを別途用意してそこに流すと良いかと。
※ CoffeeScriptはよく知らないので下記コードの作法とかオカシイかも。
準備
Hubot側
前提として
* HubotをHerokuか何かで動かしている。
* Slackに作成したHubotを招待していて連携出来ている。(@名前: pingでPONGが返るとか)
Hubotのディレクトリ/scripts
配下に適当なファイル(action.coffeeとか)を作ります。
とりあえず今回の仕様は
* http://HubotのWebアドレス/message にPOST
* POSTする内容は、{ "room":"発言する部屋", "message":"発言内容" }
* roomの指定が無ければ #general、messageの指定が無ければ適当なメッセージを指定
# Herokuに保存しているアドレスもしくはデバッグ用にローカルアドレス
config =
baseUrl: process.env.HUBOT_HEROKU_KEEPALIVE_URL ? 'http://localhost:8080'
module.exports = (robot) ->
# send request message
# http://Hubotのアドレス/message
robot.router.post '/message', (req, res) ->
send_message = (room_name, message) ->
robot.send {room: room_name}, message
res.end "send #{room_name} #{message}"
if not req.body
send_message("general", "何かエラー" )
return
room_name = req.body.room ? "general"
message = req.body.message ? "何でもなーい"
send_message(room_name, message)
デバッグとしてはブラウザのRESTクライアントプラグイン(chromeならAdvanced REST clientとか)を利用して
ローカルマシンに対してPOSTしてみると良いかも。
Ruby側
ちゃっちゃと適当に。
require 'net/http'
require 'uri'
message = "送信するメッセージ"
room = "general"
Net::HTTP.post_form(URI.parse("http://HubotのWebアドレス/message"),
{'room'=>"#{room}", 'message'=>"#{message}"})
用意出来たら実行してみてSlackに発言が反映されるかを確認。
上記は思いっきり簡略化していますが、実際にはARGV
でroomやmessageのパラメータを受け取ったりしてそれを渡す形になります。
後は
開発で使用するスクリプトや、定期実行のタスクとか色々なものをHubotにPOSTしてSlackに連携しましょう。