Estrutura do corpo (payload)
O corpo da requisição segue sempre esta estrutura padrão, facilitando a tipagem no seu backend:Nos eventos de SMS, o campo instanceId vem vazio, pois SMS não usa instâncias (diferente do WhatsApp). O identificador do SMS e os dados do evento ficam em data (smsId, to, status, sent_at, delivered_at, failed_at, external_id, provider, etc.). Os campos de identificação (event, workspace_id, timestamp) são constantes.
Tabela de Eventos (Escopos)
Ao configurar um Webhook no painel, você escolhe quais eventos deseja ouvir. Para SMS, ative apenas o que for útil para sua aplicação.Eventos de ciclo de vida do SMS
sms.sentSMS foi aceito e enviado ao provedor.sms.deliveredSMS foi entregue ao destinatário (DLR).sms.failedSMS falhou no envio ou foi reportado como falha.sms.cancelledSMS agendado foi cancelado.
SMS recebido (MO)
Quando o provedor de SMS envia um MO (mensagem de entrada) para a Notifique e o registro é persistido:sms.received— todo SMS de entrada armazenado (dataincluiinboundId,from,body,provider,relatedSmsIdquando houver correlação com um envio).sms.replied— mesmo MO quando está vinculado a umSmsLogde saída (dataincluismsIddo envio original).
id_sent/refer que casem com um envio, é possível definir no servidor uma variável de ambiente com o ID do workspace padrão — consulte a referência de variáveis de ambiente.
Retorno de cada evento (SMS)
Abaixo, o corpo completo (body) que a Notifique envia no POST para cada evento de SMS. O campodata é o que varia; o restante da estrutura é sempre o mesmo.
sms.sent
data: externalId, provider.
sms.delivered
data são enviados (nenhum opcional).
sms.failed
data: errorMessage.
sms.received
relatedSmsId pode ser null se o MO não foi correlacionado a um envio.
sms.replied
Segurança e Validação (Headers)
Para garantir que o POST veio da Notifique e não de um terceiro, a Notifique envia headers de assinatura em todas as requisições de webhook.| Header | Descrição |
|---|---|
| X-Notifique-Signature | Hash HMAC-SHA256 do corpo da requisição, assinado com seu Segredo de Webhook. Formato: t=timestamp,v1=hash. |
| X-Notifique-Timestamp | Momento exato (Unix Timestamp em segundos) em que o evento foi gerado. Use para evitar Replay Attacks. |
| X-Workspace-Id | ID do workspace, para facilitar roteamento em sistemas multi-tenant. |
| X-Webhook-Event | Nome do evento (ex.: sms.sent, sms.delivered). |
| Content-Type | application/json. |
Dica de segurança: Sempre verifique se o timestamp é recente (ex.: menos de 5 minutos) e recalcule o hash para validar a origem. O cálculo da assinatura é: HMAC-SHA256(secret, timestamp + ”.” + body), onde body é o corpo bruto do POST (string JSON).
Respostas esperadas
O seu servidor deve responder à requisição o mais rápido possível para evitar timeouts.| Status | Significado |
|---|---|
| 2xx | Sucesso. O evento é marcado como entregue e sai da fila da Notifique. |
| 4xx / 5xx / timeout | Falha. A Notifique agenda retentativas automáticas (ex.: 5 min, 30 min, 2 h; até 4 tentativas). |
