redmine推送訊息至釘釘
前言
公司專案管理中用到了軟體redmine,然鵝redmine的任務訊息並不會實時推送給指定人員(支援郵件推送,個人並不是很喜歡郵件感覺比較正式,通過實時的訊息會更討喜一些)。然後萌生了推送到實時聊天工具的想法,釘釘是現階段比較流行的工具公司內聊天通訊工具(當然也有其他的QQ,微信,Skype等)。找到了一個方式:redmine可以通過webhook的方式向外傳送請求,於是乎就能自己搭建一個小服務推送到釘釘了。
redmine的webhook外掛安裝
-
redmine2.4 -> 3.x 外掛 https://github.com/phanan/redmine_webhook
-
redmine4.x 外掛
我用的是3.x的版本用了第一個安裝完webhook後,管理員登入到redmine後可以看到多了一個webhook的配置項,如下圖
可以配置多個地址,看各自的需求吧。
redmine推送訊息解析
配置完webhook後,建立或修改redmine上的任務會出現以下類似訊息
{ "payload": { "action": "opened", "issue": { "id": 1, "subject": "A sample bug",//任務標題 "description": "Lorem ipsum dolor sic amet.",//描述 "created_on": "2015-03-06T04:23:42Z",//建立時間 "updated_on": "2015-03-07T10:00:59Z",//更新時間 "closed_on": null, "root_id": 1, "parent_id": null, "done_ratio": 0, "start_date": "2015-03-02",//計劃開始日期 "due_date": "2015-03-20",//計劃完成日期 "estimated_hours": 15, "is_private": false, "lock_version": 14, "project": { "id": 1, "identifier": "playground", "name": "Playground",//專案名稱 "description": "A sample playground project",//專案描述 "created_on": "2015-03-06T02:51:48Z",//專案建立時間 "homepage": "" }, "status": { "id": 1, "name": "New"//任務狀態 }, "tracker": { "id": 2, "name": "Feature"//任務型別 }, "priority": { "id": 3, "name": "High"//優先順序 }, "author": {//作者、派發者 "id": 1, "login": "admin", "mail": "[email protected]", "firstname": "Redmine", "lastname": "Admin", "identity_url": null, "icon_url": "http:\/\/www.gravatar.com\/avatar\/cb4f282fed12016bd18a879c1f27ff97?rating=PG&size=50" }, "assignee": {//接任務人 "id": 5, "login": "demo", "mail": "[email protected]", "firstname": "Demo", "lastname": "User", "identity_url": null, "icon_url": "http:\/\/www.gravatar.com\/avatar\/0e5601057dfe4b0fa94611f1fad4fb95?rating=PG&size=50" }, "watchers": [//跟蹤人 { "id": 1, "login": "admin", "mail": "[email protected]", "firstname": "Redmine", "lastname": "Admin", "identity_url": null, "icon_url": "http:\/\/www.gravatar.com\/avatar\/cb4f282fed12016bd18a879c1f27ff97?rating=PG&size=50" } ] }, "url": "http:\/\/localhost:3000\/issues\/1"//redmine開啟網址,這個需要看情況替換成可訪問地址 } }
釘釘中建立機器人
-
新建一個釘釘群
-
群設定-群智慧助手-新增更多-新增機器人-選自定義(webhook接收)
-
得到釘釘webhook接收地址
下面準備傳送請求咯。。。釘釘介面文件:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
java寫簡單接收轉發
-
java上一個controller接收
-
解析處理接收到的請求
-
轉成釘釘介面文件中的引數形式
當前自己寫了一個簡單的轉化。見倉庫:https://gitee.com/DexterPoker/redmine2dingding
簡單的模組如下:
配置項:
redmine.template=\n > # 任務<b> :{0}</b>\n > ### 專案 :{1}\n > ### 描述 :{2}\n > ### 狀態:{3}\n > ### 型別:{4}\n > ### 進度:{5} \n > ### 備註:{6}\n > ### 建立人:{7}\n > ### 優先順序:{8}\n > ### 指派給:{9}\n > ### 跟蹤人: {10}\n > ### 編輯人:{11}\n > ### 更新時間:{12}\n > [☛詳情戳這裡☚]({13})
實際目標格式化
String content = MessageFormat.format(template, subject, project, desc, status, tracker, percent, note, author, priority, assignee, watchers, editor, updateTime, url);
更多詳見git倉庫。
示例
-
請求引數(將配置引數中的釘釘webhook替換即可測試,專案名稱替換成“test專案”,請求形式get/post Content-Type: application/json)
{"payload":{"journal":{"notes":"","private_notes":false,"created_on":"2019-01-07T05:39:15.653Z","author":{"icon_url":"//www.gravatar.com/avatar/8a2bbeda9b56a3005a1a471a21a32dd6?rating=PG&size=50","firstname":"四","mail":"","id":8,"login":"lisi","lastname":"李"},"details":[{"prop_key":"status_id","property":"attr","old_value":"1","id":608,"value":"2"}],"id":477},"issue":{"updated_on":"2019-01-07T05:39:15.000Z","is_private":false,"lock_version":1,"subject":"測試 發現一個bug","author":{"icon_url":"//www.gravatar.com/avatar/ea548552b5363569ee9a1efd5c46789c?rating=PG&size=50","firstname":"三","mail":"","id":27,"login":"zhangsan","lastname":"張"},"description":"測試描述 xxxx情況下 空指標","project":{"identifier":"test","created_on":"2018-08-31T10:46:42.000Z","name":"test專案","description":"test專案","id":5,"homepage":""},"watchers":[{"icon_url":"//www.gravatar.com/avatar/d9af92dc2dc21e8b6bd7853027b398e3?rating=PG&size=50","firstname":"五","mail":"","id":13,"login":"wangwu","lastname":"王"}],"priority":{"name":"普通","id":2},"done_ratio":0,"created_on":"2019-01-07T03:45:30.000Z","tracker":{"name":"缺陷","id":4},"root_id":234,"id":234,"assignee":{"icon_url":"//www.gravatar.com/avatar/8a2bbeda9b56a3005a1a471a21a32dd6?rating=PG&size=50","firstname":"四","mail":"","id":8,"login":"lisi","lastname":"李"},"start_date":"2019-01-07","status":{"name":"已解決","id":2}},"action":"updated","url":"http://localhost:3000/issues/234"}}
-
效果