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