Hubot
Backlog
Chatwork

【Hubot】BacklogからHubotを経由してChatworkに課題の操作を通知

More than 3 years have passed since last update.


実現したこと

Backlogで課題を追加、もしくは更新・削除すると・・・

スクリーンショット 2015-03-19 20.36.05.png

という形で、リアルタイムでチャットワークに通知が送られます。

こんな感じでBacklogとチャットツールが連携されれば、メールから課題を辿る必要が無くなるので、ますますメールの存在感が減っていくような気がしました。

具体的な設定に関しては、ほとんどこちらを参考にさせていただいてますー。

BacklogでWebhookが追加されたよ!!!Hubot経由でSlackに連携してみた


準備


  • Backlogでプロジェクトを用意

  • Hubotをサーバにデプロイしておく

  • Chatworkで通知する部屋を用意


Hubot側の設定

適当な名前でスクリプトを作成する


backlog.coffee

backlogUrl = 'https://XXXXX.backlog.jp/'

module.exports = (robot) ->
robot.router.post "/room/:room", (req, res) ->
room = req.params.room
body = req.body

console.log 'body type = ' + body.type
console.log 'room = ' + room

try
switch body.type
when 1
label = '課題が追加'
when 2, 3
label = '課題が更新'
when 4
label = '課題が削除'
else
return

url = "#{backlogUrl}view/#{body.project.projectKey}-#{body.content.key_id}"

if body.content.comment?.id?
url += "#comment-#{body.content.comment.id}"

message = "[info][title]Backlogより[/title]"
message += "#{body.createdUser.name}さんによって#{label}されました\n"
message += "[#{body.project.projectKey}-#{body.content.key_id}]"
message += "#{body.content.summary}\n"

if body.content.comment?.content?
message += "#{body.content.comment.content}\n"
message += "#{url}[/info]"

console.log 'message = ' + message

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側の設定

プロジェクトの「プロジェクト設定」から「Webhook」を選択します。

には以下のような形式で入力します。

http://<Hubotのホスト名>/room/<ChatworkのルームID>

スクリーンショット 2015-03-20 10.49.34.png

保存する前に、「実行」をクリックするとWebhookのテスト送信が可能。

<通知するイベント>でBacklogの何の操作を送信するかを選べるようになっていて、【すべて】に✔️を入れると以下の様なレスポンスボディが送られます。



[
{
"id": 3153,
"project": {
"id": 92,
"projectKey": "SUB",
"name": "サブタスク",
"chartEnabled": true,
"subtaskingEnabled": true,
"textFormattingRule": null,
"archived": false,
"displayOrder": 0
},
"type": 2,
"content": {
"id": 4809,
"key_id": 121,
"summary": "コメント",
"description": "",
"comment": {
"id": 7237,
"content": ""
},
"changes": [
{
"field": "milestone",
"new_value": "R2014-07-23",
"old_value": "",
"type": "standard"
},
{
"field": "status",
"new_value": "4",
"old_value": "1",
"type": "standard"
}
]
},
"notifications": [
{
"id": 25,
"alreadyRead": false,
"reason": 2,
"user": {
"id": 5686,
"userId": "takada",
"name": "takada",
"roleType": 2,
"lang": "ja",
"mailAddress": "takada@nulab.example"
}
"resourceAlreadyRead":false
},
],
"createdUser": {
"id": 1,
"userId": "admin",
"name": "admin",
"roleType": 1,
"lang": "ja",
"mailAddress": "eguchi@nulab.example"
},
"created": "2013-12-27T07:50:44Z"
},

]

パラメータの「type」も1〜17まであるので、通知したい内容によってうまく表示を変えれますね。

”backlog.coffee”側で「type」によって表示を整形すれば、わかりやすくなると思います。

詳しくは最近の更新の取得を参考にしてください。