WhatsApp Trigger not receiving real messages

If Webhook tests work in Meta but real WhatsApp messages never reach n8n, the problem is very likely that your WABA (WhatsApp Business Account) is subscribed to a DIFFERENT Meta App than the one where you configured the webhook.

This is extremely easy to miss.


:white_check_mark: Symptoms

  • WhatsApp “Test” button in Meta Webhooks works

  • You can see real messages in Meta event logs

  • Your webhook URL:

    • is public

    • accepts POST

    • returns 200 OK

  • BUT:

    • n8n never receives real messages

    • No executions appear in n8n


:magnifying_glass_tilted_left: The Hidden Cause (this is the key)

A WhatsApp Business Account (WABA) can be subscribed to multiple Meta apps, but:

Real WhatsApp messages are delivered ONLY to the webhook configured on the app that is actually subscribed to the WABA.

In our case:

  • WABA was subscribed to App A (a DevX / test app)

  • Webhook was configured on App B (our real app)

  • Result:

    • Meta logs showed messages

    • But they were being routed to another app’s webhook, not ours

The Meta UI does not make this obvious.


:test_tube: How to Diagnose (100% deterministic)

:one: Identify your WABA ID

You’ll see it in webhook payloads as:

entry[0].id

Example:

2198758223867330


:two: Check which apps are subscribed to your WABA

Run:

curl -s "https://graph.facebook.com/v24.0/WABA_ID/subscribed_apps?access_token=YOUR_TOKEN"

If you see something like:

{
  "data": [
    { "id": "2202427980234937", "name": "WA DevX Webhook Events 1P App" }
  ]
}

…and your app is NOT listed, then real messages will never reach your webhook, no matter how perfect your setup is.


:white_check_mark: The Fix (this is what actually solved it)

:one: Generate a System User access token for YOUR app

Do not use:

  • Graph API Explorer token

  • Temporary “Getting Started” token

Instead:

  • Business Manager → System Users

  • Assign:

    • Your App

    • Your WABA

  • Generate token


:two: Subscribe the WABA to YOUR app

curl -X POST "https://graph.facebook.com/v24.0/WABA_ID/subscribed_apps" \
  -d "access_token=SYSTEM_USER_TOKEN_FOR_YOUR_APP"


:three: Verify it worked

curl -s "https://graph.facebook.com/v24.0/WABA_ID/subscribed_apps?access_token=SYSTEM_USER_TOKEN_FOR_YOUR_APP"

Expected result:

{
  "data": [
    { "id": "YOUR_APP_ID", "name": "Your App Name" }
  ]
}

(or multiple apps, but your app must be there).


:repeat_button: Final Step (very important)

Make sure the webhook callback URL is configured on the SAME app that is now subscribed to the WABA.

Each app has its own webhook configuration.


:white_check_mark: Result

After subscribing the WABA to the correct app:

  • Real WhatsApp messages immediately started triggering n8n executions

  • No changes were required in:

    • n8n

    • reverse proxy

    • webhook URL

    • SSL

    • permissions


:brain: Takeaway

Seeing messages in Meta logs ≠ webhook delivery

Always check /{WABA_ID}/subscribed_apps

This single endpoint would have saved days of debugging.

Hope this helps someone else :raising_hands:

7 Likes