Backlog API V2 を使って、Backlog に課題が投稿されたり更新されたりした場合は Slack へ通知を行うようにしたのでそのメモです。
(Hubot を使っていて、Slack 以外でも応用できそう)
下準備
- Hubot が動く環境を用意。(私は heroku を使いました、設置方法はググるといっぱい出てきます)
- Hubot の環境に以下のモジュールを追加
- node-cron
- node-time
- Backlog API キーを取得
コード
Hubot の scripts フォルダに以下のようなコードを設置。
# Description:
# Backlog to Slack
#
# Commands:
# None
cron = require('cron').CronJob
intervalMinutes = 10
backlogUrl = 'https://****.backlog.jp/'
apiKey = '****'
module.exports = (robot) ->
new cron "0 */#{intervalMinutes} * * * *", ->
# APIアクセス
robot.http("#{backlogUrl}api/v2/space/activities?apiKey=#{apiKey}")
.get() (err, res, body) ->
# 前回cron実行時刻
lastTime = new Date - intervalMinutes*60*1000
for feed in JSON.parse body
# 前回cron実行時刻より古いものは処理しない
if new Date(feed.created) < lastTime
continue
switch feed.type
when 1
label = '課題追加'
when 2
label = '課題更新'
when 3
label = '課題コメント'
else
# 課題関連以外はスルー
continue
# 投稿メッセージを整形
url = "#{backlogUrl}view/#{feed.project.projectKey}-#{feed.content.key_id}"
if feed.content.comment?.id?
url += "#comment-#{feed.content.comment.id}"
message = "[#{feed.project.projectKey}] #{label} - #{feed.content.summary} by #{feed.createdUser.name} #{url}"
# Slack に投稿
robot.send {room: '#sample'}, message
, null, true, 'Asia/Tokyo'
node-cron を使って、一定時間間隔(ここでは10分)毎に Backlog API の 最近の更新の取得 をコールしています。
で、直近10分以内の更新があれば、てきとうにメッセージを整形して Hubot の robot.send で Slack に投稿しているだけです。
こんな感じで流れてきます。
今回は課題関連だけを通知していますが、git や Wiki の更新情報も取れている状態なので、そのへんもわりと簡単に対応できるかと思います。