hubotでRedmineのチケット名を表示
チャットにRedmineのURLが貼られたらチケット名を表示するhubot-scriptを作りました。
Redmineには認証があるため通常のURLではBOTからはアクセスできません。
が、幸いな事にRedmineにはREST APIが存在します。
REST APIの詳細はこのへんで。
ちょっと古いかもしれませんが、大体同じです。
以下ソース。
# Description: # Get ticket title from Redmine Api. # # Commands: # http://redmine.hoge.com/issues/<ticket_id> - Get ticket title. async = require 'async' redmineUri = process.env.REDMINE_URI redmineApiAccessKey = process.env.REDMINE_API_ACCESS_KEY module.exports = (robot) -> robot.hear new RegExp(redimineUri + '/issues/[0-9]+', 'g'), (msg) -> getAsyncTicketName = (ticketId, i) -> (next) -> msg.http("#{redmineUri}/issues/#{ticketId}.json") .query(key: redmineApiAccessKey) .get() (err, res, body) -> if res.statusCode == 200 or res.statusCode == 304 msg.send "=>##{ticketId} #{JSON.parse(body).issue.subject}" else msg.send "=>##{ticketId} ネーヨヽ(`Д´)ノ" next() task = [] for url, i in msg.match ticketId = url.match /[0-9]+/g task.push getAsyncTicketName ticketId, i async.series task
使い方は事前に環境変数を設定するだけ。
$ export REDMINE_URI=http://redmine.hoge.com $ export REDMINE_API_ACCESS_KEY=abcdefghijklmnopqrstuvwxyzabcdefghijklmn $ hubot
これでチケット名取り放題ですわ。
追記 2013/07/25
1メッセージに複数のURLが入っていた場合に対処するためにasyncで順番通りmsg.sendするように修正