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してきました"
## 〜〜ここで何か処理〜〜 ##