1. 程式人生 > >redmine推送訊息至釘釘

redmine推送訊息至釘釘

前言

公司專案管理中用到了軟體redmine,然鵝redmine的任務訊息並不會實時推送給指定人員(支援郵件推送,個人並不是很喜歡郵件感覺比較正式,通過實時的訊息會更討喜一些)。然後萌生了推送到實時聊天工具的想法,釘釘是現階段比較流行的工具公司內聊天通訊工具(當然也有其他的QQ,微信,Skype等)。找到了一個方式:redmine可以通過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開啟網址,這個需要看情況替換成可訪問地址
  }
}

釘釘中建立機器人


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"}}
    
  • 效果