IA

Agente de IA no WhatsApp com n8n: passo a passo completo

Para montar um agente de IA no WhatsApp com n8n, use um nó Webhook para receber a mensagem, um nó Code para normalizar e filtrar, o nó AI Agent com memória por contato e um nó HTTP Request chamando POST /send/text para responder. O pacote da comunidade n8n-nodes-zapzap (versão 0.1.3 no npm em 27/10/2026) é uma alternativa ao HTTP Request, mas só roda em n8n self-hosted. Abaixo está o fluxo inteiro.

Publicado em · 7 min de leitura

Este artigo também está disponível em: English · Español

Como o fluxo funciona de ponta a ponta

O desenho tem seis nós. Webhook (gatilho) recebe o evento messages da instância. Um nó Code extrai número, texto e id e descarta mensagens suas. Um IF ou o próprio Code corta duplicatas e conversas já com humano. O nó AI Agent recebe o texto, usa a memória daquele contato e, se precisar, chama ferramentas. Por fim, um HTTP Request (ou o nó da comunidade) envia a resposta por send/text.

Antes de montar, entenda o que o n8n entrega e o que não entrega: ele orquestra, mas o modelo de IA é do provedor que você configurar na credencial do nó, e o custo desse provedor é separado. A página da integração com n8n e o guia de integrar WhatsApp no n8n cobrem a base; aqui o foco é o agente.

O que você precisa antes de começar

Uma instância do ZapZap conectada por QR code, a chave e o segredo da API, um n8n acessível pela internet (self-hosted com HTTPS ou n8n Cloud) e uma credencial de um provedor de modelo de IA. Para testes locais, o n8n precisa de uma URL pública; túnel serve para desenvolver, mas não para produção.

Crie no n8n uma credencial Header Auth ou use campos fixos de cabeçalho para x-api-key e x-api-secret. Assim o segredo fica na credencial, não escrito em cada nó. Se preferir partir de algo pronto, há modelos em templates de n8n para WhatsApp.

Passo 1: receber a mensagem com o nó Webhook

Adicione um nó Webhook, método POST, e copie a Production URL (a de teste só funciona com o fluxo em modo de escuta). Registre essa URL na instância com POST /webhook, ativando o evento messages. Ative o fluxo antes de usar a URL de produção.

Teste com POST /instances/{id}/webhook/test: ele dispara um evento de teste e devolve o status HTTP e o tempo de resposta do seu endpoint. Se algo falhar, GET /instances/{id}/webhook/deliveries mostra as últimas entregas e GET /webhook/errors, as falhas.

cURL (registrar o webhook do n8n)

curl -X POST https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/webhook \
  -H "Content-Type: application/json" \
  -H "x-api-key: SUA_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET" \
  -d '{"url":"https://SEU-N8N.com/webhook/whatsapp-agente","enabled":true,"events":["messages"]}'

Passo 2: normalizar e filtrar com um nó Code

Este é o nó que evita os três bugs mais comuns: o agente responder à própria mensagem (fromMe), responder duas vezes ao mesmo evento e responder em grupos sem querer. A estrutura exata do evento deve ser conferida na aba de execução do Webhook, com uma mensagem real; o código usa leitura defensiva e você ajusta os nomes.

O nó devolve um item com numero, texto e id. Se a mensagem não deve ser tratada, devolve uma lista vazia, o que encerra o fluxo naquele ramo. A deduplicação usa o armazenamento estático do workflow, suficiente para um n8n único; com várias instâncias do n8n, use um banco ou Redis.

n8n (nó Code, JavaScript)

const evento = $input.first().json.body ?? $input.first().json;
const msg = evento.message ?? evento.data ?? evento;

if (msg.fromMe) return [];
const id = msg.messageid ?? msg.id;
const numero = msg.sender ?? msg.from;
const texto = msg.text ?? msg.body ?? "";
const grupo = String(msg.chatid ?? msg.chatId ?? "").endsWith("@g.us");

if (!numero || !texto || grupo) return [];

const estado = $getWorkflowStaticData("global");
estado.vistos = estado.vistos ?? [];
if (id && estado.vistos.includes(id)) return [];
if (id) estado.vistos = [...estado.vistos.slice(-500), id];

return [{ json: { numero: String(numero).replace(/\D/g, ""), texto, id } }];

Passo 3: configurar o nó AI Agent com memória por contato

Adicione o nó AI Agent. Configure três coisas. Modelo de chat: escolha o provedor e o modelo na credencial (o nome do modelo fica na sua configuração, não neste guia). Memória: use uma memória de janela com a chave de sessão igual ao número do contato, para cada cliente ter a sua própria conversa. Prompt de sistema: papel, tom, limites e regra de passagem para humano.

Um prompt de sistema funcional, em poucas linhas: quem é o assistente e para qual empresa; responda em mensagens curtas, no tom de WhatsApp; use apenas as informações fornecidas; se não souber ou se o cliente pedir uma pessoa, responda exatamente a frase de transferência combinada. Essa frase fixa permite que o fluxo detecte o handoff logo depois, com um nó IF.

Se o agente precisar consultar dados (agenda, pedido, estoque), adicione ferramentas: um HTTP Request como ferramenta apontando para o seu sistema, com descrição clara do que faz. Mantenha poucas ferramentas e bem descritas; modelos erram mais quando têm muitas opções.

Passo 4: enviar a resposta pela API

Depois do agente, adicione um HTTP Request. Method POST; URL https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/send/text; cabeçalhos x-api-key e x-api-secret; corpo JSON com number e text. O campo text vem da saída do agente, e number vem do nó Code.

