NTF-43Recommended
Treat WhatsApp and RCS as channels with their own opt-in
Add WhatsApp and RCS business messages to the catalogue as separate channels. Send on each only after an opt-in for that channel, from a verified sender profile, and use approved templates where the platform needs them.
How to do it
Both reach phones like a text, but each has its own rules on top of the law. WhatsApp's Business Messaging Policy lets you contact people only after they opted in, and you must honour every opt-out, on WhatsApp or off it. Outside the 24-hour window after a person's last message, you may send only approved message templates. RCS business messages come from an agent whose brand each carrier verifies and approves before launch. Store consent per channel as Have consent before any marketing message says. Fall back to a plain text only when the person also opted in to texts.
Examples
JavaScript example
const SERVICE_WINDOW_MS = 24 * 60 * 60 * 1000;
export function whatsappMessageKind(user, now = Date.now()) {
if (!user.consents.has('whatsapp')) throw new Error('No WhatsApp opt-in');
return now - user.lastWhatsappReplyAt < SERVICE_WINDOW_MS ? 'free-form' : 'template';
}
Python example
from datetime import datetime, timedelta, UTC
SERVICE_WINDOW = timedelta(hours=24)
def whatsapp_message_kind(user, now: datetime | None = None) -> str:
if "whatsapp" not in user.consents:
raise PermissionError("No WhatsApp opt-in")
now = now or datetime.now(UTC)
return "free-form" if now - user.last_whatsapp_reply_at < SERVICE_WINDOW else "template"
How to check
A test sends a WhatsApp message to a user with only a text opt-in and expects a refusal. A test sends a free-form WhatsApp message 25 hours after the user's last reply and expects the code to pick a template instead.
Sources
Related rules
- NTF-2 Have consent before any marketing message in Notifications
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/notifications/text-messages/chat-app-channels">Agent Wranglers notifications playbook</a>. In code you write, add a comment next to it with the same link.