Además de las notificaciones por SMS, correo electrónico, DingTalk, chatbot de DingTalk y Lark, Data Management DMS admite webhooks personalizados.
Configuración
Para configurar su webhook, vaya a la sección Webhook en su configuración personal, introduzca la URL de su endpoint y seleccione el canal de notificación Webhook.
También debe configurar un método de firma y una clave de firma. Haga clic en el botón Test para comprobar la conectividad de la URL de su webhook. El panel de configuración de notificaciones también le permite seleccionar otros canales, como DingTalk (exclusive), DingTalk, DingTalk chatbot, Email, Lark y SMS.
Para obtener más información, consulte Configure your personal information and notification methods.
Eventos
Cuando se activa una notificación en DMS, el sistema envía una solicitud HTTP POST a la URL del webhook que configuró. La solicitud consta de un encabezado y un cuerpo.
Encabezado de la solicitud
DMS-Event: Message Hook
Cuerpo de la solicitud
|
Parámetro |
Tipo |
Descripción |
|
submitterUid |
String |
UID del usuario que envió la solicitud. |
|
submitterName |
String |
Nombre del usuario que envió la solicitud. |
|
category |
String |
Módulo de la función, como ticket, orquestación de tareas o desarrollo de almacén de datos. |
|
module |
String |
Tipo de negocio, como solicitud de permiso, cambio de datos, diseño de esquema o exportación de datos. |
|
event |
String |
Evento específico. Ejemplos: Pending Approval, Succeeded y Failed. |
|
taskId |
String |
ID del ticket o flujo de tareas. |
|
taskName |
String |
Nombre de la tarea. |
|
eventTime |
String |
Hora en que ocurrió el evento. |
|
message |
String |
Texto del mensaje integrado del sistema. |
|
targetUsers |
Array of objects |
Destinatarios previstos. Se admiten varios destinatarios. |
|
receivers |
Array of objects |
Matriz de objetos que representa a los destinatarios reales. Los usuarios sin un método de notificación configurado no recibirán notificaciones. |
|
uid |
String |
UID del destinatario. |
|
name |
String |
Nombre del destinatario. |
|
signatureMethod |
String |
Método de firma. Se admiten los siguientes métodos:
|
|
signatureText |
String |
Firma digital, que es un valor HmacSha1 calculado a partir de la URL del webhook, la clave de firma y el evento del mensaje. Ejemplo: |
Ejemplo de cuerpo de la solicitud
{
"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="
}
Ejemplo de respuesta
{"root":"","success":true} //Success
{"root":"error message","success":false} //Failure
Verificación de firma
Si configuró una clave de firma, utilice el siguiente código para verificar la firma.
// Verifies the signature of the incoming message
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"));
// The signature from the DMS message
String signatureText = jsonObject.getString("signatureText");
// The signature calculated on your end
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;
}
Ejemplo de receptor de webhook
Cree un script de eco simple para probar su endpoint de webhook y ver la carga útil del evento.
-
Guarde el siguiente script como 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 Elija un puerto no utilizado, como 8000, y ejecute el script:
ruby print_http_body.rb 8000.-
En la consola de DMS, configure la URL del webhook; por ejemplo,
http://my.host:8000/. Para obtener más información, consulte Configure your personal information and notification methods.Si su servidor requiere autenticación básica HTTP, incluya el nombre de usuario y la contraseña en la URL. Por ejemplo:
http://userName:password@my.host:8080/project/test-job -
En el cuadro de diálogo Modify notification method, haga clic en Test junto a la URL de su webhook. Su servidor recibirá una notificación de prueba de DMS.
El servidor recibe una notificación similar al siguiente ejemplo:
{ "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