MENU

Backlog→Hubot→Slack通知のCoffeeScript

そろそろslackも活用せないかんなぁと思って、いろいろゴニョゴニョやってみて、結構な活用方法やノウハウがネット上に転がってます。

んで、Backlog→Slackへの通知(bot)に関する情報となると、なぜかミニマムな情報しかない。
(課題の追加・編集だけを通知、みたいな?)

http://d.hatena.ne.jp/itog/20150226/1424939686あたりを参考にさせていただき、通知内容を充実させてスクリプトを晒してみる。

課題関連やWiki関連、git関連の通知フォーマットがまったく異なるので、そのフォーマットにあわせてslackに吐き出す部分の追記・修正が主なところ。ご参考になれば。

※HubotやらHerokuについての情報はGoogle先生に聞いてみてください

backlogUrl = 'https://<BacklogのスペースID>.backlog.jp/'

module.exports = (robot) ->
  robot.router.post "/<任意の文字列>/:room", (req, res) ->
    { room } = req.params
    { body } = req
    try
      switch body.type
        when 1
          msg  = "*Backlog [#{body.project.projectKey}-#{body.content.key_id}] #{body.content.summary} _by #{body.createdUser.name}_*\n"
          msg += "課題が追加されました\n";
          msg += "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"
          msg += ">>> #{body.content.comment.content}\n"
        when 2, 3
          msg  = "*Backlog [#{body.project.projectKey}-#{body.content.key_id}] #{body.content.summary} _by #{body.createdUser.name}_*\n"
          msg += "課題が更新されました\n";
          msg += "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}#comment-#{body.content.comment.id}"
          msg += ">>> #{body.content.comment.content}\n"
        when 5
          msg  = "*Backlog [#{body.project.projectKey}] #{body.content.name} _by #{body.createdUser.name}_*\n"
          msg += "Wikiページが登録されました\n";
          msg += "#{backlogUrl}wiki/#{body.project.projectKey}/#{body.content.name}\n"
          msg += ">>> #{body.content.content}\n"
        when 6
          msg  = "*Backlog [#{body.project.projectKey}] #{body.content.name} _by #{body.createdUser.name}_*\n"
          msg += "Wikiページが更新されました\n";
          msg += "#{backlogUrl}wiki/#{body.project.projectKey}/#{body.content.name}\n"
          msg += ">>> #{body.content.content}\n"
        when 8
          msg  = "*Backlog [#{body.project.projectKey}] #{body.content.dir}#{body.content.name} _by #{body.createdUser.name}_*\n"
          msg += "共有ファイルが追加されました\n";
          msg += "#{backlogUrl}file/#{body.project.projectKey}#{body.content.dir}#{body.content.name}\n";
        when 9
          msg  = "*Backlog [#{body.project.projectKey}] #{body.content.dir}#{body.content.name} _by #{body.createdUser.name}_*\n"
          msg += "共有ファイルが更新されました\n";
          msg += "#{backlogUrl}file/#{body.project.projectKey}#{body.content.dir}#{body.content.name}\n";
        when 12
          ref = body.content.ref.split("/").pop()
          msg  = "*Backlog [#{body.project.projectKey}] #{body.content.revisions[0].comment} _by #{body.createdUser.name}_*\n"
          msg += "GIT リポジトリ#{body.content.repository.name} の #{ref}にプッシュされました\n";
          msg += "#{backlogUrl}git/#{body.project.projectKey}/#{body.content.repository.name}/#{body.content.revision_type}/#{body.content.revisions[0].rev}";
        when 14
          msg  = "*Backlog [#{body.project.projectKey}] 課題をまとめて操作 _by #{body.createdUser.name}_*\n"
          msg += "課題がまとめて更新されました\n";
          msg += ">>> "
          for link in body.content.link
            msg += "[#{body.project.projectKey}-#{link.key_id}] #{link.title}\n"
            msg += "#{backlogUrl}view/#{body.project.projectKey}-#{link.key_id}\n\n"
        else
          # 上記以外はスルー
          return

      # Slack に投稿
      if msg?
        robot.messageRoom room, msg
        res.end "OK"
      else
        robot.messageRoom room, "Backlog integration error."
        res.end "Error"
    catch error
      robot.send
      res.end "Error"