LoginSignup
5
4

More than 5 years have passed since last update.

ローカルマシンの処理状況をHubotにPOSTしてSlackに流す

Posted at

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の指定が無ければ適当なメッセージを指定

action.coffee
# 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側

ちゃっちゃと適当に。

PostHubot.rb
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に連携しましょう。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4