Data Management除了手機簡訊、郵件、DingTalk資訊、DingTalk機器人Webhook等訊息通知方式外,支援使用自訂Webhook通知。
配置介紹
配置個人資訊時,在Webhook地區,輸入URL地址,並勾選Webhook通知渠道。
更多資訊,請參見配置個人資訊及通知方式。
事件說明
當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時,需選擇簽名方式(必選項),當前支援兩種簽名方式:
|
signatureText | String | 數位簽章,通過Webhook地址、密碼、訊息事件計算得出的HmacSha1值,例如 |
請求體樣本
{
"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的執行效果。
將如下指令碼儲存成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
選擇未被使用的連接埠(比如8000),並啟動指令碼:
ruby print_http_body.rb 8000
。在新版DMS控制台上,配置Webhook的URL地址,例如
http://my.host:8000/
。具體操作,請參見配置個人資訊及通知方式。當觸發支援HTTP Basic Authentication的伺服器時, 允許在URL中添加使用者名稱和密碼進行訪問,Webhook樣本如下:
http://userName:password@my.host:8080/project/test-job
在修改通知方式對話方塊中,單擊自訂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