O campo delay do send/text e a presença digitando (message/presence) deixam a resposta mais natural, e um pequeno atraso evita parecer máquina. Use com moderação: o que mais pesa para o número é o comportamento geral, não um truque de envio.

n8n (HTTP Request, corpo JSON)

{
  "number": "{{ $('Normalizar').item.json.numero }}",
  "text": "{{ $json.output }}",
  "delay": 2000
}

cURL equivalente

curl -X POST https://api.zapzapapi.com/api/v1/SEU_INSTANCE_ID/send/text \
  -H "Content-Type: application/json" \
  -H "x-api-key: SUA_API_KEY" \
  -H "x-api-secret: SEU_API_SECRET" \
  -d '{"number":"5511999999999","text":"Resposta do agente","delay":2000}'

Usar o pacote n8n-nodes-zapzap em vez do HTTP Request

Existe um pacote de nós da comunidade, n8n-nodes-zapzap, publicado no npm (versão 0.1.3 conferida em 27/10/2026), que cobre envio de mensagens, mídia, enquetes, botões e listas, reação, gestão de instâncias e recebimento de eventos em tempo real. Ele simplifica a configuração, porque o nó já conhece os campos.

Um limite importante: segundo a documentação do n8n (lida em 27/10/2026), nós da comunidade não verificados não estão disponíveis no n8n Cloud e exigem n8n self-hosted. Como este pacote é da comunidade e não temos o selo de verificado do n8n, o caminho garantido no n8n Cloud é o HTTP Request. Os dois funcionam com a mesma API e as mesmas credenciais.

Instalação (n8n self-hosted)

n8n-nodes-zapzap

Passo 5: detectar a passagem para humano e pausar o agente

Depois do agente, um nó IF verifica se a resposta é a frase de transferência. Se for, o fluxo marca o contato como com humano (em uma tabela do n8n, Redis ou no seu CRM), avisa a equipe e envia ao cliente uma mensagem curta. Antes do agente, outro IF consulta essa marca e encerra o fluxo se o contato estiver com humano.

A marca precisa de um prazo de expiração ou de um botão de liberar, senão o contato nunca volta ao bot. Esse mesmo desenho aparece no guia de chatbot de WhatsApp com IA, com regras de handoff e custo.

Erros comuns e como resolver

SintomaCausa provávelSolução
O fluxo não disparaWebhook em modo de teste ou fluxo inativoAtivar o fluxo e usar a Production URL
O agente responde duas vezesEvento duplicadoDeduplicar por id da mensagem
O bot conversa sozinho em loopMensagens fromMe não filtradasDescartar fromMe no nó Code
Todos os clientes compartilham a mesma conversaChave de sessão da memória fixaUsar o número do contato como chave
Erro 401 ou 403 no envioCabeçalhos de autenticação erradosConferir x-api-key e x-api-secret
Resposta chega, mas fora de contextoPrompt genérico ou sem materialReforçar o prompt e dar o conteúdo da empresa

Para o dia a dia, mantenha o histórico de execuções do n8n ligado nos primeiros dias, revise amostras de conversa e ajuste o prompt. Para ver todos os recursos da API que o agente pode usar como ferramenta, abra a referência e o OpenAPI.

Resumo rápido

  • O fluxo é Webhook, nó Code (filtro), AI Agent com memória por contato e HTTP Request para /send/text.
  • Filtre fromMe, grupos e eventos duplicados antes do agente, ou ele responde a si mesmo.
  • Use o número do contato como chave de sessão da memória para separar as conversas.
  • O pacote n8n-nodes-zapzap (0.1.3 no npm em 27/10/2026) só roda em n8n self-hosted; no n8n Cloud use o HTTP Request.
  • Combine uma frase fixa de transferência com um IF para pausar o agente quando um humano assumir.

Perguntas frequentes

Como conectar o WhatsApp a um agente de IA no n8n?

Registre a Production URL de um nó Webhook como webhook da instância (POST /webhook, evento messages), trate a mensagem com um nó Code, passe o texto ao nó AI Agent com memória por contato e envie a resposta com um HTTP Request para /send/text.

O nó n8n-nodes-zapzap funciona no n8n Cloud?

Não, na prática. Pela documentação do n8n, nós da comunidade não verificados exigem n8n self-hosted, e este pacote é da comunidade, sem selo de verificado do n8n. No n8n Cloud, use o nó HTTP Request com os mesmos cabeçalhos de autenticação.

Como evito que o agente responda a si mesmo?

Descarte, no primeiro nó, os eventos com fromMe verdadeiro e deduplique por id da mensagem. Sem esse filtro, a resposta enviada pelo agente volta como evento e o fluxo entra em loop.

Qual modelo de IA devo usar no nó AI Agent?

Qualquer um que o n8n suporte e que você tenha credencial. A escolha depende de custo, velocidade e qualidade no seu caso. Teste com algumas dezenas de conversas reais antes de decidir e use um modelo menor para perguntas simples.

Dá para o agente consultar meu sistema?

Dá. Adicione ferramentas ao nó AI Agent, como um HTTP Request apontando para a sua API, com uma descrição clara do que a ferramenta faz. Mantenha poucas ferramentas e limite o que cada uma pode alterar.

Ligue um agente de IA ao seu WhatsApp

Crie a conta, verifique o telefone e receba o crédito de boas-vindas, sem depositar (um por telefone, sujeito à campanha vigente). Conecte por QR code, registre o webhook do n8n e teste.