LoginSignup
38
37

More than 5 years have passed since last update.

Backlog API V2 を使って、課題を Slack に連携させる

Last updated at Posted at 2014-10-23

Backlog API V2 を使って、Backlog に課題が投稿されたり更新されたりした場合は Slack へ通知を行うようにしたのでそのメモです。
(Hubot を使っていて、Slack 以外でも応用できそう)

下準備

  1. Hubot が動く環境を用意。(私は heroku を使いました、設置方法はググるといっぱい出てきます)
  2. Hubot の環境に以下のモジュールを追加
    • node-cron
    • node-time
  3. 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 に投稿しているだけです。

スクリーンショット 2014-10-23 17.00.16.png

こんな感じで流れてきます。

今回は課題関連だけを通知していますが、git や Wiki の更新情報も取れている状態なので、そのへんもわりと簡単に対応できるかと思います。

38
37
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
37