Mensagens de entrada do WhatsApp não chegando ao n8n apesar de webhook verificado + assinatura WABA confirmada

Estou configurando uma integração do WhatsApp Business Cloud no n8n Cloud (versão visível no painel Executions) e as mensagens de entrada nunca disparam uma execução de workflow, apesar de todas as verificações passarem:

Descrever o problema/erro/pergunta

As mensagens de WhatsApp de entrada não disparam nenhuma execução de workflow, apesar do webhook ser verificado pela Meta e o aplicativo ser confirmado como inscrito no WABA. O próprio painel de teste de webhook em tempo real da Meta confirma que ESTÁ enviando os eventos de mensagem, mas o n8n nunca registra uma execução para eles — apenas a solicitação GET de verificação original aparece em Executions.
Initialmente tentei o nó nativo “WhatsApp Trigger”, mas sua credencial “WhatsApp OAuth account” falha consistentemente com “Bad request - please check your parameters” / “Error validating client secret” mesmo com Client ID/Secret corretos (corresponde a outras threads relatadas). Como solução alternativa, mudei para um nó Webhook genérico (GET+POST via “Allow Multiple HTTP Methods”) + um nó “Respond to Webhook” retornando {{ $json.query[“hub.challenge”] }} para o handshake de verificação. A verificação é bem-sucedida e a inscrição do WABA (POST /{WABA_ID}/subscribed_apps) retorna success:true, mas as mensagens de entrada reais ainda nunca chegam ao n8n.

Qual é a mensagem de erro (se houver)?

Nenhum erro é exibido — o workflow simplesmente nunca é executado para mensagens de entrada. Nenhuma nova entrada aparece em Executions após enviar uma mensagem real do WhatsApp, mesmo que o painel de teste da Meta confirme que o evento foi enviado.

Por favor, compartilhe seu workflow

{
  "nodes": [
    {
      "parameters": {
        "path": "1490d3bd-a1f9-476b-9e03-c14c2ab22743",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        0,
        0
      ],
      "id": "dd726403-4c27-4940-805f-786f38a2f25e",
      "name": "Webhook",
      "webhookId": "1490d3bd-a1f9-476b-9e03-c14c2ab22743"
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "={{ $json.query[\"hub.challenge\"] }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        208,
        0
      ],
      "id": "960c8c0d-364f-4ed8-9283-8f7f455856db",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  ],
  "pinData": {},
  "meta": {
    "instanceId": "0babb2c4b64d06db9ad149b501c44dae5b503104594b5d893908136157b59fd1"
  }
}

Compartilhe a saída retornada pelo último nó

Informações sobre sua configuração n8n

  • Versão n8n:
  • Banco de dados (padrão: SQLite):
  • Configuração n8n EXECUTIONS_PROCESS (padrão: own, main):
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo desktop):
  • Sistema operacional:

Oi @FAOR_Beauty_Skin, enquanto você espera uma resposta, aqui estão algumas coisas que podem ajudar:

Recursos sugeridos

Automaticamente correspondido à sua pergunta.

Documentação:

Fórum:

@fahmiiireza, @tridi, @LogeshwariV - vocês já ajudaram com problemas similares antes, podem dar uma olhada?

Sugerido automaticamente pelo bot da comunidade n8n. É um teste - compartilhe feedback aqui.

Oi @FAOR_Beauty_Skin Bem-vindo!
Um GET de verificação que pousa e nada depois dele é a assinatura da URL de teste. O n8n registra a URL de teste apenas enquanto a tela está ouvindo e a descarta após 120 segundos, então o handshake da Meta cai dentro dessa janela e toda mensagem posterior atinge um caminho que o n8n não serve mais. A URL de produção só existe uma vez que o fluxo de trabalho é publicado.
Publique o fluxo de trabalho e, em seguida, defina o callback da Meta para o caminho de produção /webhook/1490d3bd-a1f9-476b-9e03-c14c2ab22743 em vez do formulário /webhook-test/ e reverifique. Comprove isso do seu lado antes de voltar à Meta:

curl -X POST https://<your-instance>.app.n8n.cloud/webhook/1490d3bd-a1f9-476b-9e03-c14c2ab22743 -H "Content-Type: application/json" -d '{"ping":true}'

Se essa chamada criar uma execução e as mensagens reais ainda nunca chegarem, a URL está correta e a lacuna é a inscrição do campo messages em Webhook fields na configuração do WhatsApp do app, que é uma coisa separada da chamada subscribed_apps que você já executou contra o WABA.

Seu nó Webhook está registrado apenas para GET, então a verificação do Meta é bem-sucedida e todos os POST de mensagens reais recebem um 404. É por isso que a entrega parece confirmada do lado do Meta e nada nunca aparece em suas Execuções.

É visível no JSON que você postou — o nó Webhook não tem httpMethod:

"parameters": {
  "path": "1490d3bd-a1f9-476b-9e03-c14c2ab22743",
  "responseMode": "responseNode",
  "options": {}
}

