User guide › Apps › SMS & WhatsApp marketing
Two apps, not one
SMS Marketing lives at /sms-marketing.
WhatsApp Marketing lives at /whatsapp-marketing.
They are installed separately, granted separately, and each rides on a different
connection. This page covers both because the workflow rhymes — but nothing here
is shared between them except Audiences.
Both apps have a hard dependency on Audiences: installing either one installs Audiences too, because a broadcast has to have somebody to go to. Both are also channels bundled by Omni marketing — installing Omni fans out and installs the channels your plan allows. Installing just one channel on its own is equally fine.
| SMS Marketing | WhatsApp Marketing | |
|---|---|---|
| Where | /sms-marketing | /whatsapp-marketing |
| Screens | Campaigns · Templates · Suppression | Campaigns · Templates · Suppression |
| Message content | Free text you write yourself | Only a template already approved by Meta |
| Audience channel | Audiences on the SMS channel | Audiences on the WhatsApp channel |
| Delivery states | Sent → Delivered / Failed | Sent → Delivered → Read, or Failed |
| Automatic opt-out | Yes — inbound STOP | No — the suppression list is maintained by hand |
SMS marketing
Before you can send
SMS rides on your existing telephony connection rather than a separate one. The composer's Send from picker lists the numbers on that connection that can send SMS. If nothing is connected the picker tells you exactly that: "No SMS sender. Connect Twilio + set a caller id in Voice → Settings."
Making that connection is not done inside this app — see Integrations.
Templates
Templates holds "reusable SMS message bodies. Use
{{1}} placeholders and {name}." A template is just a name
and a message; there's no approval step and no waiting. Create one from
New template and edit it inline.
Placeholders are filled per campaign. {name} is replaced with the
recipient's own name from the audience.
Sending a campaign
- Start one Campaigns → New campaign. Give it a name — blank ones show as Untitled in the list.
- Pick the sender Send from, one of your SMS-capable numbers.
- Pick the audience Audience lists your shared audiences filtered to the SMS channel. An audience with no channel set to SMS won't appear here — build one in Audiences first.
- Write the message Either choose a template, or leave Template (optional) on Write inline message and type into Message. A live counter under the box reads N chars · ~N segment(s) — the field's own placeholder reminds you that 160 characters is one SMS segment, and every extra segment is another message billed.
- Set the pace Rate (per minute) throttles how fast the broadcast goes out.
- Save, then launch Save draft keeps it editable. Send now asks you to confirm — "Send this SMS campaign now to the whole audience? Standard SMS rates apply." — or set a time and press Schedule.
Two checks block a launch: Pick an audience. and Add a message or template.
As soon as a campaign leaves draft the composer goes read-only and tells you This campaign is … with its current status. There is no editing a send in flight — cancel it and build a new one.
What happens per recipient
Sending is queued work, so the button returns immediately and the campaign progresses on its own:
- The recipient list is frozen The audience is resolved once, minus every number on the suppression list, and one recipient row is written per surviving number. Numbers removed by suppression are counted separately from the total.
- Each queued row is sent
Placeholders and
{name}are filled per recipient, then the message goes out paced to your rate limit. Each row becomes sent with a provider reference, or failed with the provider's error kept on the row. - Delivery receipts arrive later The provider posts back what happened to each message, which moves rows from sent to delivered or failed and recomputes the campaign's counters.
The whole path is safe to re-run: a sweep every minute picks up scheduled campaigns whose time has come and resumes any campaign left mid-send by a restart. Recipients already sent are not sent again — only still-queued rows are worked.
Reading the result
A sending or sent campaign shows a Delivery block on the campaign itself — Recipients, Sent, Delivered and Failed. There is no separate report screen. Campaign status is one of Draft, Scheduled, Sending, Sent, Cancelled or Failed.
Why a send failed
| Symptom | Cause |
|---|---|
| The whole campaign flips to Failed without sending anything | It had no audience, or no message at all (neither an inline body nor a template with one), or the audience no longer resolves, or no provider connection could be reached, or no sender number was available. |
| Some recipients are Failed, the rest went out | The provider rejected those specific numbers. The reason is stored per recipient. |
| Fewer recipients than the audience holds | Suppressed numbers were removed when the recipient list was built. The difference is counted as opted out. |
| Everything says Sent but nothing ever reaches Delivered | Delivery receipts need a publicly reachable address to be posted back to. Without one configured, the callback is simply left off and rows stay at sent — the messages themselves still went out. |
Opt-outs and STOP
SMS handles opt-out automatically, provided the number's inbound webhook points at your workspace (set up on the Integrations side).
| They reply | What happens |
|---|---|
| STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT | The number is added to the suppression list as an opt-out and gets a confirmation: "You've been unsubscribed and won't receive more messages. Reply START to opt back in." |
| START, YES, UNSTOP | The opt-out suppression is removed and they can be messaged again. |
| HELP, INFO | They get: "This is an automated marketing line. Reply STOP to unsubscribe." |
The Suppression screen is the list itself — "numbers that have opted out (STOP) or bounced — excluded from every campaign." You can Add number by hand in E.164 form with a reason of Opted out, Bounced or Manual, and Remove entries. Every campaign filters against this list when it builds its recipients, and one-to-one SMS sends from elsewhere in the workspace honour it too.
WhatsApp marketing
Before you can send
WhatsApp Marketing reuses the WhatsApp Business connection you already have — it does not ask you to log in again. Without one, the app says so plainly: "No WhatsApp Business account is connected. Connect WhatsApp in Settings → Integrations first." Connecting it is covered in Integrations.
You also need at least one approved message template. That's the part that takes real time, so start it before you plan a send date.
Templates, and the approval constraint
This is the difference that shapes everything else about the channel. On WhatsApp you cannot type a message and broadcast it. You send a template that Meta has approved, and the app enforces that at launch. The Templates screen exists to manage exactly that.
- Pull in what you already have Sync from Meta fetches every template on your connected WhatsApp Business accounts and refreshes their approval status. Run it whenever you're waiting on an approval — this is what moves a template from pending to approved locally.
- Or write a new one
New template. Pick the WhatsApp Business account, then a
Name (lowercase letters, numbers and underscores only), a
Language, and a Category of
Marketing, Utility or
Authentication. Fill in an optional Header, the
Body — "use
{{1}},{{2}}… for variables filled per campaign" — and an optional Footer. - Submit it Submit for approval. The form is explicit about what follows: "Submitted to Meta for approval. WhatsApp only delivers approved templates." It appears in your list immediately as pending.
- Wait, then re-sync Approval happens on Meta's side, not here. Come back and Sync from Meta to see the verdict.
The list shows Name, Language, Category, Status and Variables. Status is one of approved, pending, rejected, disabled or paused — mirrored from Meta, not something you can set. Deleting a template removes it on Meta and locally, and the confirmation says so.
If you try to send or schedule a campaign whose template isn't approved, the launch is refused with the template's actual status in the message — Template "…" isn't approved yet (status: …). WhatsApp only delivers approved templates. Nothing is queued and no recipients are touched.
Sending a campaign
- Start one Campaigns → New campaign and name it.
- Pick the sender number Send from lists the phone numbers on your connection.
- Pick the template Template — the field's own hint is "only approved templates can be sent."
- Fill the variables
Template variables: "static values fill the template's
{{n}}placeholders. Use{name}for the recipient's name." So the values are the same for everyone in the broadcast, except{name}, which resolves per recipient. - Pick the audience Audience lists your shared audiences filtered to the WhatsApp channel. If there are none you get a direct link — "No WhatsApp audiences yet — create one →" — into Audiences.
- Set the pace Send rate (per minute), with the reminder to "keep within your Meta messaging tier."
- Launch Save draft, Send now, or set Schedule for and press Schedule.
Before anything is queued, the campaign is checked. You'll be stopped with Pick an audience first., Pick a sender phone number first., Pick a template first., The selected template no longer exists., or the not-approved message above. A campaign that has already started refuses with This campaign is already sending or sent., and editing one gets This campaign has already been sent and can't be edited.
What happens per recipient
Same shape as SMS. The audience is resolved once into recipient rows; each queued row is sent the approved template through the WhatsApp Business API, paced to your send rate, and marked sent with a message reference or failed with the error. A sweep every minute launches due scheduled campaigns and resumes anything interrupted, sending only the rows still queued.
After that, receipts do the rest. A recipient moves sent → delivered → read as WhatsApp reports back. Progress is one-way: a receipt that arrives out of order can't drag a recipient backwards, and failed always wins.
Reading the report
The campaign report polls while a send runs, so it fills in live. Total, Sent, Delivered, Read and Failed, plus derived rates and a per-recipient breakdown with the Error for anything that failed. Before the first recipient exists it shows No recipients yet. Campaign status runs Draft, Scheduled, Sending, Sent, Cancelled, Failed.
Opt-outs
The Suppression screen is a tenant-wide block list — "numbers here are excluded from every campaign (STOP / opt-out)." Add a phone number, or remove one. Every campaign filters its recipients against it when the send starts.
Unlike SMS, this app does not add numbers to the suppression list for you — there is no inbound keyword handler in WhatsApp Marketing. If someone asks to stop hearing from you, add their number on the Suppression screen yourself. Build that step into whoever watches your inbound WhatsApp conversations.
Who can do what
Both apps use the same three-level model, granted independently per app — access to SMS Marketing says nothing about WhatsApp Marketing.
| Grant | Lets someone |
|---|---|
| App access | Open the app and read campaigns, templates and the suppression list. |
| Manage campaigns | Create and edit campaigns and templates, and maintain the suppression list. |
| Send campaigns | Schedule and send. Without it, a member can build a broadcast but not launch it. |
Admins pass all three. Because an SMS broadcast costs money per message and a WhatsApp broadcast burns your messaging tier, keeping Send to a smaller group than Manage is the sensible default. More in Permissions.
Using them together
Neither app has to be driven from its own Campaigns screen. Both contribute a step to the cross-channel campaign builder — Send WhatsApp campaign creates and sends a template broadcast to whatever audience the step is holding, and SMS can go out either as a full campaign step or as a single message inside a longer sequence: wait, check whether they opened the email, then text them. That's what Omni marketing orchestrates, and the end-to-end picture is in Campaign lifecycle.
Whichever surface triggers the send, the same rules apply: the suppression list is filtered out, and a WhatsApp step re-checks template approval, sender and audience before anything leaves. An opted-out number stays opted out.