Webhook de leads

Leads do Instagram para o Zapier,
Make, n8n ou Google Sheets.

Quando alguém comenta uma palavra-chave ou manda uma DM, o Chat33 pede o e-mail na conversa. Todo e-mail coletado é enviado em JSON para uma URL de webhook em segundos, e a sua ferramenta de automação coloca onde você quiser: uma linha do Google Sheets, o Airtable, o Notion, o Slack ou o seu CRM.

Disponível em todos os planos, inclusive no Free. Proprietários e administradores do espaço de trabalho podem conectar.

O que acontece

  1. 1Alguém comenta GUIA na sua publicação
  2. 2O Chat33 envia uma DM pedindo o e-mail
  3. 3A pessoa responde com o endereço de e-mail
  4. 4O Chat33 envia o lead por POST para a URL do seu webhook
  5. 5Seu Zap, cenário ou workflow adiciona o lead ao Google Sheets
Antes de começar

O que você precisa

Três coisas. Não é preciso nenhum app do Chat33 na sua ferramenta de automação: é um webhook comum.

Uma conta do Instagram ou do Facebook conectada

Uma conta profissional do Instagram (comercial ou de criador) ou uma Página do Facebook, conectada no Chat33 em Canais.

Uma automação com a etapa Coletar e-mail

A etapa pede o e-mail numa DM e espera até 24 horas pela resposta. Funciona com gatilhos de palavra-chave em DM no Instagram e no Facebook e com gatilhos de comentário no Instagram. Pedir depois de um comentário no Facebook ainda não está disponível.

Uma ferramenta que receba webhook

Zapier (o Webhooks by Zapier exige um plano pago do Zapier), Make, n8n ou o seu próprio servidor. O endereço precisa ser público e começar com https://. No Chat33, proprietários e administradores do espaço de trabalho podem configurar o webhook.

Configuração

Configure em seis etapas

Deixe a sua ferramenta de automação e o Chat33 abertos em duas abas. Você copia uma URL de um para o outro.

  1. 1

    Pegue uma URL de webhook na sua ferramenta

    Crie uma nova automação que comece com um webhook e copie a URL que ele fornece.

    • Zapier: crie um Zap, escolha Webhooks by Zapier como app do gatilho e Catch Hook como evento, e copie a URL do webhook.
    • Make: crie um cenário, adicione o módulo de Webhooks Custom webhook, clique em Add, dê um nome e copie o endereço.
    • n8n: adicione um nó Webhook e defina HTTP Method como POST. Por enquanto, copie a Test URL. Para leads reais, use a Production URL e ative o workflow.
  2. 2

    Cole no Chat33

    No Chat33, vá em Configurações, Chaves de API e encontre o cartão Webhook de mensagens. Cole a URL no campo de endereço.

  3. 3

    Escolha Novos leads

    Em Enviar, marque Novos leads. Desmarque Novas DMs se você quer só os leads; senão, toda DM que as pessoas enviam vai para a mesma URL. Deixe Todas as contas deste espaço de trabalho selecionado ou escolha as contas cujos leads você quer. Clique em Salvar.

  4. 4

    Envie um lead de teste

    Clique em Enviar lead de teste. O Chat33 envia um lead inventado (Ana Lopez, ana@example.com) com "test": true, e o cartão mostra o status HTTP com que a sua ferramenta respondeu. No Zapier, clique em Test trigger; no Make, espere o módulo dizer que determinou a estrutura dos dados; no n8n, ative a escuta de evento de teste no nó antes de enviar.

  5. 5

    Mapeie os campos

    Adicione a próxima etapa e mapeie nela os campos do lead. Para o Google Sheets: no Zapier use Create Spreadsheet Row, no Make Add a Row, no n8n o nó Google Sheets com Append Row. Coloque data.email, data.name, data.username, data.flow.name e data.capturedAt em colunas próprias, ou o que você precisar. Ignore ou filtre as requisições em que test é true.

  6. 6

    Ative e confira um lead real

    Publique o Zap, ative o cenário ou o workflow do n8n e ative a sua automação do Chat33. Teste a automação a partir de uma segunda conta do Instagram. O cartão Zapier, Make, n8n, Google Sheets em Configurações, Integrações mostra quantos leads foram enviados, estão aguardando ou falharam, e o Registro de entregas lista os últimos 50.

Exemplo de requisição

O que a sua ferramenta recebe

Um POST por lead, com corpo em JSON. Esta é uma requisição real de Enviar lead de teste, palavra por palavra.

Cabeçalhos
content-type: application/json
user-agent: Chat33-Webhooks/1.0
x-chat33-event: lead.captured
x-chat33-signature: t=1793009626,v1=0decb33a96de935324152cb242ec33c3c45849853d59e1ff330b20cb89ded992
Corpo
{
  "event": "lead.captured",
  "id": "evt_lead_test_1793009626943",
  "createdAt": "2026-10-26T10:13:46.944Z",
  "data": {
    "version": 1,
    "captureKey": "test_1793009626943",
    "email": "ana@example.com",
    "name": "Ana Lopez",
    "firstName": "Ana",
    "lastName": "Lopez",
    "username": "ana.lopez",
    "platform": "instagram",
    "platformId": "test_platform_id",
    "contactId": "test_contact",
    "channel": {
      "id": "test_channel",
      "name": "Test account"
    },
    "flow": {
      "id": "test_flow",
      "name": "Test flow"
    },
    "keyword": "guide",
    "postId": null,
    "postUrl": null,
    "tags": [],
    "question": "What is your email?",
    "capturedAt": "2026-10-26T10:13:46.943Z",
    "firstSeenAt": "2026-10-26T10:13:46.943Z"
  },
  "test": true
}
O que é enviado

