POST em JSON para a URL configurada, contendo os dados da conversa e do contato. Opcionalmente, o payload pode incluir o resumo gerado por IA, o histórico de mensagens e a nota CSAT.
A configuração fica em Configurações → Webhooks → Finalização de Atendimento (talk.saninternet.com/settings/webhooks).
O disparo acontece quando a conversa é finalizada de fato. Isso inclui a finalização manual pelo atendente, o encerramento automático por inatividade e a finalização após a avaliação CSAT (com ou sem resposta do cliente).
Configuração
Ative o webhook
Em Configurações → Webhooks → Finalização de Atendimento, ligue a chave Ativar webhook.
Informe a URL de destino
O endpoint do seu sistema que receberá o
POST. Use sempre https:// em produção.Gere o secret de assinatura
Clique em Gerar novo e guarde o valor com segurança. Ele será usado para validar a autenticidade de cada entrega.
Escolha o conteúdo do payload
Conversa e contato são sempre enviados. Você pode incluir também o resumo da IA, o histórico de mensagens e a nota CSAT.
Defina o filtro de relevância (opcional)
Com Registrar apenas atendimentos relevantes ativo, conversas triviais (como um cumprimento sem continuação) não são enviadas ao seu sistema.
Identificando o cliente: o ID externo
Para o seu sistema saber a qual cliente o atendimento pertence, cada contato do Talk possui um campo ID externo: um código livre que referencia o cliente no seu sistema (por exemplo, o ID dele no seu ERP ou CRM). O atendente define esse valor no painel de detalhes do contato, dentro do Inbox (seção Conversa, campo ID externo). Uma vez preenchido, ele acompanha o contato em todas as finalizações futuras e chega no payload comocontact.externalId.
Formato do payload
Campos especiais
| Campo | Significado |
|---|---|
summary: null | Resumo desativado na configuração. Se vier acompanhado de summaryPending: true, o resumo foi solicitado mas não ficou pronto a tempo. |
csat: { rating: null } | O cliente não respondeu a avaliação antes do tempo limite. |
contact.externalId: null | Nenhum ID externo definido para o contato. |
messages: null | Histórico de mensagens desativado na configuração. |
test: true | Entrega gerada pelo botão Testar webhook, com dados fictícios. Não registre como atendimento real. |
Quando o resumo da IA está habilitado, a entrega aguarda a geração do resumo e pode atrasar alguns minutos em relação ao encerramento da conversa.
Entrega e resposta
- O
POSTé enviado comContent-Type: application/json. - Seu endpoint deve responder com status
2xxem até 30 segundos. - Recomendação: receba, salve e responda. Deixe processamentos demorados para depois da resposta.
Headers enviados
| Header | Conteúdo |
|---|---|
X-Webhook-Event | Nome do evento (conversation.finished). |
X-Webhook-Signature | Assinatura do corpo: sha256=<HMAC-SHA256(corpo bruto, secret)>. |
X-Request-Id | Identificador único da entrega. |
Validando a assinatura
Toda entrega é assinada com HMAC-SHA256 usando o secret configurado. Recalcule o HMAC sobre o corpo bruto da requisição (antes do parse do JSON) e compare com o valor do headerX-Webhook-Signature usando comparação de tempo constante. Requisições com assinatura inválida devem ser rejeitadas.