Yoは最近はダッシュボードからbotアカウントを作れるようになっていて、俺もいくつか作って使っている。

botがYoを受信するとあらかじめ指定しておいたコールバックURLにHTTP-GETでwebhookしてくれる。

https://自分のhubot.herokuapp.com/yo/webhook?token=kazudon とか指定しておくといい。GETのパラメータでusername, user_ip, tokenが来る。


Hubotで受信するとしたらこんな感じ。Hubotにはexpressが内蔵されていてrobot.routerで使える。
環境変数YO_WEBHOOK_TOKENを設定する必要がある。

本当にYoのサーバーからのリクエストかを確かめるのにコールバックURLにtokenを含めるのと、HTTPSを使う。
誰でもYoからプログラム実行できても困るので、許可するYoユーザーをあらかじめ持っておく。

# Description:
#   YoのWebhookを受信して何かする
#
# Author:
#   @shokai

module.exports = (robot) ->

  unless process.env.YO_WEBHOOK_TOKEN
    robot.logger.error 'ENV var "YO_WEBHOOK_TOKEN" is missing'
    return

  yo_users = ['SHOKAI', 'user1', 'user2']  # Yo許可するユーザー

  robot.router.get '/yo/webhook', (req, res) ->
    ip = req.query.user_ip

    unless who = req.query.username
      return res.status(400).end 'invalid request'
    if yo_users.indexOf(who) < 0
      res.status(400).end "bad user: #{who}"
      robot.send {room: "#general"}, "不正なユーザー #{who}(#{ip})がYoしてきました"
      return
    if req.query.token isnt process.env.YO_WEBHOOK_TOKEN
      res.status(400).end "bad token"
      robot.send {room: "#general"}, "#{who}(#{ip})が不正なtoken#{req.query.token}でYoしてきました"
      return

    res.end 'ok'
    robot.send {room: "#general"}, "#{who}(#{ip})がYoしてきました"
    ## 〜〜ここで何か処理〜〜 ##