Para levar as conversas da SocialSell para um data warehouse, um helpdesk ou um sistema próprio.
Escopos necessários: read:conversations, write:webhooks.
1. Assine os dois lados
Espelhar só o que entra produz metade da conversa. Assine os três eventos de mensagem:
Guarde o secret da resposta — ele só aparece na criação.
message.sent cobre também o que o vendedor manda do próprio celular em números conectados por QR
Code. Sem ele, essas mensagens ficariam fora do espelho.
2. Valide a assinatura
Obrigatório. O detalhe e exemplos em quatro linguagens estão em Segurança. O resumo:
Use o corpo bruto, nunca o JSON reserializado.
3. Deduplique pelo id do evento
A entrega é at-least-once: o mesmo evento pode chegar duas vezes em falha de rede ou reenvio manual.
Guarde os ids em armazenamento persistente. Um Set em memória some no restart, e a deduplicação vai junto.
4. Responda rápido
Você tem 10 segundos. Responda 200 e processe em background — é a causa número um de timeout em integração de webhook.
Depois de 5 tentativas sem sucesso a entrega é marcada como falha; após 10 falhas consecutivas o endpoint é pausado automaticamente.
5. Não confie na ordem
A ordem de chegada não é garantida — retentativas e concorrência reordenam. Reconstrua a linha do tempo pelo created_at do evento e descarte atualizações mais velhas que o estado que você já tem.
6. Preencha os buracos
Se o seu endpoint ficou fora por mais de ~15 minutos, a recuperação automática já se esgotou. Duas saídas:
Reenvio manual — o log guarda 15 dias:
Varredura por API — mais confiável para janelas longas:
E depois, por conversa, GET /v1/conversations/:id/messages.
7. Monitore a saúde
O objeto da assinatura traz status, consecutive_failures, last_delivery_at e last_failure_at. Vale um alerta quando consecutive_failures passar de 3 — a pausa automática vem aos 10.
Assine também channel.disconnected. Enquanto um canal está fora, nenhuma mensagem entra ou sai por ele — e o espelho fica silenciosamente vazio, sem erro nenhum.
Checklist