Backlog が Webhook に対応した!
つい昨日、Backlog が Webhook に対応したというお知らせがありました!!!
今まで、Backlog の課題更新をお知らせをSlackで受け取るには、RSS フィードや Backlog API を使う方法があったようです。今回の Webhook を使ってみたら、リアルタイムに通知が飛んでくるので大変便利になりました。
参考にしたもの
Hubot と Slack の連携は、ネットでいろいろ調べたら出来ました。
Backlog API の更新情報を Slack に投げる部分は、いつかやろうと以前からストックしていた Qiita の記事「Backlog API V2 を使って、課題を Slack に連携させる」を大いに参考にしています。
手順
- Hubot をインストールする
- Hubot-Slack アダプタのバージョンを確認
- Hubot に Script を設置
- Backlog の Webhook を設定
Hubot に Script を設置
以下のコードを、Hubot の Script フォルダに置きます。
# Description:
# Backlog to Slack
#
# Commands:
# None
backlogUrl = 'https://xxxx.backlog.jp/'
module.exports = (robot) ->
robot.router.post "/yoursecreturl/:room", (req, res) ->
{ room } = req.params
{ body } = req
try
switch body.type
when 1
label = '課題の追加'
when 2, 3
# 「更新」と「コメント」は実際は一緒に使うので、一緒に。
label = '課題の更新'
else
# 課題関連以外はスルー
continue
# 投稿メッセージを整形
url = "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"
if body.content.comment?.id?
url += "#comment-#{body.content.comment.id}"
message = "*Backlog #{label}*\n"
message += "[#{body.project.projectKey}-#{body.content.key_id}] - "
message += "#{body.content.summary} _by #{body.createdUser.name}_\n>>> "
if body.content.comment?.content?
message += "#{body.content.comment.content}\n"
message += "#{url}"
# Slack に投稿
if message?
robot.messageRoom room, message
res.end "OK"
else
robot.messageRoom room, "Backlog integration error."
res.end "Error"
catch error
robot.send
res.end "Error"
Backlog 側の設定
Backlog のほうでは、「プロジェクト設定」ページにいくと「Webhook」という項目が増えています。
ここに「https://(Hubotの場所)/yoursecreturl/(つぶやかせたいチャンネル名)」というようなURLを登録すると、動きます。
更新の種類を切り替える番号の部分はBacklog APIの「最近の更新の取得」というところにあります。「課題の更新」と「課題のコメント追加」の番号は別なのですが、実際に使う場面を考えると「コメント付きの更新」が多いので、一緒にしてしまいました。
繰り返しますが、CoffeeScriptについてまったくよくわからず書いてますので、間違ってるところがあったらぜひご指摘ください。