Selain notifikasi melalui SMS, email, DingTalk, chatbot DingTalk, dan Lark, Data Management DMS mendukung webhook kustom.
Konfigurasi
Untuk mengonfigurasi webhook Anda, buka bagian Webhook di pengaturan pribadi Anda, masukkan URL endpoint, lalu pilih saluran notifikasi Webhook.
Anda juga harus mengonfigurasi signature method dan kunci tanda tangan. Klik tombol Test untuk memverifikasi konektivitas URL webhook Anda. Panel pengaturan notifikasi juga memungkinkan Anda memilih saluran lain, seperti DingTalk (exclusive), DingTalk, DingTalk chatbot, Email, Lark, dan SMS.
Untuk informasi lebih lanjut, lihat Konfigurasikan informasi pribadi dan metode notifikasi Anda.
Events
Ketika notifikasi dipicu di DMS, sistem mengirim permintaan HTTP POST ke URL webhook yang telah Anda konfigurasi. Permintaan tersebut terdiri dari header dan body.
Request header
DMS-Event: Message Hook
Request body
|
Parameter |
Type |
Description |
|
submitterUid |
String |
UID pengguna yang mengajukan permintaan. |
|
submitterName |
String |
Nama pengguna yang mengajukan permintaan. |
|
category |
String |
Modul fitur, seperti ticket, task orchestration, atau pengembangan gudang data. |
|
module |
String |
Jenis bisnis, seperti permission application, data change, schema design, atau data export. |
|
event |
String |
Event spesifik. Contoh: Pending Approval, Succeeded, dan Failed. |
|
taskId |
String |
ID ticket atau alur tugas. |
|
taskName |
String |
Nama tugas. |
|
eventTime |
String |
Waktu saat event terjadi. |
|
message |
String |
Teks pesan bawaan sistem. |
|
targetUsers |
Array of objects |
Penerima yang dituju. Mendukung beberapa penerima. |
|
receivers |
Array of objects |
Array objek yang merepresentasikan penerima aktual. Pengguna yang tidak memiliki metode notifikasi yang dikonfigurasi tidak akan menerima notifikasi. |
|
uid |
String |
UID penerima. |
|
name |
String |
Nama penerima. |
|
signatureMethod |
String |
Metode tanda tangan. Metode tanda tangan berikut didukung:
|
|
signatureText |
String |
Tanda tangan digital, yaitu nilai HmacSha1 yang dihitung dari URL webhook, kunci tanda tangan, dan event pesan. Contoh: |
Contoh request body
{
"messageEvent":{
"submitterName":"xxx",
"submitterUid":"167382665015xxxx",
"category":"ticket",
"event":"Succeeded",
"eventTime":1625630049930,
"message":"[Data Management DMS] Webhook test, code: 144619 ",
"module":"data change",
"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="
}
Contoh respons
{"root":"","success":true} //Success
{"root":"error message","success":false} //Failure
Verifikasi tanda tangan
Jika Anda telah mengonfigurasi kunci tanda tangan, gunakan kode berikut untuk memverifikasi tanda tangan.
// Memverifikasi tanda tangan dari pesan yang masuk
public void callback(String message) {
JSONObject jsonObject = JSONObject.parseObject(message, Feature.OrderedField);
String webhookUrl = "Your configured webhook URL";
String signatureKey = "Your configured signature key";
String origin = webhookUrl + signatureKey + JSON.toJSONString(jsonObject.getJSONObject("messageEvent"));
// Tanda tangan dari pesan DMS
String signatureText = jsonObject.getString("signatureText");
// Tanda tangan yang dihitung di sisi Anda
String expectedSignatureText = signatureByHmacSha1(origin, signatureKey);
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;
}
Contoh penerima webhook
Anda dapat membuat skrip echo sederhana untuk menguji endpoint webhook dan melihat muatan event.
-
Simpan skrip berikut sebagai 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 -
Pilih port yang tidak digunakan, misalnya 8000, lalu jalankan skrip:
ruby print_http_body.rb 8000. -
Di Konsol DMS, konfigurasikan URL webhook, misalnya
http://my.host:8000/. Untuk informasi lebih lanjut, lihat Konfigurasikan informasi pribadi dan metode notifikasi Anda.Jika server Anda memerlukan HTTP Basic Authentication, Anda dapat menyertakan username dan password di URL. Contohnya:
http://userName:password@my.host:8080/project/test-job -
Di kotak dialog Modify notification method, klik Test di sebelah URL webhook Anda. Server Anda akan menerima notifikasi uji coba dari DMS.
Server menerima notifikasi yang mirip dengan contoh berikut:
{ "messageEvent":{ "submitterName":"xxx", "submitterUid":"167382665015xxxx", "category":"ticket", "event":"Succeeded", "eventTime":1625630049930, "message":"[Data Management DMS] Webhook test, code: 144619 ", "module":"data change", "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