Configurar Webhooks
Configure webhooks para receber notificações em tempo real sobre mensagens, atualizações de status de entrega e eventos de campanhas.
conversation.closed — Conversa encerrada
Um evento ocorre (ex: mensagem recebida)
SendSeven envia HTTP POST para o seu URL
Se não houver 200, tentamos novamente com backoff exponencial
Eventos: Selecione quais eventos deseja receber
ID único do evento (use para deduplicação)
String do tipo de evento (ex.: message.received)
Timestamp ISO 8601 de quando o evento ocorreu
Payload específico do evento (varia por tipo de evento)
O array attachments só está presente quando a mensagem inclui mídia. Cada anexo inclui um id único, content_type, file_size e duas URLs de download. Tipos suportados: imagem, vídeo, áudio, documento, sticker.
url - Endpoint estável da API. Requer autenticação (API key ou token de sessão). Nunca expira.
signed_url - URL GCS pré-assinada. Não requer autenticação. Expira após 24 horas.
Se o download de mídia da plataforma falhar, os dados brutos da plataforma são passados com um marcador "source": "platform" em vez dos campos enriquecidos. Tipos que não são arquivo (localização, contatos, reações) não são afetados.
Cada evento que inclui um objeto de contato também contém um array contact_methods[] listando todos os identificadores do contato (o principal primeiro). Os campos phone e email de nível superior são mantidos para compatibilidade retroativa.
Seleções de resposta rápida e de lista chegam como message_type "button". A legenda está em "text" e um objeto "meta.button" estruturado contém o id e o payload, permitindo rotear a seleção sem analisar o texto.
Mostrar exemplo com clique em botão (resposta rápida / lista)
Identificador estável do botão conforme definido no envio da mensagem.
Payload retornado pelo canal (corresponde ao id para respostas rápidas).
Legenda legível que o usuário viu e tocou.
Mensagens de saída que incluem anexos de arquivo contêm o mesmo schema enriquecido de anexo (id, url, signed_url, content_type, file_size) das mensagens de entrada.
O campo error está no nível de dados (não dentro de message.meta). Os objetos completos de conversa e contato também são incluídos.
Eventos de atualização de status (delivered, read) usam um objeto de conversa mais simples sem bot_session_id ou campos de timestamp last_*_at. O objeto contact_method não é incluído.
Objetos de conversa de email incluem campos adicionais: email_integration_id e email_thread_id para contexto de threading.
O evento reopened inclui menos campos de conversa do que outros eventos de conversa (sem bot_session_id, timestamps last_*_at ou subject).
contact.updated e contact.deleted usam a mesma estrutura. O campo type do evento distingue entre eles.
Obtenha o corpo bruto da requisição (antes de fazer parse do JSON)
Calcule HMAC-SHA256 usando o seu segredo do webhook
Compare com o cabeçalho X-SendSeven-Signature
Use comparação timing-safe para prevenir ataques de timing
O seu URL é publicamente acessível (não localhost)
O seu certificado SSL é válido (não auto-assinado)
Não há firewall a bloquear os IPs da SendSeven
Usando JSON parsed em vez do corpo bruto
Segredo do webhook errado (copie novamente das configurações)
Middleware a modificar o corpo da requisição
Problemas de codificação (garanta UTF-8)
Guarde o ID do evento e verifique duplicados antes de processar
Torne os seus handlers de eventos idempotentes
Responda com 200 o mais rápido possível (processe de forma assíncrona)
Webhooks são callbacks HTTP que o SendSeven usa para enviar eventos em tempo real para a sua aplicação. Em vez de consultar a REST API periodicamente, seu endpoint recebe notificações instantâneas quando algo importante acontece - uma mensagem chega, uma conversa é encerrada, um contato é criado ou o status de entrega muda. Cada requisição de webhook é assinada com HMAC para segurança e automaticamente reenviada em caso de falha com backoff exponencial, garantindo que nenhum evento seja perdido.
Uma conta SendSeven com pelo menos um canal conectado
Um endpoint HTTPS público que possa receber requisições HTTP POST
Um certificado SSL válido (Let's Encrypt funciona perfeitamente)
Página de Webhooks do painel SendSeven com o botão Adicionar Endpoint destacado
Diálogo Adicionar Endpoint com campo de URL HTTPS e inscrições de eventos no SendSeven
Eventos: Selecione quais eventos receber
Cabeçalho Authorization (opcional): Cabeçalho de autenticação personalizado enviado em cada entrega
Através da API também pode configurar: retry_strategy (exponential/linear/none), max_retries (predefinição 8, máx. 15) e timeout_seconds (predefinição 30, intervalo 5–60)
Popup Webhook Criado com Sucesso exibindo a chave secreta com botão Copiar
Página de detalhes do webhook mostrando URL do endpoint, eventos inscritos, histórico de entregas e status de saúde no SendSeven
Automaticamente ao criar um webhook pelo painel
Automaticamente ao criar um webhook pela API (POST /api/v1/webhook-endpoints)
Automaticamente quando a URL do webhook é atualizada
Sob demanda via o endpoint de verificação (POST /api/v1/webhook-endpoints/{id}/verify)
- Criar um endpoint de webhook
- Registar o webhook no SendSeven
- Selecionar os tipos de eventos a receber
- Gerir o desafio de verificação do webhook
- Verificar a assinatura do webhook
- Gerir os eventos recebidos
- Testar com eventos de exemplo
FAQ
Quais eventos posso assinar?
Os webhooks do SendSeven suportam seis tipos principais de evento: message.received (mensagem recebida), message.sent (mensagem enviada), conversation.closed (conversa encerrada), contact.created (novo contato), contact.updated (contato modificado) e delivery.status (status alterado).
Como funciona o reenvio de webhook?
Se seu endpoint retornar um código de status diferente de 2xx ou não responder dentro de 30 segundos, o SendSeven automaticamente reenvia com backoff exponencial: imediatamente, 5 segundos, 30 segundos, 5 minutos, 30 minutos e 24 horas. Após 6 tentativas de entrega com falha, o webhook é automaticamente desativado e você receberá uma notificação.
Como verifico as assinaturas de webhook?
Cada requisição de webhook inclui um header X-SendSeven-Signature. Para verificar, calcule o HMAC-SHA256 do corpo bruto da requisição usando sua chave secreta de webhook e compare com o valor do header. Se corresponderem, a requisição é autêntica e vem do SendSeven.
Qual é o formato do payload do webhook?
Webhooks são enviados como requisições JSON POST com uma estrutura consistente: id (identificador único do evento), type (tipo do evento), timestamp (timestamp Unix), objeto de dados relevante (mensagem, conversa ou contato) e contexto do canal. Os payloads geralmente têm entre 1-5 KB para eventos padrão.
Posso configurar múltiplos endpoints de webhook?
Sim. Você pode adicionar até 10 endpoints de webhook por workspace. Cada endpoint pode ter uma URL diferente e assinar diferentes tipos de evento, permitindo que você direcione eventos para diferentes sistemas.
Como testo meu endpoint de webhook?
O SendSeven oferece um botão "Enviar Evento de Teste" no painel de webhooks que envia um payload de exemplo para seu endpoint sem afetar dados reais. Para testes locais, use ferramentas de depuração de webhook como webhook.site, RequestBin ou ngrok.
E se meu endpoint ficar temporariamente indisponível?
Os webhooks são enfileirados e reenviados por até 48 horas. Durante esse tempo, você pode corrigir seu endpoint e os eventos enfileirados serão entregues. Se não for resolvido dentro de 48 horas, os eventos são permanentemente descartados e registrados no seu histórico de entregas de webhook.