Além das notificações por SMS, e-mail, DingTalk, chatbot do DingTalk e Lark, o Data Management DMS oferece suporte a webhooks personalizados.
Configuração
Para configurar seu webhook, acesse a seção Webhook nas configurações pessoais, insira a URL do endpoint e selecione o canal de notificação Webhook.
Configure também um método de assinatura e uma chave de assinatura. Clique em Test para verificar a conectividade da URL do webhook. O painel de configurações de notificação permite selecionar outros canais, como DingTalk (exclusive), DingTalk, DingTalk chatbot, Email, Lark e SMS.
Para mais informações, consulte Configurar suas informações pessoais e métodos de notificação.
Eventos
Quando o DMS aciona uma notificação, o sistema envia uma solicitação HTTP POST para a URL do webhook configurada. A solicitação contém um cabeçalho e um corpo.
Cabeçalho da solicitação
DMS-Event: Message Hook
Corpo da solicitação
|
Parâmetro |
Tipo |
Descrição |
|
submitterUid |
String |
UID do usuário que enviou a solicitação. |
|
submitterName |
String |
Nome do usuário que enviou a solicitação. |
|
category |
String |
Módulo de recurso, como ticket, orquestração de tarefas ou desenvolvimento de data warehouse. |
|
module |
String |
Tipo de negócio, como solicitação de permissão, alteração de dados, design de esquema ou exportação de dados. |
|
event |
String |
Evento específico. Exemplos: Pending Approval, Succeeded e Failed. |
|
taskId |
String |
ID do ticket ou fluxo de tarefas. |
|
taskName |
String |
Nome da tarefa. |
|
eventTime |
String |
Horário em que o evento ocorreu. |
|
message |
String |
Texto da mensagem nativa do sistema. |
|
targetUsers |
Array of objects |
Destinatários pretendidos. Vários destinatários são suportados. |
|
receivers |
Array of objects |
Array de objetos que representa os destinatários reais. Usuários sem método de notificação configurado não recebem notificações. |
|
uid |
String |
UID do destinatário. |
|
name |
String |
Nome do destinatário. |
|
signatureMethod |
String |
Método de assinatura. Os seguintes métodos têm suporte:
|
|
signatureText |
String |
Assinatura digital, valor HmacSha1 calculado com base na URL do webhook, na chave de assinatura e no evento de mensagem. Exemplo: |
Exemplo de corpo da solicitação
{
"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="
}
Exemplo de resposta
{"root":"","success":true} //Success
{"root":"error message","success":false} //Failure
Verificação de assinatura
Se você configurou uma chave de assinatura, use o código a seguir para verificar a assinatura.
// 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;
}
Exemplo de receptor de webhook
Crie um script simples de eco para testar o endpoint de webhook e visualizar o payload do evento.
-
Salve o script a seguir 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 Escolha uma porta não utilizada, como 8000, e execute o script:
ruby print_http_body.rb 8000.-
No console do DMS, configure a URL do webhook, por exemplo,
http://my.host:8000/. Para mais informações, consulte Configurar suas informações pessoais e métodos de notificação.Se o servidor exigir Autenticação Básica HTTP, inclua o nome de usuário e a senha na URL. Por exemplo:
http://userName:password@my.host:8080/project/test-job -
Na caixa de diálogo Modify notification method, clique em Test ao lado da URL do webhook. O servidor receberá uma notificação de teste do DMS.
O servidor recebe uma notificação semelhante ao exemplo a seguir:
{ "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