Skip to main content

Garantias de entrega

A SocialSell garante entrega at-least-once — o mesmo evento pode ser entregue mais de uma vez em situações de falha de rede ou timeout. Seu sistema deve ser idempotente: use o campo id do evento para descartar duplicatas.
Em produção, armazene os IDs processados em um banco de dados persistente (Redis, PostgreSQL, etc.) — um Set em memória é perdido ao reiniciar a aplicação.

Timeout e resposta esperada

A SocialSell aguarda 10 segundos pela resposta do seu endpoint. Se não receber resposta em tempo hábil, considera a entrega como falha e agenda uma retentativa. Resposta esperada: qualquer status 2xx (200, 201, 202, 204). Resposta de falha: qualquer outro status HTTP, timeout ou erro de conexão.
Responda com 200 OK o mais rápido possível e processe o evento de forma assíncrona (em uma fila como BullMQ, Celery, RabbitMQ). Isso evita timeouts causados por processamento lento ou chamadas a APIs externas dentro do handler.

Política de retentativas

Quando uma entrega falha, a SocialSell tenta novamente com backoff exponencial: Após 5 falhas consecutivas, a assinatura é automaticamente pausada (status: paused) para proteger o seu sistema de requisições desnecessárias.

Monitorando falhas

O objeto da assinatura inclui um contador de falhas:

Reativando uma assinatura pausada

Após corrigir o problema no seu endpoint, reative a assinatura:

Ordem de entrega

Eventos são entregues na ordem em que ocorrem, mas a ordem de entrega não é garantida em caso de retentativas. Por exemplo, se contact.updated falhou e está sendo retentado, contact.updated mais recente pode ser entregue antes da retentativa. Projete seu sistema para lidar com eventos fora de ordem usando os campos created_at do evento.

Ambientes e testes

Durante desenvolvimento, use ferramentas como ngrok, localtunnel ou webhook.site para receber eventos localmente:
Para testar sem um endpoint público, use o endpoint /v1/webhooks/:id/test (disponível no painel) para disparar um evento de exemplo com o payload real.