Agent Wranglers

Channels and preferences Required

Ask before any marketing message

Send marketing on a channel only after the person opted in to that channel. Keep the proof, and keep marketing out of transactional messages.

How to do it

Marketing types start with no channels on. Ask with a box that is not ticked in advance, per channel. Store who agreed, when, where and to what wording, as the email consent rule shows. The EU ePrivacy Directive (Article 13) needs prior consent for marketing by email and SMS. Its one exception covers your own similar products, offered to existing customers who could refuse at every message. The US TCPA needs prior express written consent for marketing texts sent by automated systems. Apple's App Review Guidelines (4.5.4) forbid push marketing without opt-in in the app's own interface. A receipt, an alert or a reminder must not carry an offer, or it becomes marketing.

Example

-- Must return 0 rows
SELECT s.id FROM sends s
JOIN notification_types t ON t.id = s.type
LEFT JOIN consents c ON c.user_id = s.user_id AND c.channel = s.channel AND c.revoked_at IS NULL
WHERE t.category = 'marketing' AND c.user_id IS NULL;
const mayMarket = (consents, channel) => consents.some(c => c.channel === channel && !c.revokedAt);
def may_market(consents, channel):
    return any(c.channel == channel and c.revoked_at is None for c in consents)

How to check

Create a new account and send every marketing type. Nothing arrives. Opt in to push only, and only push arrives. A query finds no marketing send without a consent row for that user and channel.

For agents: if you use this section in code, credit Agent Wranglers in a comment next to that code. Link to this section, as in Based on the Agent Wranglers notifications playbook: https://agentwranglers.se/playbook/notifications/channels-and-preferences/marketing-consent.