Keyword opt-outs on WhatsApp, RCS & Viber
The keyword mechanism that handlesSTOP and START is not SMS-only. Any inbound surface that can carry a keyword reply — a WhatsApp Business (WABA) number, an RCS agent, or a Viber channel — can run the same opt-out and opt-in rules, provided you add the rule with the matching channel scope. This guide walks you through per-channel setup, the cross-channel suppression one keyword triggers, and how to verify the ledger entries.
Why the SMS keyword docs do not cover WhatsApp/RCS/Viber
The rules editor at Messages → SMS → Opt-out Rules and its seed defaults are scoped to SMS. As the Opt-out keyword alias table states, the shipped seed defaults are scoped to thesms channel — because inbound SMS on long codes and short codes is the classic opt-out carrier surface. A tenant that runs WhatsApp or RCS traffic and relies only on those defaults has no rules firing on the non-SMS channel at all: a STOP texted to your WABA number matches nothing, and the contact stays reachable.
The fix is not a new mechanism. You handle WABA / RCS / Viber opt-outs through the same keyword mechanism by adding a rule on the whatsapp, rcs, or viber channel.
How channel scope works on rules
Every keyword rule inGET /api/v1/settings/opt-out-rules carries a channel annotation — one of sms, whatsapp, rcs, viber, or email. A rule only fires on the channel it is stored with. The scope is a routing latch, not a language hint: a whatsapp-scoped STOP only matches inbound WhatsApp turns on your WABA numbers.
The suppression the match writes is deliberately wider. When any opt-out rule matches — regardless of which channel it fired on — Orbit writes the suppression entry with scope all on the reply-capable phone address. That means a STOP sent to your WABA number blocks that contact on SMS, WhatsApp, RCS, and Viber at once. The recipient’s STOP is a request to stop being contacted, not a request to stop being contacted on one channel. This propagation lives in the suppression record, not in the keyword vocabulary — see Opt-Out & Suppression Lists for the ledger view.
These controls are tenant-owned — you decide which keywords and channels
qualify as an opt-out inside your own account. Nothing here is a
platform-mandated gate; both the shipped seed set and any additions stay your
editable list.
WhatsApp (WABA) setup
A WhatsApp Business number that can receive inbound messages is the only surface that carries keywords on this channel.- Open Messages → SMS → Opt-out Rules (also at
/messages/sms/opt-out-rules). The same editor manages every channel scope — the route just lives under the SMS workspace. - In the Opt-out keywords section, add a rule with the keyword you want to match on WhatsApp — usually
STOP. - In the channel field, select whatsapp. Without this step the rule still fires on SMS only — the most common WABA mis-configuration.
- Save with Save Rules.
POST /api/v1/settings/opt-out-rules call:
cURL
RCS setup
An RCS agent that accepts inbound replies falls in the same channel scope:- Open Messages → SMS → Opt-out Rules.
- Add the rule with channel set to rcs.
- Save. Any inbound keyword RCS turn against your agent now flips the consent flag.
cURL
Viber
cURL
Email — use List-Unsubscribe instead
Email opt-outs do not run through keyword rules. Recipients unsubscribe via the RFC-8058List-Unsubscribe / List-Unsubscribe-Post: One-Click header and the in-body link; Orbit merges both on every outbound email. Point email recipients there instead of a keyword scheme — see CAN-SPAM → List-Unsubscribe header behavior for the wire format and the in-body link merge rules.
Testing non-SMS channels end to end
Run a real inbound against the channel you scoped, and check all three downstream effects before relying on the rule in a campaign:- Send the keyword — text
STOPfrom a handset to your WABA number (or to the RCS agent / Viber channel you registered a rule for). - Contact profile — the conversation shows the inbound turn and auto-reply; the contact profile flips the channel’s
opted_outflag, oropted_inagain after a subsequentSTART(or your opt-in synonym). - Suppression entry — the Opt-Out & Suppression Lists page lists the phone row with scope
all, the channel it was matched on, and the keyword that fired.
Troubleshooting
Where to verify
- Rules list:
GET /api/v1/settings/opt-out-rules(cursor-paginated). - Create a single rule:
POST /api/v1/settings/opt-out-rules— bodykeyword(defaultSTOP),channel(defaultsms),action(opt-out|opt-in, required), optionalauto_reply_text. - Bulk update or toggle rules:
PUT /api/v1/settings/opt-out-ruleswith arulesarray (up to 100 entries withid+ the fields to change). All writes are gated to owner/admin roles; reads are also the management surface for the editor. - Ledger view of suppressed addresses, scopes, and keyword that fired: Opt-Out & Suppression Lists.
- Reference vocabulary for every shipped alias and market: Opt-out keyword alias table.