O n8n remove parâmetros de opção deixados em seu padrão quando salva, e o padrão para httpMethod é GET. Você mencionou que mudou para GET+POST via “Allow Multiple HTTP Methods” — mas essa configuração não está na exportação, e verifiquei que estaria se estivesse ativada. Exportar o mesmo fluxo de trabalho com ela ativada resulta em:

"parameters": {
  "multipleMethods": true,
  "httpMethod": ["GET", "POST"],
  "path": "wa-multi",
  "responseMode": "responseNode",
  "options": {}
}

Então, no momento em que você fez essa exportação, o nó era apenas GET. Ou a alteração não foi salva, ou a exportação é anterior a ela. Vale a pena reabrir o nó para verificar — e se a interface realmente mostrar ativado, salve novamente e exporte novamente, porque então a configuração não está persistindo e esse é um bug separado que vale a pena relatar.

Eu reproduzi isso na versão 2.32.7 em vez de adivinhar. Dois fluxos de trabalho, idênticos exceto por essa única configuração, ambos ativos:

webhook_entity
reprowh01  wa-default  GET     <- sua configuração: sem httpMethod
reprowh02  wa-multi    GET     <- multipleMethods: true
reprowh02  wa-multi    POST

E ao vivo:

GET  /webhook/wa-default  ->  200
POST /webhook/wa-default  ->  404   <- onde as mensagens do Meta pousam
GET  /webhook/wa-multi    ->  200
POST /webhook/wa-multi    ->  200

A solução é Allow Multiple HTTP Methods com GET e POST, ou dois webhooks separados no mesmo caminho — um GET para o handshake hub.challenge, um POST para mensagens. O segundo é mais limpo, porque seu nó Respond retorna $json.query["hub.challenge"], o que só faz sentido na ramificação GET. Da forma como está, se um POST alguma vez chegasse, você responderia ao Meta com um corpo vazio.

O Gatilho WhatsApp nativo falhando com “Error validating client secret” é um problema separado — esse está na credencial, não no roteamento. Provavelmente vale a pena seu próprio tópico depois que isso for resolvido, para que os dois não se enrolem.

@FAOR_Beauty_Skin

No n8n, há uma diferença massiva entre o ambiente Editor e o ambiente Production.

  • O Problema: Quando você está testando no editor (clicando em “Execute Workflow”), o n8n escuta na Test URL. Quando você clica em “Verify” no Meta, o Meta provavelmente está usando a Production URL.
  • O Sintoma: Se você não ativou a chave no canto superior direito do n8n para “Active”, o n8n receberá a requisição POST do Meta, verá que nenhum workflow está “escutando” por ela em modo production e simplesmente a descartará. Ela não aparecerá na sua lista de execuções.
  • A Solução:
    1. Certifique-se de que você está usando a Production URL (sem /test/ no caminho) no Meta Developer Console.
    2. Ative o workflow (a chave no canto superior direito deve estar ON).
    3. Verifique a aba “Executions” (não o editor) para ver se os POSTs estão chegando.

O Meta tem dois lugares diferentes para configurar Webhooks, e eles se comportam de forma diferente.

  • O Problema: Se você configurou a URL do Webhook na seção geral “Webhooks” na barra lateral esquerda do seu App Meta, você está dizendo ao Meta: “Me envie atualizações sobre o App (como mudanças nas configurações do App ou permissões de usuário).”
  • A Solução: Você deve configurar a URL do Webhook dentro da seção específica do produto WhatsApp:
    1. Vá para o seu Meta App Dashboard.
    2. Procure na barra lateral em “Products”.
    3. Clique em “WhatsApp” $\rightarrow$ “Configuration”.
    4. Este é o lugar onde sua URL de Webhook e Verify Token devem ser inseridos. Se você os colocar na aba geral “Webhooks”, você passará no handshake, mas nunca receberá mensagens do WhatsApp.

Mesmo que a URL esteja correta e o handshake seja verificado, o Meta não enviará dados a menos que você explicitamente peça por isso.

  • O Problema: Você verificou a conexão, mas não se inscreveu no conteúdo.
  • A Solução:
    1. Na página WhatsApp $\rightarrow$ Configuration (onde você colocou sua URL), procure por uma seção chamada “Webhook fields”.
    2. Você deve clicar em “Manage”.
    3. Procure pela linha chamada messages.
    4. Certifique-se de que está marcada como “Subscribed”. Se você não vir “Subscribed” ao lado de messages, o Meta permanecerá silencioso mesmo se o webhook estiver “verificado”.

Embora você tenha mencionado que ativou “Allow Multiple HTTP Methods”, verifique novamente a configuração específica desse nó de Webhook.

  • O Problema: Se o nó estiver explicitamente configurado apenas para GET, ele ignorará o POST do Meta.
  • A Solução:
    • Abra seu nó de Webhook.
    • Em HTTP Method, certifique-se de que diz GET, POST (ou você selecionou ambos).
    • Nota: Algumas versões do nó exigem que você selecione o método em um menu suspenso. Se você vir apenas um, certifique-se de que não está acidentalmente filtrando requisições POST.

Isso ajuda?