Apps · Marketing

SMS & WhatsApp marketing

Two broadcast channels that work the same way — pick an audience, write or choose a message, send now or schedule it, watch delivery land per recipient. They are two separate apps, and each has its own rules about what you're allowed to send.

User guideApps › 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 MarketingWhatsApp Marketing
Where/sms-marketing/whatsapp-marketing
ScreensCampaigns · Templates · SuppressionCampaigns · Templates · Suppression
Message contentFree text you write yourselfOnly a template already approved by Meta
Audience channelAudiences on the SMS channelAudiences on the WhatsApp channel
Delivery statesSent → Delivered / FailedSent → Delivered → Read, or Failed
Automatic opt-outYes — inbound STOPNo — 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

  1. Start one Campaigns → New campaign. Give it a name — blank ones show as Untitled in the list.
  2. Pick the sender Send from, one of your SMS-capable numbers.
  3. 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.
  4. 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.
  5. Set the pace Rate (per minute) throttles how fast the broadcast goes out.
  6. 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.

Once it starts, the campaign is frozen

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:

  1. 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.
  2. 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.
  3. 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

SymptomCause
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 replyWhat 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Only approved templates send

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

  1. Start one Campaigns → New campaign and name it.
  2. Pick the sender number Send from lists the phone numbers on your connection.
  3. Pick the template Template — the field's own hint is "only approved templates can be sent."
  4. 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.
  5. 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.
  6. Set the pace Send rate (per minute), with the reminder to "keep within your Meta messaging tier."
  7. 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.

WhatsApp opt-out is manual

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.

GrantLets someone
App accessOpen the app and read campaigns, templates and the suppression list.
Manage campaignsCreate and edit campaigns and templates, and maintain the suppression list.
Send campaignsSchedule 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.