WhatsApp is not email. You cannot message anyone you like, whenever you like. Meta splits every conversation into two states, and which one you are in decides what you are allowed to send.
The 24-hour window #
When a customer messages you, a 24-hour customer service window opens. Inside it you can reply with anything: free text, images, documents, buttons, list menus. When 24 hours pass with no new message from them, the window closes.
Outside the window — including the very first time you ever contact someone — you may only send a template Meta has already approved. Sending a template re-opens the window if the customer replies.
Sending your first message #
The quickest honest test is to have the conversation started from the customer side, because it needs no approval and proves the whole loop works.
-
Message your business number from your own phone
Use normal WhatsApp. Send anything. -
Watch it arrive in the Inbox
If it appears, your webhook is configured correctly and inbound delivery works. -
Open the thread and reply
Type in the composer and send. If your phone receives it, outbound sending and your access token both work. -
Now try a business-initiated message
Create and submit a template, wait for Meta to approve it, then send it to a contact you have never spoken to. This is the path a real campaign takes.
What can go wrong #
| Field | What it does |
|---|---|
| Nothing arrives inbound | The webhook is not verified in Meta, or the messages field is not subscribed. See Connect a WhatsApp number. |
| Sending fails with an auth error | The system user token is expired or missing a permission. Press Validate on the account card to confirm. |
| Free text is refused | The conversation is outside its 24-hour window. Send an approved template instead. |
| Template rejected on send | The variables you supplied do not match the template's shape. The campaign form checks this before launch and reports it in plain language. |