← All resources
April 22, 20266 min read

Multi-channel loyalty notifications without spam

Per-event routing, sender verification, template activation, and channel preferences. How to stay in the inbox instead of the spam folder.

Loyalty programs send a lot of messages. Earn confirmations, redemption receipts, tier upgrades, expiry warnings, birthday bonuses, partner offers, and the inevitable weekly digest. Done well, this is a relationship-building loop. Done poorly, it is a one-way ticket to the spam folder. The difference is operational discipline.

Bring your own providers

Email through SMTP, Amazon SES, or Mailgun. SMS through Twilio or AWS SNS. WhatsApp through Twilio or Meta Cloud API. Push through FCM or APNs. The platform should be a routing layer over your providers, not a captive sender.

Per-purpose senders matter

Mixing transactional, marketing, and OTP through the same sender identity destroys deliverability. A separate sender (and ideally a separate sub-domain) for each purpose protects the transactional channel — you can survive a marketing list complaint, you cannot survive an OTP delivery failure.

Wire each event to a template

Earn, redeem, tier change, voucher, expiry warning — each is its own NotificationEvent. The routing layer ties an event + member preferences + locale to a specific template. New events go through the same wiring; legacy templates do not leak into new events by accident.

Verify senders, activate templates

A template should not be allowed to send unless its sender is verified and the template itself is activated. WhatsApp via Meta requires explicit template approval. Building these gates into the platform prevents accidental sends from drafts and unverified domains.

Respect channel preferences

Members should be able to opt in / out per channel and per category. A "no marketing email but yes transactional SMS" setting must be honored across every send. The cost of getting this wrong is regulatory, not just reputational.

NotificationsEmailSMSWhatsAppPush