O que é um webhook e para que serve
Características de funcionamento dos webhooks
Estrutura da requisição do webhook
Verificação de autenticidade da requisição
Recomendações para o processamento de webhooks
Webhook é um mecanismo de envio automático de notificações do nosso serviço para o seu sistema (CRM, ERP, 1C, aplicativo próprio, etc.) quando ocorrem determinados eventos, através de requisições HTTP(S).
Em vez de consultar regularmente a API (por exemplo, para verificar o status de entrega de um SMS), seu servidor recebe uma requisição HTTP(S) no momento em que o evento realmente acontece.
O uso de webhooks permite:
Atualmente, os seguintes tipos de eventos estão disponíveis:
Vá para Painel de Controle → API → Webhooks e clique no botão "Criar webhook". O formulário de criação de um novo webhook será aberto.
No formulário de criação do webhook, especifique os seguintes parâmetros:
Define o evento no sistema Mobizon que disparará o envio do webhook.
Opções disponíveis:
O formato no qual os dados do webhook serão enviados para o seu servidor:
rawxmljsonEscolha o formato dependendo das capacidades do seu processador.
URL para o qual os webhooks serão enviados.
Restrições:
Importante:
A chave secreta é usada para verificar a autenticidade da requisição.
Características:
Se a chave secreta não for definida:
Marque a opção "Ativo", se o webhook deve começar a funcionar imediatamente após a criação.
Clique no botão "Salvar". O webhook criado aparecerá na lista.
200–299 em no máximo 5 segundos.200–299, o sistema realizará um reenvio.Tentativas de reentrega:
Todos os webhooks são enviados por requisição HTTP(S) usando o método POST.
| Campo | Descrição |
|---|---|
eventId | Identificador único do evento (igual para tentativas de reenvio) |
eventType | Tipo de evento (por exemplo, sms-delivery-report) |
eventCreateTs | Data e hora de criação do evento (yyyy-mm-dd hh:mm:ss) |
webhookId | Identificador do webhook |
attempt | Número da tentativa de entrega |
data | Dados do evento |
sign | Assinatura digital da requisição |
sms-delivery-report){
"eventId": 26,
"eventType": "sms-delivery-report",
"eventCreateTs": "2026-01-15 11:42:28",
"webhookId": 1,
"attempt": 1,
"data": {
"campaignId": 245455096,
"messageId": 169275418,
"segNum": 3,
"statusUpdateTs": "2026-01-15 11:42:08",
"status": "DELIVRD",
"to": "380737893456"
},
"sign": "3f0a37cf5e27fe0615504b6d700b4b657ecfd39d"
}
data| Campo | Descrição |
|---|---|
campaignId | ID da campanha de SMS |
messageId` | ID da mensagem SMS |
segNum | Número de segmentos do SMS |
statusUpdateTs | Hora da atualização do status |
status | Status final da entrega |
to | Número do destinatário |
Webhooks para formulários podem ser enviados em várias ações do usuário: envio de formulário, confirmação de contato ou cancelamento de inscrição.
form-submission)O evento é enviado imediatamente após o preenchimento e envio bem-sucedidos do formulário pelo usuário.
{
"eventId": 40,
"eventType": "form-submission",
"eventCreateTs": "2026-01-15 16:53:30",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"items": [
{
"submissionDataId": 12303,
"fieldId": 3744,
"fieldType": "TEXT_STRING",
"fieldName": "Name",
"value": "Ivan"
},
{
"submissionDataId": 12304,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationRequired": 1
},
{
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Celular",
"value": "380737893456",
"confirmationRequired": 1
}
]
},
"sign": "0a38941c47689e3cb3634db817cd4851d2511c47"
}
Descrição do campo items
Cada elemento do array corresponde a um campo do formulário.
| Campo | Descrição |
|---|---|
submissionDataId | ID do valor do campo do formulário |
fieldId | ID do campo do formulário |
fieldType | Tipo do campo (TEXT_STRING, EMAIL, MOBILE, etc.) |
fieldName | Nome do campo |
value | Valor inserido pelo usuário |
confirmationRequired | Indicador de necessidade de confirmação (1 — requer) |
form-contact-confirmation)O evento é enviado após a confirmação do endereço de e-mail ou número de telefone pelo usuário usando um código por SMS ou e-mail.
{
"eventId": 42,
"eventType": "form-contact-confirmation",
"eventCreateTs": "2026-01-15 16:54:15",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"submissionId": 3680,
"item": {
"submissionDataId": 12305,
"fieldId": 3746,
"fieldType": "MOBILE",
"fieldName": "Celular",
"value": "380737893456",
"confirmationTs": "2026-01-15 16:54:14"
}
},
"sign": "fe0da5443a9f5cadd0e972301415816cec481137"
}
form-contact-unsubscribe)O evento é enviado se o usuário cancelar a inscrição através de um formulário de cancelamento.
{
"eventId": 45,
"eventType": "form-contact-unsubscribe",
"eventCreateTs": "2026-01-15 17:33:47",
"webhookId": 1,
"attempt": 1,
"data": {
"formId": 846,
"unsubscribeTs": "2026-01-15 17:33:46",
"items": [
{
"submissionId": 3675,
"submissionDataId": 12289,
"fieldId": 3745,
"fieldType": "EMAIL",
"fieldName": "E-mail",
"value": "test@mobizon.com",
"confirmationTs": ""
}
]
},
"sign": "06b78cf55ad19f9810babc415e86535384b74663"
}
Para verificação, é utilizado o campo sign, calculado pelo algoritmo SHA1.
A string para a assinatura é formada na seguinte ordem:
eventId|attempt|eventCreateTs|secretKey
Onde secretKey é a chave secreta especificada na criação do webhook.
$secretKey = 'secret123';
$payload = json_decode(file_get_contents('php://input'), true);
$hash = sha1(
$payload['eventId'] . '|' .
$payload['attempt'] . '|' .
$payload['eventCreateTs'] . '|' .
$secretKey
);
if (hash_equals($hash, $payload['sign'])) {
http_response_code(200);
} else {
http_response_code(403);
}
eventId e não processar o mesmo evento repetidamente.| Problema | Causa possível |
|---|---|
| Webhook não chega | URL inacessível ou número de redirecionamentos excedido |
| Notificações repetidas | O servidor não retornou HTTP 200 a tempo |
| Assinatura não coincide | Chave secreta incorreta ou ordem dos campos errada |
| Erro de processamento | Falta de verificação da estrutura do payload |
Os webhooks permitem obter dados sobre status de SMS e formulários:
A verificação correta da assinatura e o processamento cuidadoso de requisições repetidas garantem uma integração confiável.