全部產品
Search
文件中心

Data Management:使用自訂Webhook通知

更新時間:Jan 08, 2025

Data Management除了手機簡訊、郵件、DingTalk資訊、DingTalk機器人Webhook等訊息通知方式外,支援使用自訂Webhook通知。

配置介紹

配置個人資訊時,在Webhook地區,輸入URL地址,並勾選Webhook通知渠道。

image

更多資訊,請參見配置個人資訊及通知方式

事件說明

當DMS中有訊息通知時,系統會將訊息通知發送到您指定的URL地址,發送的POST請求內容如下所示。

要求標頭

DMS-Event: Message Hook

請求體參數

參數

資料類型

描述

submitterUid

String

提交人的UID。

submitterName

String

提交人名稱。

category

String

功能模組:工單、任務編排、數倉開發等。

module

String

業務類型:許可權申請、資料變更、結構設計、資料匯出等。

event

String

具體事件:待審批、執行成功、執行失敗等。

taskId

String

工單ID或任務流ID。

taskName

String

任務名稱。

eventTime

String

事件時間。

message

String

系統內建訊息文本。

targetUsers

對象數組

目標接收者,支援通知多個接收人。

receivers

對象數組

實際接收人對象數組。未配置通知方式使用者將無法接收通知。

uid

String

接收人的UID,該參數為接收人對象的成員。

name

String

接收人名稱,該參數為接收人對象的成員。

signatureMethod

String

當您使用自訂Webhook時,需選擇簽名方式(必選項),當前支援兩種簽名方式:

  • None(預設):不使用簽名。

  • HMAC_SHA1:使用HMAC_SHA1密碼編譯演算法(Hashed Message Authentication Code, Secure Hash Algorithm)。

signatureText

String

數位簽章,通過Webhook地址、密碼、訊息事件計算得出的HmacSha1值,例如4mOdwflN1CgxxxxxxxuipuCYYWk=

請求體樣本

{
"messageEvent":{
    "submitterName":"xxx",
    "submitterUid":"167382665015xxxx",
    "category":"工單",
    "event":"執行成功",
    "eventTime":1625630049930,
    "message":"【Data Management】Webhook test, code: 144619 ",
    "module":"資料變更",
    "receivers":[{"name":"xxx1","uid":"167382665015xxxx"},{"name":"xxx2","uid":"167382665016xxxx"}],
    "targetUsers":[{"name":"xxx1","uid":"167382665015xxxx"},{"name":"xxx2","uid":"167382665016xxxx"}],
    "taskName":"Webhook test"
    },
"signatureMethod":"HMAC_SHA1",
"signatureText":"4mOdwflN1Cg5NdM2XPuipuCYYWk="
 }

響應體樣本

{"root":"","success":true}                   //成功
{"root":"error message","success":false}     //失敗

校正簽名及密鑰

當您在配置Webhook時指定了簽名和密鑰,則可執行如下代碼來校正簽名和密鑰的正確性。

// 回調方法,驗證簽名
public void callback(String message) {
    JSONObject jsonObject = JSONObject.parseObject(str, Feature.OrderedField);
    String webhookUrl = "填寫的webhook地址";
    String password = "填寫的簽名密鑰";
    String origin = webhookUrl + password + JSON.toJSONString(jsonObject.getJSONObject("messageEvent"));
    // DMS訊息攜帶的簽名
    String signatureText = jsonObject.getString("signatureText");
    // 使用者側計算的簽名
    String expectedSignatureText = signatureByHmacSha1(origin, password);
    assert Objects.equals(signatureText, expectedSignatureText);
}


public String signatureByHmacSha1(String origin, String key) {
    final String charset = "UTF-8";
    String result = "N/A";
    try {
        SecretKey secretKey = new SecretKeySpec(key.getBytes(charset), "HmacSHA1");
        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(secretKey);
        result = Base64.getEncoder().encodeToString(mac.doFinal(origin.getBytes(charset)));
    } catch (Exception ex){
    }
    return result;
}

Webhook接收端例子

您可以通過如下方式,建立一個簡單的Echo指令碼,測試、查看Webhook的執行效果。

  1. 將如下指令碼儲存成print_http_body.rb。

    require 'webrick'
    server = WEBrick::HTTPServer.new(:Port => ARGV.first)
    server.mount_proc '/' do |req, res|
      puts req.body
    end
    trap 'INT' do
      server.shutdown
    end
    server.start
  2. 選擇未被使用的連接埠(比如8000),並啟動指令碼:ruby print_http_body.rb 8000

  3. 新版DMS控制台上,配置Webhook的URL地址,例如http://my.host:8000/。具體操作,請參見配置個人資訊及通知方式

    當觸發支援HTTP Basic Authentication的伺服器時, 允許在URL中添加使用者名稱和密碼進行訪問,Webhook樣本如下:

    http://userName:password@my.host:8080/project/test-job
  4. 修改通知方式對話方塊中,單擊自訂Webhook地址右側的測試,您的服務端將會收到DMS發來的訊息通知。

    如下為通知樣本:

    {
    "messageEvent":{
        "submitterName":"xxx",
        "submitterUid":"167382665015xxxx",
        "category":"工單",
        "event":"執行成功",
        "eventTime":1625630049930,
        "message":"【Data Management】Webhook test, code: 144619 ",
        "module":"資料變更",
        "receivers":[{"name":"xxx1","uid":"167382665015xxxx"}],
        "targetUsers":[{"name":"xxx1","uid":"167382665015xxxx"}],
        "taskName":"Webhook test"
        },
    "signatureMethod":"HMAC_SHA1",
    "signatureText":"4mOdwflN1Cg5NdM2XPuipuCYYWk="
     }
    127.0.0.1 - - [20/Apr/2021:20:07:47 CST] "POST / HTTP/1.1" 200 0