VoltarTake Sales

Webhooks

Receba eventos das conversas em tempo real no seu sistema — ou por e-mail.

O que são

Webhooks avisam o seu sistema quando algo acontece no Take Sales, sem você precisar ficar consultando a plataforma.


Configurando

  1. Acesse Webhooks no menu lateral
  2. Clique em Adicionar Webhook
  3. Escolha o tipo:
    • Endpoint HTTP — Envia um POST para a sua URL
    • E-mail — Notifica endereços de e-mail (até 10), com limite diário configurável
  4. Selecione os eventos
  5. Opcional: restrinja a agentes específicos (vazio = todos)
  6. Salve e use Enviar teste para validar
CampoObservação
URLPrecisa ser HTTPS; localhost não é aceito
SegredoMínimo de 16 caracteres; usado para assinar o payload (há um botão para gerar)
Nome do header de assinaturaPadrão X-Webhook-Signature
AtivoDesligue para pausar sem perder a configuração

Eventos disponíveis

EventoQuando dispara
conversation.startedUma nova conversa é iniciada
conversation.endedA conversa é finalizada (inclui mensagens e duração)
lead.capturedO visitante fornece dados de contato
visit.scheduledUma visita/reunião é agendada por integração
sentiment.negativeA conversa é classificada como negativa
visitor.identifiedO visitante passa a ser identificado

Eventos de tracking configurados no agente também podem ser enviados, com o nome no formato tracking.<nome_do_evento>.


Formato do payload

Todo webhook é um POST com JSON:

{
  "event": "conversation.ended",
  "timestamp": "2026-09-18T14:30:00.000Z",
  "data": {
    "conversation_id": "7c1f…",
    "workspace_id": "H2609…",
    "agent_id": "b1e5…",
    "visitor_email": "joao@empresa.com",
    "visitor_full_name": "João Silva",
    "visitor_phone": "+5511999999999",
    "started_at": "2026-09-18T14:22:10.000Z",
    "ended_at": "2026-09-18T14:30:00.000Z",
    "duration_seconds": 470,
    "messages": [],
    "visitor_info": {
      "origin_url": "https://seusite.com/precos",
      "referrer": "https://google.com",
      "device": { "type": "desktop", "os": "macOS", "browser": "Chrome" },
      "language": "pt-BR",
      "timezone": "America/Sao_Paulo"
    },
    "extracted_variables": {}
  }
}

Campos como messages, visitor_contact_data, tracking_data e extracted_variables aparecem conforme o evento e o que foi coletado na conversa.

Headers

HeaderConteúdo
Content-Typeapplication/json
X-Webhook-EventNome do evento
X-Webhook-TimestampMesmo timestamp do corpo
X-Webhook-SignatureAssinatura HMAC (só quando há segredo; o nome do header é configurável)

Verificando a assinatura

A assinatura é o HMAC-SHA256 do corpo bruto, em hexadecimal, usando o segredo cadastrado:

const crypto = require('crypto');
 
function verifyWebhook(rawBody, signature, secret) {
  const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  // aceita tanto "<hex>" quanto "sha256=<hex>"
  const received = signature.replace(/^sha256=/, '');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received));
}
⚠️

Use o corpo bruto (antes do parse JSON) no cálculo. Reserializar o objeto muda bytes e quebra a verificação. Os envios de teste feitos pelo painel prefixam a assinatura com sha256= — por isso o exemplo acima aceita os dois formatos.


Reenvio em caso de falha

Se o seu endpoint não responder com sucesso, a plataforma tenta novamente:

  • Até 3 tentativas por evento
  • Backoff exponencial entre elas (≈2s e ≈4s)
  • Timeout de 10 segundos por tentativa

Depois disso o evento é descartado e a falha fica registrada.

💡

Responda 200 o mais rápido possível e processe de forma assíncrona (fila). Endpoint lento vira timeout, timeout vira retry, e retry vira evento duplicado.


Idempotência

O mesmo evento pode chegar mais de uma vez. Use conversation_id + event + timestamp como chave de idempotência e ignore o que já foi processado.


Testando em desenvolvimento

ngrok

ngrok http 3000

Use a URL gerada (HTTPS) como destino do webhook e dispare Enviar teste.

webhook.site

Para inspecionar o payload sem escrever código: copie a URL gerada em webhook.site, cadastre como destino e dispare um teste.


Depurando entregas com falha

  1. Confirme que a URL é pública e HTTPS com certificado válido
  2. Verifique o tempo de resposta — acima de 10s vira timeout
  3. Responda 2xx — qualquer outro status conta como falha
  4. Cheque a assinatura do seu lado antes de culpar o payload
  5. Confirme o filtro de agentes — o webhook pode estar restrito a outro agente

Ferramentas no-code

O fluxo é sempre o mesmo: a plataforma de automação gera uma URL e você a cadastra como destino.

  • Make.com — cenário com o trigger "Webhook"
  • Zapier — "Webhooks by Zapier (Catch Hook)"
  • n8n — node "Webhook" como trigger
ℹ️

Para reagir a eventos dentro da plataforma (mandar e-mail, chamar uma API com template), considere Automações em vez de um webhook externo.