Troubleshooting
What goes wrong with WhatsApp Sales and Payment Automation, how to recognise it, and what to do.
Meta will not verify the webhook
The verification handshake is Meta calling your callback URL with hub.mode, hub.challenge and hub.verify_token.
- Is Odoo reachable over HTTPS from the internet? Meta will not call a plain HTTP URL, and it will not call something only reachable inside your network.
- Does the verify token match exactly? Generate it in Odoo, paste it into Meta. A trailing space is enough to fail it.
- Is the callback URL the one Odoo shows? It is displayed on the number for copying rather than being something to assemble by hand.
Verified, but no messages arrive
You almost certainly did not subscribe to the messages field. In Meta: WhatsApp → Configuration → Webhook fields → subscribe to messages.
That one field carries inbound messages and delivery statuses. A webhook that verifies but subscribes to nothing is the most common configuration that looks completely correct and delivers nothing.
Messages arrive but nothing is answered
In order:
- Is the number enabled? A new number is not. Inbound is stored, nothing is sent, no rule runs.
- Is Answer automatically on?
- Has an agent taken the conversation over? The rules deliberately stop for a conversation a human owns.
- Has the customer opted out? Permanent, and nothing overrides it.
- Does any rule match? Check the order — first match wins, and a fallback rule placed first makes every rule below it dead.
- Is the scheduled action running? Settings → Technical → Scheduled Actions → WhatsApp: answer received messages.
Signature validation is rejecting everything
The X-Hub-Signature-256 header is HMAC-SHA256 over the raw request bytes with your App Secret.
- Wrong App Secret is the usual cause. It is App Settings → Basic in Meta, not the access token and not the Phone Number ID.
- A proxy that rewrites the body will break it by definition — the digest is over the bytes Meta sent. If something between Meta and Odoo re-serialises JSON, pretty-prints it or changes the charset, every genuine delivery fails.
Do not turn Require signed webhooks off to get around this. An unsigned webhook endpoint is a public endpoint that anyone can post fabricated customer messages to.
Replies are queued but never sent
WhatsApp: send queued messages is the scheduled action that sends them. Check it is active.
If it is running and messages are failing, open one — a failed outbound message is a row carrying the error Meta returned, in Meta's own words.
"Outside the 24-hour window"
Working as intended. Meta delivers an ordinary message only within 24 hours of the customer's last one; outside it only an approved template arrives.
Send a template instead. And note that an outbound message does not extend the window — only the customer's own message does, which is the part that catches people out.
The access token stopped working after a day
You used the temporary token from Meta's API Setup page. It expires in 24 hours.
Create a system-user token in Business Settings → Users → System Users.
Template sync fails
Expected, and it says so. The endpoint for listing a business account's templates could not be confirmed against Meta's published documentation, so the sync reports failure and changes nothing rather than inventing templates.
Add your templates by hand. They work.
An unknown number is not getting order status
By design. An action that reads somebody's records will not run for a number matching no contact — it would have to guess whose orders to show.
Either create the contact with that number on it, or turn on Create contact for unknown numbers. Until then those conversations go to a person.
A customer asked for a statement and did not get one
Also by design. The rule confirms the request and raises a task; a person confirms identity and sends it.
A phone-number match is not authentication, and a statement shows a customer's whole position with you.
A customer sent three messages at midnight and got one reply
Correct. Office hours send one after-hours reply per closed period, not one per message. Three identical apologies is worse than one.
The same reply was sent twice
Should not happen — inbound messages are idempotent on Meta's wamid, and Meta retries an unacknowledged webhook for 36 hours, which is exactly why nothing is sent from inside the webhook.
If you see it, send us the conversation and the two message records.
Buttons in my template do nothing
Interactive buttons and list messages are not supported. Their reply payload shape could not be read from Meta's documentation, and this module does not parse structures from memory.
Use the numbered text menu: it works on every client, needs no template approval, and accepts "2", "status" or the words.