WhatsApp Business messaging
Business messaging on WhatsApp is built around one rule: a customer's message opens a window during which a business may write freely, and outside that window it may send only messages whose wording was approved in advance. Everything else — templates, categories, opt-in, quality ratings — follows from that. Connect works directly against Meta, and a workspace connects its number either with its own Meta app or through Meta's QR-linked coexistence route.
Two products, one name#
The consumer-facing business app and the business messaging platform are different things and only the second can be automated. The app runs on a phone and is operated by a person; the platform is an API reached either directly or through a solution provider, with a business number registered to a business account, a display name that goes through review, and messaging limits that move with the number's quality rating.
The line between them is no longer absolute, and that is the newest part of this technology. Meta supports coexistence: a business that already runs the WhatsApp Business app on a phone can scan a QR code inside Meta's Embedded Signup and have the same number served by the Cloud API as well. Both keep working. Replies typed on the handset are delivered to the API side as message echoes, the phone's chat history can be imported, and its address book can be shared so threads carry the names the business already used.
Coexistence is a Meta-supported flow with its own onboarding, not a way around the platform. It is worth stating because the alternatives people reach for — automating WhatsApp Web, emulating a device — are neither supported nor safe, and Meta restricts numbers for them. Coexistence is also gated: Meta grants it only to a Tech Provider or Solution Partner app with Embedded Signup.
The window is the whole design#
When a customer messages a business, a customer service window opens — twenty-four hours on the platform. Inside it the business may reply freely, in its own words, as many times as the conversation needs. When it closes, free-form replies stop being accepted and the only way to reach that person again is a template whose text was approved before it was ever needed.
| Situation | What may be sent | Practical effect |
|---|---|---|
| The customer wrote recently | Anything, written fresh | Ordinary conversation, including an AI-written reply |
| The window has closed | An approved template only | The wording is fixed in advance; variables fill in the specifics |
| No prior contact at all | An approved template, with opt-in already obtained | Cold outreach is not what this channel is for |
The window is why a held reply is more costly on this channel than on email. A draft that waits overnight for approval may find the window shut by morning, and the reply that finally goes has to be a template rather than the sentence somebody approved.
Templates, categories and opt-in#
- Template
- A message whose text is submitted for review before use, with variable slots for the parts that change. Approval is per language variant.
- Category
- What the template is for — a service or utility message, an authentication code, or marketing. The category affects how it is treated and how it is charged.
- Opt-in
- Consent obtained before templates are sent. It is a platform requirement, not a courtesy, and where the consent came from is worth recording.
- Quality rating
- A per-number signal derived from how recipients react. Blocks and reports push it down; a low rating narrows how many people the number may message.
Does Connect use WhatsApp Business?#
Used, directly against Meta, with per-workspace credentials, and in two connection modes. Official API is the business's own Meta app, token and number; QR-linked is Meta's coexistence route. Both land in the same tables and pass the same window, consent, autonomy and metering checks — whatsapp_engine does not know which mode it is answering on — and the QR-linked one is simply capped harder, at 20 automatic sends an hour against 120.
An inbound message arrives on one signed webhook, resolves to a workspace and to a person, and becomes part of the same conversation record every other channel writes into. The reply is drafted by whatsapp_engine, handed to whatsapp.dispatch, and released under the same autonomy rule as any channel, so WhatsApp is not a separate policy surface.
Follow-ups can be scheduled on WhatsApp and are constrained by the window: inside it a written message, outside it only the approved template the workspace nominated. STOP and START are honoured as consent on the person's WhatsApp route and as a memory block every send path already obeys.
Because a person is resolved rather than a phone number stored, a WhatsApp conversation joins the same relationship as that person's email and calls. That is the point of the canonical layer: the channel changes, the customer does not.
What Meta decides, and how to tell#
Four things are Meta's rather than Connect's: which templates exist and are approved, the 24-hour window, the category a conversation is billed under, and what delivery reporting arrives. Connect applies the first two locally before any network call, stores the third as it comes back, and shows nothing for the fourth where nothing was reported.
The reason to state this plainly is that a simulated capability is worse than a missing one. A screen that shows a *delivered* tick Meta never reported is a screen that will be believed. See message delivery status for what each signal is actually worth when it does arrive.
- If a template name is refused, it is not on the list synced from Meta, or Meta has not approved that language variant. Sync first, then check the name.
- If a delivery state never advances past sent, Meta has not posted a further callback for that message.
- If a send is refused with a rate-limit code, Meta is saying slow down — the message is not wrong and editing it changes nothing.
- If media will not attach, check the type and the 16 MB ceiling before checking anything else.
Questions#
Why can Connect not message a customer who has never written?
Because the platform does not allow free-form outreach. Reaching someone who has not messaged you requires an approved template and prior opt-in, and that is a rule of the channel rather than a Connect restriction. Inside an open window, replies are ordinary written messages.
What happens if the window closes while a reply is waiting for approval?
The free-form reply can no longer be sent, and reaching that person again needs an approved template. This is the strongest argument for a narrower autonomy rule on WhatsApp than on email: a held draft on this channel decays in a way an email draft does not.
Is a WhatsApp conversation separate from that person's other channels?
No. The message resolves to a person, and that person's WhatsApp thread, email and calls belong to one relationship. Suppression and blocks follow the person, not the address.
Is QR-linking the same as automating WhatsApp Web?
No, and the difference matters. Coexistence is Meta's own flow through Embedded Signup, with echoes, history import and address-book sync as documented features. Automating WhatsApp Web or emulating a device is neither supported nor safe, and Connect implements nothing of the kind.