Todos os campos

Aninhados em data, exceto os quatro primeiros. Campos só são adicionados, nunca renomeados ou removidos, e data.version informa o formato.

event
Sempre lead.captured para um lead. O mesmo valor vai no cabeçalho X-Chat33-Event.
id
O ID do evento, evt_lead_ seguido da chave de captura. Ele continua o mesmo se o mesmo lead for entregue de novo (uma nova tentativa ou Enviar leads existentes), então use-o para ignorar duplicados.
createdAt
Quando esta requisição foi feita. Uma nova tentativa recebe um createdAt novo; o id continua o mesmo.
test
true em Enviar lead de teste. Leads reais não têm este campo.
data.version
A versão do payload, 1 hoje.
data.captureKey
Uma chave por pessoa, endereço de e-mail e automação. Uma pessoa que informa o mesmo endereço à mesma automação de novo não é enviada outra vez. Leads de teste têm uma chave que começa com test_.
data.email
O endereço que ela escreveu na DM.
data.name, data.firstName, data.lastName
O nome dela no Instagram ou no Facebook, e o mesmo nome dividido em dois. Nome e sobrenome ficam null quando só conhecemos o @usuário.
data.username
O @usuário dela, sem o @. null quando a plataforma não informa.
data.platform, data.platformId
De onde o lead veio (instagram ou facebook) e o ID da pessoa lá, o ID que a Meta dá a ela para a sua conta.
data.contactId
O ID do contato no Chat33, o mesmo ID que a API REST usa.
data.channel
A conta conectada para a qual o lead escreveu: id e nome.
data.flow
A automação que pediu o e-mail: id e nome, como estavam quando o e-mail chegou.
data.keyword
A palavra-chave que iniciou a automação, ou null.
data.postId, data.postUrl
A publicação em que ela comentou, quando um comentário iniciou a automação. postUrl só é preenchido para publicações feitas pelo Chat33; senão, é null.
data.tags
As tags do contato no Chat33 quando o e-mail chegou. Muitas vezes uma lista vazia.
data.question
A pergunta que a etapa Coletar e-mail enviou, como a pessoa a viu.
data.capturedAt, data.firstSeenAt
Quando ela informou o e-mail e quando o contato apareceu pela primeira vez no Chat33. ISO 8601, UTC.

O Chat33 nunca envia e-mails aos seus leads. O que acontece depois depende da automação que você criar.

Segurança

Confira se uma requisição veio do Chat33

Toda requisição é assinada com o segredo de assinatura do seu webhook, exibido no cartão Webhook de mensagens em Configurações, Chaves de API. Ferramentas no-code podem pular esta etapa e manter a URL do webhook privada. No seu próprio servidor, confira a assinatura antes de confiar no corpo.

X-Chat33-Event

lead.captured para um lead, message.received para uma DM.

X-Chat33-Signature

Parece com t=1793009626,v1=0decb33a..., em que t é o horário Unix em segundos e v1 é o HMAC-SHA256 do timestamp, um ponto e o corpo bruto da requisição, com o segredo de assinatura inteiro (whsec_...) como chave. Cada tentativa é assinada de novo com um timestamp novo.

User-Agent

Chat33-Webhooks/1.0, com Content-Type application/json.

Um novo segredo

Remover o webhook e salvá-lo de novo gera um novo segredo. Atualize o seu servidor quando isso acontecer.

Node.js (Express)
const crypto = require("crypto");
const express = require("express");

// Settings, API Keys, Message webhook, Signing secret (whsec_...)
const SECRET = process.env.CHAT33_WEBHOOK_SECRET;

function verifyChat33(rawBody, header, toleranceSeconds = 300) {
  const parts = {};
  for (const piece of String(header || "").split(",")) {
    const i = piece.indexOf("=");
    if (i > 0) parts[piece.slice(0, i)] = piece.slice(i + 1);
  }
  if (!parts.t || !parts.v1) return false;
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > toleranceSeconds) return false;
  const expected = crypto
    .createHmac("sha256", SECRET)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex");
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(parts.v1, "hex");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

const app = express();

// The raw body: the signature covers the exact bytes Chat33 sent.
app.post("/chat33-webhook", express.raw({ type: "application/json" }), (req, res) => {
  const rawBody = req.body.toString("utf8");
  if (!verifyChat33(rawBody, req.get("X-Chat33-Signature"))) return res.sendStatus(401);

  const event = JSON.parse(rawBody);
  if (event.event === "lead.captured" && !event.test) {
    // Save event.data.email, skip event.id values you already have.
  }
  res.sendStatus(200);
});

