WhatsApp no n8n pela API oficial, com o ZapClaw

Em resumo: o ZapClaw entrega as suas mensagens do WhatsApp a um nó Webhook do n8n, e o seu fluxo responde com um HTTP Request. As mensagens passam pela API Cloud oficial da Meta, e o número continua funcionando no app WhatsApp Business do celular. Sem nó da comunidade para instalar e sem app próprio na Meta: basta colar o fluxo abaixo no n8n.

Conecte o seu número em minutos e ligue ao n8n que você já usa, na nuvem ou self-hosted.

Plano Business: R$ 99 por mês, com números ilimitados

Comece grátis Ver o fluxo

O que você precisa para conectar

Não precisa de CNPJ nem de empresa verificada para conectar. A lista completa.

Por que a API oficial no n8n

Configure em quatro passos

  1. No n8n, comece um workflow com um nó Webhook em POST e copie a URL de produção dele. O ZapClaw só entrega em endereço HTTPS público: o n8n Cloud já dá um, e um n8n self-hosted tem um atrás do seu próprio domínio.
  2. No ZapClaw, conecte o seu número, cole essa URL em Webhook e crie uma chave de API.
  3. No n8n, salve a chave como uma credencial Header Auth, com X-API-Key como nome, e use-a num nó HTTP Request que chama POST https://api.zapclaw.app/api/v1/send/text.
  4. Ative o workflow e clique em Enviar evento de teste no ZapClaw. Depois mande uma mensagem de WhatsApp para o seu número de outro celular: o fluxo recebe e responde.

O fluxo, pronto para importar

Copie o JSON abaixo, abra um workflow vazio no n8n e cole com Ctrl+V (Cmd+V no Mac). Ele traz três nós: o Webhook, um Filter que só deixa passar mensagens de texto recebidas e o HTTP Request que responde. Escolha a sua credencial Header Auth no último nó e ative o workflow.

{
  "name": "ZapClaw: answer WhatsApp messages",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "zapclaw-whatsapp",
        "options": {}
      },
      "id": "5f0c7e2a-1b3d-4c8e-9a61-2d4b8f0e7a11",
      "name": "ZapClaw webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [0, 0],
      "webhookId": "9d3b6f1e-2c4a-4e7b-8a05-6f1c2d9e4b77"
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" },
          "conditions": [
            {
              "id": "8a2f4c61-7d1e-4b39-a5c2-0e6f9b3d1c22",
              "leftValue": "={{ $json.body.event }}",
              "rightValue": "message.received",
              "operator": { "type": "string", "operation": "equals" }
            },
            {
              "id": "3c9e1b74-6a2d-4f08-b7e5-9d1a4c2f6b33",
              "leftValue": "={{ $json.body.data.type }}",
              "rightValue": "text",
              "operator": { "type": "string", "operation": "equals" }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "b7d2e9f1-4c6a-4e3b-8f05-1a7c3e9d2b44",
      "name": "Incoming text only",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2,
      "position": [240, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.zapclaw.app/api/v1/send/text",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            { "name": "from", "value": "={{ $json.body.account.display_phone_number || $json.body.account.phone_number_id }}" },
            { "name": "to", "value": "={{ $json.body.data.from || $json.body.data.user_id }}" },
            { "name": "text", "value": "={{ $json.body.data.text.body }}" }
          ]
        },
        "options": {}
      },
      "id": "e4a1c8d3-2f7b-4a9e-b6d0-5c3e8f1a7d55",
      "name": "Reply through ZapClaw",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [480, 0]
    }
  ],
  "connections": {
    "ZapClaw webhook": {
      "main": [[{ "node": "Incoming text only", "type": "main", "index": 0 }]]
    },
    "Incoming text only": {
      "main": [[{ "node": "Reply through ZapClaw", "type": "main", "index": 0 }]]
    }
  }
}

O exemplo responde com o mesmo texto que recebeu, só para provar a ida e a volta. Troque o campo text pela sua lógica: um nó AI Agent, uma consulta ao seu CRM ou uma resposta fixa.

Texto livre funciona dentro de 24 horas desde a última mensagem do cliente. Fora dessa janela, a Meta só aceita um template aprovado: chame POST /api/v1/send/template.

A chamada do HTTP Request

A mesma chamada como comando curl. Cole em Import cURL num nó HTTP Request e o n8n preenche os campos; depois passe a chave para a sua credencial Header Auth.

curl -X POST https://api.zapclaw.app/api/v1/send/text \
  -H "X-API-Key: zc_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "from": "15551617409", "to": "15555550100", "text": "Hello from n8n" }'

from é o seu número conectado, que o webhook traz em account.display_phone_number. to é o cliente, em data.from, ou data.user_id para um contato que só mostra o nome de usuário. Uma mensagem enviada responde 201.

O que chega no nó Webhook

Cada mensagem chega como um evento message.received. No n8n, o payload fica em body: o texto em body.data.text.body, o remetente em body.data.from, o nome do contato em body.data.contact_name e o seu número em body.account.display_phone_number. Uma mensagem de mídia traz uma media_url que você baixa com a sua chave de API.

Para conferir que uma requisição veio do ZapClaw, compare o cabeçalho X-ZapClaw-Signature com um HMAC-SHA256 do corpo bruto, feito com a sua chave de assinatura: como verificar (em inglês).

Quanto custa

A Meta cobra as tarifas de mensagem do WhatsApp direto de você, sem margem do ZapClaw. Todos os planos e preços.

Para quem é

Quem usa n8n para automatizar o WhatsApp da própria empresa ou de clientes: agentes de IA, captação de leads, avisos de pedido, triagem de atendimento. Agências conectam os números dos clientes no plano Agency, cada cliente isolado dos outros. Não serve para disparo em massa.

Para ir além

Coloque os seus fluxos do n8n na API oficial hoje

Comece no plano grátis: um número, sem cartão. Passe para o plano Business quando precisar de mais números ou de mais mensagens.

Comece grátis Ver a documentação do webhook (em inglês)