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
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/…
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:
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
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:
{{ $json.body.entry[0].changes[0].value.messages }}.messages[], while status updates arrive in .statuses[]. That one filter eliminates the loop in almost every case.