WhatsApp issue

Hello,

i have set the workflow correctly but still get error below

WhatsApp Trigger: Invalid parameter

how to fix this please ?

i wish to get help by anydesk cause this is my first time and i just want to get it wiork so i can go more steps.

Thanks

im using n8n on my computer

Do you have a Whatsapp business account?

im using my basic whatsApp account not business account

To use WhatsApp in n8n, you have two primary paths depending on whether you want to use the official WhatsApp Business Platform (API) or a third-party Gateway/API.

Since WhatsApp does not have a “simple” login like a standard app, you cannot just “connect” your personal phone; you must use an API.

The Official WhatsApp Business API (via Meta)
This is the professional, scalable way to automate messages. It is hosted by Meta and is the most stable method.

Setup Requirements:
A Meta Business Account.
A Developer App created at developers.facebook.com.
A verified phone number (that is not currently linked to a personal WhatsApp account).

In short, it will not work

good day @Osama_Al-Ani
I’ve already seen people using providers like Twilio, 360dialog, or UltraMsg, integrating them in n8n through Webhook + HTTP Request nodes.

Hi, this “WhatsApp Trigger: Invalid parameter” error is very common, especially on first setup

The issue is usually from wrong or missing configuration in your WhatsApp credentials or trigger setting.

What to check first

Most times it’s one of these:

Wrong phone number ID

Wrong access token

Wrong webhook verify token

Missing or wrong callback URL setup in Meta (Facebook Developer)

Simple steps to fix

1. Go to your WhatsApp Trigger node

Check that:

Phone Number ID is correct

Access Token is valid (not expired)

2. Go to Meta Developer Dashboard

Open your WhatsApp app

Go to Webhooks

Make sure:

Callback URL = your n8n webhook URL

Verify token = same as in n8n

3. Important

Make sure your webhook URL looks like:

https://your-domain/webhook/…

:warning: It will NOT work with:

localhost

private IP (like 192.168…)

You need a public URL (use ngrok if local)

Common mistake

If you are using test mode from Meta, your token may expire quickly

Try generating a new access token

Quick check

If you see “Invalid parameter”, it usually means:

:backhand_index_pointing_right: Meta is rejecting something you sent (token, ID, or webhook config)

Final tip

Don’t worry, this is normal on first setup

Once your webhook + token + phone ID match correctly, it works

If you want, send a screenshot of your WhatsApp Trigger settings (hide secret keys), I’ll point exactly what is wrong for you

Since you’re using a personal WhatsApp account, the official n8n WhatsApp trigger won’t work because it requires Meta WhatsApp Business API credentials.

If you want to keep using your personal number, you can use alternatives like Baileys, whatsapp-web.js, or services like UltraMsg / Green API, which allow you to connect via QR scan and then trigger messages/webhooks from n8n.

Basic flow:
Personal WhatsApp → QR Scan → API/Webhook → n8n workflow

If you want a long-term stable setup for business use, then switching to WhatsApp Business API is the better option.

For now, for quick testing with your existing number, try Baileys or whatsapp-web.js.

i just added a businness whatsApp and still get the same error i have no idea what i miss

now i got this error

Problem running workflow

*Maximum call stack size exceeded

how to fix it please ?*

The “Maximum call stack size exceeded” means your workflow is triggering itself in an infinite loop.

What’s happening: WhatsApp Cloud API sends webhook events for everything — not just incoming messages from users, but also status updates for messages you send (delivered, read, sent). If your workflow doesn’t filter those out, it processes a status update → sends a reply → generates another status update → triggers again → infinite loop.

Fix: Add an IF node right after your WhatsApp Trigger to check whether the event actually contains a real incoming message:

  • Field to check: {{ $json.body.entry[0].changes[0].value.messages }}
    • Condition: exists (is not empty)
      • If true → continue to your AI/response logic
        • If false → stop (no output connection needed)
      • Real incoming messages arrive in .messages[], while status updates arrive in .statuses[]. That one filter eliminates the loop in almost every case.
    • If you’re still seeing it after adding the filter, share a screenshot of your workflow and I can help pinpoint the cycle.