Neste artigo você irá aprender a utilizar os webhooks no seu Movidesk.
Os webhooks são automações que permitem o envio de dados do Movidesk para outro sistema, instantaneamente, desde que atenda a requisitos determinados. Quando os critérios são cumpridos, as informações são enviadas e é preciso que o recebedor esteja preparado para hospedá-las.
O acionamento de um webhook ocorre por meio de gatilhos, disparados a partir de condições específicas.
Por isso, para configurar o webhook, é preciso habilitar o mesmo parâmetro dos gatilhos no perfil de acesso: Configurações > Pessoas > Perfis de acesso, selecionar a pessoa desejada e ativar a opção "Permitir criar gatilhos".
Há dois cenários que você pode fazer uso dessa automação, entre dois sistemas Movidesk ou entre Movidesk e outro software.
⚠️ Atenção: Seguimos a política de At Least Once Delivery (entrega garantida de pelo menos uma vez). Essa política prioriza a entrega de 100% dos eventos. Se, por qualquer motivo (como instabilidade na rede ou falha na confirmação), não houver certeza de que o webhook foi entregue, ele será reenviado. Isso aumenta a confiabilidade, mas pode gerar duplicatas. Por isso, recomendamos que as aplicações que recebem os webhooks implementem tratamento de duplicidades.
Webhooks entre dois domínios do Movidesk
Primeiramente, você precisará realizar a integração entre os dois sistemas. Clique aqui para saber como realizar essa etapa. É nesse momento que as configurações de disparo serão definidas.
Feito isso, um novo gatilho habilitado será criado automaticamente no domínio integrado ao seu. É ele que garante o funcionamento da webhook.
Webhooks entre Movidesk e outro sistema
Para realizar o envio de webhooks do Movidesk para outro sistema, você precisa ir até Configurações > Automação > Gatilhos. Clique no ícone + para criar um novo gatilho.
Preencha o nome que deseja dar para o gatilho e defina o seu tipo. Depois, preencha as condições que devem ser cumpridas para que o webhook seja enviado. Para mais informações sobre como utilizar os gatilhos, você pode clicar aqui.
No campo de ações, você deverá escolher a ação acionar webhook. Um campo se abrirá para que se adicione a URL do local de recebimento, que será acionada para receber os dados definidos.
Log de execução
Caso deseje acompanhar a execução dos webhooks, basta verificar em configurações > automação > webhook - log de execução.
Aparecerá a listagem com os webhooks disparados, contendo a última atualização, status, número de tentativas, URL, erro, gatilho e número do ticket.
Quando o gatilho é disparado, o webhook é direcionado a uma fila que é monitorada de 30 em 30 segundos. Na ocasião de erro de disparo de webhook, você receberá uma notificação no sininho, nos ícones da barra superior, ao lado direito. O sistema fará mais quatro tentativas de envio, a cada 30 segundos.
Casos de lentidão nos disparos de webhook são causados geralmente por regra de negócio dentro da chamada do webhook. O cenário ideal é receber o webhook, guardar em alguma tabela de um banco de dados, por exemplo, e invocar um segundo programa para fazer essa regra de negócio. Um webhook deve responder "Ok" em no máximo 3 (três) segundos (padrão de funcionamento de sistema de webhook). Se não fizer isso, é marcado como falho.
Existe um controle de tempo para evitar casos em que o webhook fica preso quando não há respostas dos sistemas terceiros. O limite atual é 2 minutos. Após esse período, o sistema cancela a operação com a mensagem "Error: The operation was cancelled".
Demonstração de execução
Ao disparar o webhook, a resposta seguirá essa estrutura:
{
"Id": int,
"Type": int,
"Subject": string,
"Urgency": string,
"Status": string,
"Origin": int,
"IsDeleted": bool,
"ServiceFirstLevel": string,
"ActionCount": int,
"ResolvedInFirstCall": bool,
"SlaSolutionTime": int,
"Actions": [
{
"Id": int,
"Type": int,
"Origin": int,
"Description": string,
"HtmlDescription": string,
"CreatedBy": {
"Id": string,
"PersonType": int,
"ProfileType": int
},
"IsDeleted": bool,
"Attachments": [
{
"FileName": string,
"Path": string
}
]
}
],
"CustomFieldValues": [
{
"CustomFieldId": int,
"CustomFieldRuleId": int,
"Line": int,
"Items": [
{
"CustomFieldItem": string,
"StorageFileGuid": string
}
]
}
],
"WebhookEvents": [
{
"Criteria": int,
"Operation": int
}
]
}