app.listen(3000);
Opções

Como funciona a entrega

O que o Chat33 faz com cada lead e o que o seu endpoint deve responder.

Responda com um 2xx em até 10 segundos

Qualquer status 2xx conta como entregue. Qualquer outra coisa, um timeout depois de 10 segundos ou um erro de rede conta como falha. Redirecionamentos não são seguidos, então salve o endereço final.

Leads com falha são tentados de novo

Um lead com falha é tentado de novo depois de cerca de 1 minuto, 5 minutos, 30 minutos, 2 horas e 12 horas. Depois disso ele aparece como Com falha, e Reenviar falhas no cartão o envia outra vez. Uma resposta 429 significa esperar: o Chat33 tenta de novo um minuto depois sem gastar uma tentativa.

Leads de teste são enviados uma vez

Enviar lead de teste faz uma tentativa, não é repetido e não aparece no registro de entregas. Ele é enviado mesmo quando Novos leads não está marcado, então marque essa opção antes de contar com leads reais.

O mesmo webhook pode enviar DMs

Com Novas DMs marcado, a mesma URL também recebe message.received para cada DM que as pessoas enviam às suas contas conectadas, para que o seu próprio bot possa respondê-las. A referência da API descreve esse evento e os endpoints de webhook.

Contatos que você já tem

Enviar leads existentes

Os leads coletados antes de ativar Novos leads não são enviados sozinhos. Clique em Enviar leads existentes no cartão Zapier, Make, n8n, Google Sheets em Configurações, Integrações e eles saem nos próximos minutos, com os mesmos ids de antes, para que a sua ferramenta ignore os que já tem.

Solução de problemas

Quando nada chega

O Chat33 guarda todos os leads, então basta corrigir o webhook. Nada precisa ser coletado de novo.

Confira o cartão Webhook de mensagens

A URL precisa estar salva e Novos leads marcado. O cartão mostra a última entrega com o status HTTP ou o erro. Use Enviar lead de teste para ver a resposta na hora.

O Zapier diz que o app precisa de upgrade

O Webhooks by Zapier não está no plano grátis do Zapier. Faça upgrade ou use o Make ou o n8n, que recebem webhooks nos planos grátis.

Sua ferramenta responde com erro

Uma resposta 4xx ou 5xx é uma falha e o lead é tentado de novo. No n8n, a Test URL só funciona enquanto você está ouvindo um evento de teste: use a Production URL com o workflow ativo. No Make, o cenário precisa estar ativado.

O endereço não foi aceito

O Chat33 só envia para endereços https:// públicos. Um n8n auto-hospedado em localhost ou numa rede privada não consegue receber leads. Remova qualquer coisa depois de um # na URL.

Os leads estão no Chat33, mas não na sua ferramenta

Abra o Registro de entregas no cartão Zapier, Make, n8n, Google Sheets. Cada lead mostra o status e o motivo. Leads de contas que o webhook não cobre são ignorados, e leads coletados antes de você ativar Novos leads precisam de Enviar leads existentes.

Ninguém recebeu o pedido de e-mail

Confira a automação. Ela precisa estar ativa e, quando começa por um comentário no Instagram, a etapa Coletar e-mail deve vir antes da primeira DM. Pedir depois de um comentário no Facebook ainda não está disponível.

Perguntas sobre o webhook de leads

Existe um app do Chat33 no Zapier ou no Make?
Ainda não. Você usa o gatilho de webhook que toda ferramenta de automação tem: Webhooks by Zapier, Catch Hook no Zapier, Custom webhook no Make, o nó Webhook no n8n. Para o n8n há também um nó oficial do Chat33 para publicar e outras ações da API.
Quais planos do Chat33 incluem o webhook de leads?
Todos, inclusive o Free. A sua ferramenta de automação pode exigir um plano pago próprio, como o Zapier para webhooks.
Com que rapidez os leads chegam?
Geralmente em segundos depois de a pessoa enviar o e-mail. Se o seu endpoint estiver fora do ar, o Chat33 guarda o lead e tenta de novo.
Dá para enviar leads ao Google Sheets sem o Zapier ou o Make?
Não diretamente. O Google Sheets não recebe um webhook sozinho, então uma ferramenta como Zapier, Make ou n8n fica no meio e adiciona a linha.
O mesmo lead chega duas vezes?
Uma pessoa que informa o mesmo endereço à mesma automação é enviada uma vez. Uma nova tentativa ou Enviar leads existentes pode entregar um lead de novo, com o mesmo id, então remova duplicados pelo id ou por data.email.
Posso usar o webhook e o Mailchimp ou o HubSpot ao mesmo tempo?
Pode. Todo novo lead vai para cada destino conectado.
Como distingo um lead de teste de um real?
Leads de teste têm "test": true no nível principal e o endereço ana@example.com. Leads reais não têm o campo test.
Mascote do Chat33 segurando um botão Quero o link

Transforme comentários em
linhas, registros e alertas.

Crie uma conta grátis, conecte o Instagram, adicione uma etapa Coletar e-mail e cole a URL do seu webhook.