Agent Wranglers

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

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.