Atualizado em 25/10/2026
Para integrar o n8n com a API oficial do WhatsApp, você tem dois caminhos: usar os nós nativos WhatsApp Business Cloud (para enviar) e WhatsApp Trigger (para receber), ligados direto a um app da Meta, ou usar os nós genéricos Webhook e HTTP Request, que funcionam com a Cloud API e com qualquer provedor que repasse os webhooks da Meta. Os nós nativos são mais rápidos de configurar; o caminho genérico dá mais controle e evita a limitação de um webhook por app.
Este guia explica o que cada nó faz, quais credenciais pedem, os erros que mais travam a integração e um fluxo de exemplo que recebe mensagens e responde automaticamente.
Os nós do n8n para WhatsApp
Segundo a documentação do n8n, o nó WhatsApp Business Cloud tem estas operações:
| Recurso | Operações |
|---|---|
| Message | Send, Send and Wait for Response, Send Template |
| Media | Upload, Download, Delete |
O WhatsApp Trigger inicia o fluxo a partir de eventos da conta. A página do trigger lista: Messages, Message Template Status Update, Message Template Quality Update, Template Category Update, Phone Number Quality Update, Phone Number Name Update, Account Update, Account Review Update, Business Capability Update e Security.
Duas operações merecem destaque:
- Send and Wait for Response pausa o fluxo até a pessoa aprovar, recusar ou responder um formulário. Serve para aprovação humana, inclusive antes de um agente de IA executar uma ferramenta.
- Operações não suportadas (marcar como lida, enviar lista interativa, gerenciar templates) podem ser feitas com o nó HTTP Request usando a mesma credencial do WhatsApp, pela opção Predefined Credential Type.
Credenciais: o que o n8n pede
O n8n usa dois tipos de credencial, conforme a página de credenciais do WhatsApp:
| Nó | Tipo | Campos |
|---|---|---|
| WhatsApp Business Cloud | API key | Access Token e Business Account ID (o ID da WABA) |
| WhatsApp Trigger | OAuth2 | Client ID (App ID) e Client Secret (App Secret) |
Pré-requisitos do lado da Meta: conta de desenvolvedor, portfólio empresarial, app do tipo empresa com o produto WhatsApp, URLs de política de privacidade e termos preenchidas e app em modo Live.
Um cuidado importante: o token gerado em WhatsApp > API Setup no painel da Meta é temporário. Se você colar esse token na credencial, o fluxo para de enviar quando ele expira. Para produção, gere um token permanente com usuário do sistema e use-o no campo Access Token.
Caminho 1: nós nativos (WhatsApp Trigger + WhatsApp Business Cloud)
O passo a passo para um fluxo de resposta automática:
- Crie a credencial OAuth2 com o App ID e o App Secret do seu app.
- Adicione o WhatsApp Trigger e marque o evento Messages.
- Adicione um nó IF para seguir só quando houver mensagem (o evento Messages também traz status de entrega).
- Adicione o WhatsApp Business Cloud com a operação Message > Send, a credencial API key, o Sender Phone Number e o destinatário vindo do trigger.
- Publique o fluxo.
As três armadilhas do WhatsApp Trigger
A documentação do n8n descreve limitações que explicam a maior parte dos “não chega nada”:
- Um webhook por app. A Meta permite registrar só uma URL de webhook por app. Se o mesmo app já manda eventos para o seu CRM, o n8n vai substituir essa URL.
- Teste x produção. Alternar entre a URL de teste e a de produção sobrescreve a URL registrada. Testar um fluxo publicado pode derrubar o tráfego de produção. O contorno sugerido é despublicar enquanto testa e publicar de novo depois.
- Assinatura da WABA. Publicar o fluxo registra a URL, mas não inscreve o app na conta do WhatsApp (WABA). Sem essa inscrição, as mensagens nunca chegam e nenhuma execução com erro aparece. Um teste bem-sucedido no painel da Meta não confirma a inscrição.
Para conferir e corrigir a inscrição:
# Lista os apps inscritos na WABA (use o ID da WABA, não o phone_number_id)
curl "https://graph.facebook.com/v26.0/WABA_ID/subscribed_apps" \
-H "Authorization: Bearer $TOKEN"
# Inscreve o app do token na WABA
curl -X POST "https://graph.facebook.com/v26.0/WABA_ID/subscribed_apps" \
-H "Authorization: Bearer $TOKEN"
O token precisa da permissão whatsapp_business_management. Não faça DELETE em subscribed_apps para resolver erro de webhook: isso corta todos os eventos da WABA. Se a WABA ou o número tiverem um override_callback_uri, os eventos vão para essa outra URL; vale conferir quando mensagens somem.
Caminho 2: Webhook + HTTP Request
O nó Webhook recebe qualquer POST, e o HTTP Request chama qualquer API. Com eles, o n8n vira só mais um consumidor do webhook da Meta, no mesmo formato descrito no guia de webhooks da API do WhatsApp. Esse caminho é o indicado quando:
- o webhook do app já é usado por outro sistema, ou você usa um provedor que entrega os eventos para várias URLs;
- você precisa de operações que o nó nativo não tem;
- você quer validar a assinatura, deduplicar eventos ou responder 200 antes de processar.
Configurações do nó Webhook que fazem diferença:
| Configuração | Valor recomendado | Por quê |
|---|---|---|
| HTTP Method | POST | Os eventos chegam por POST |
| Respond | Immediately | Devolve 200 na hora e evita reenvios da origem enquanto o fluxo roda |
| Authentication | Header Auth, quando a origem permitir | Impede que qualquer um dispare o fluxo |
| IP(s) Allowlist | Opcional | Restringe quem pode chamar a URL |
O tamanho máximo de payload do Webhook é 16 MB por padrão (em instâncias self-hosted, ajustável com N8N_PAYLOAD_SIZE_MAX), acima dos 3 MB que a Meta indica para os payloads de webhook.
Se você integra direto com a Meta, a URL também precisa responder à verificação por GET: crie um segundo nó Webhook no mesmo caminho com método GET e responda com um nó Respond to Webhook devolvendo {{ $json.query["hub.challenge"] }} depois de conferir o hub.verify_token.
Lembre também da URL de produção: a URL de teste só funciona enquanto o editor está “escutando”. A URL que vai para a Meta ou para o provedor é a de produção, ativa quando o fluxo está publicado.
Exemplo de fluxo: responder mensagens recebidas
O fluxo abaixo recebe o evento, separa mensagens de status, responde com texto e, para mensagens fora do horário, avisa quando o atendimento volta.
Nó 1: Webhook (POST, Respond: Immediately).
Nó 2: Code (modo Run Once for All Items), que transforma o evento da Meta em uma lista de mensagens:
const saida = [];
for (const item of $input.all()) {
const evento = item.json.body ?? item.json;
for (const entry of evento.entry ?? []) {
for (const change of entry.changes ?? []) {
const v = change.value ?? {};
for (const msg of v.messages ?? []) {
saida.push({
json: {
phone_number_id: v.metadata?.phone_number_id,
de: msg.from,
nome: v.contacts?.[0]?.profile?.name ?? '',
wamid: msg.id,
tipo: msg.type,
texto: msg.text?.body ?? msg.interactive?.button_reply?.title ?? '',
},
});
}
}
}
}
return saida; // eventos só com status geram lista vazia e o fluxo para aqui
Nó 3: IF com a condição de horário, por exemplo {{ $now.setZone('America/Sao_Paulo').hour }} entre 8 e 18.
Nó 4: HTTP Request (POST para o endpoint de mensagens), com corpo JSON:
{
"messaging_product": "whatsapp",
"to": "{{ $json.de }}",
"type": "text",
"text": { "body": "Olá, {{ $json.nome }}! Recebemos sua mensagem e já vamos responder." }
}
Esse envio é uma mensagem livre e só funciona porque o cliente acabou de escrever, abrindo a janela de 24 horas. Para falar com quem não escreveu, use a operação Send Template ou um corpo com "type": "template".
A partir daqui, o fluxo pode gravar o contato num CRM, mandar o texto para um agente de IA ou abrir um chamado. Para fluxos de conversa com menus e botões, veja também Typebot com a API oficial e automações com Make e Zapier.
Como fazer com a Vectalk
Com a Vectalk, use o caminho 2. O WhatsApp Trigger nativo depende de um app da Meta seu; na Vectalk, os eventos chegam no mesmo formato da Meta pela URL que você registrar, e você pode ter várias URLs por número, então o n8n não disputa o webhook com outros sistemas.
- Publique o fluxo e copie a URL de produção do nó Webhook.
- Registre a URL na Vectalk:
curl -X POST https://apis.vectalk.com.br/api/webhooks \
-H "Authorization: Bearer $VECTALK_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": "SEU_INSTANCE_ID",
"url": "https://seu-n8n.exemplo.com.br/webhook/whatsapp",
"name": "n8n"
}'
- No HTTP Request, use
POST https://apis.vectalk.com.br/api/messagese uma credencial Header Auth com nomeAuthorizatione valorBearer SEU_TOKEN. Com token de instância, o número é resolvido automaticamente; com token de organização, incluaphone_number_idno corpo (o Code node do exemplo já extrai esse campo). - Responda 200 em menos de 20 segundos; com Respond: Immediately, o n8n faz isso por você.
As rotas estão na documentação de webhooks e de envio de texto. O custo das mensagens vem na fatura da Vectalk, sem cartão na Meta. Crie sua conta em apps.vectalk.com.br/register. Para entender a plataforma da Meta como um todo, veja o guia da API oficial do WhatsApp.
Boas práticas para fluxos de WhatsApp no n8n
- Deduplique pelo
wamid. A origem pode reenviar o mesmo evento. Guarde os IDs processados (num banco ou no Redis) e descarte repetidos antes de responder. - Trate status em outro fluxo. Eventos de
sent,delivered,readefailedchegam na mesma URL. Separar o processamento evita respostas duplicadas e facilita relatórios; veja status de mensagem via webhook. - Não confie em ordem. Duas mensagens seguidas do cliente podem gerar execuções paralelas. Se a ordem importa, use uma fila.
- Guarde credenciais no n8n. Nunca coloque o token no corpo de um nó Code ou em texto fixo do HTTP Request.
- Monitore erros. Configure um Error Workflow para avisar o time quando um envio falhar, com o código de erro da Meta (a lista está em erros da API do WhatsApp).
Perguntas frequentes
O n8n tem nó oficial para a API do WhatsApp?
Sim. O n8n tem o nó WhatsApp Business Cloud (envio de mensagens, templates e mídia) e o WhatsApp Trigger (eventos da conta), ambos ligados à Cloud API da Meta.
Posso usar o n8n com WhatsApp via QR Code?
O n8n não tem nó nativo para isso. Integrações por QR Code dependem de APIs não oficiais, que emulam o WhatsApp Web e contrariam os Termos de Serviço do WhatsApp. Veja API oficial x não oficial.
Por que meu WhatsApp Trigger não recebe mensagens?
As causas mais comuns são o app não estar inscrito na WABA (subscribed_apps), a URL de teste ter sobrescrito a de produção ou outro sistema ter registrado a própria URL no mesmo app. A seção sobre o trigger acima mostra como conferir.
Dá para enviar template pelo n8n?
Sim, com a operação Send Template do nó WhatsApp Business Cloud ou com um HTTP Request com "type": "template". O erro “Bad request – please check your parameters” costuma indicar parâmetros fora da ordem ou do tipo esperado pelo template.
Preciso de n8n self-hosted?
Não. Os nós funcionam no n8n Cloud e no self-hosted. No self-hosted, a URL do n8n precisa ser pública e HTTPS para receber os webhooks.
Fontes oficiais consultadas em 25/10/2026: n8n: WhatsApp Business Cloud node, n8n: WhatsApp Trigger node, n8n: WhatsApp credentials, n8n: Webhook node, n8n: WhatsApp node common issues, Meta: Webhooks da Cloud API, Documentação da Vectalk: Webhooks.
