---
name: "sms_marketing"
description: "Design compliant SMS marketing programs: opt-in capture, welcome/cart-recovery/promo flows, campaign cadence, TCPA and carrier guardrails. Triggers when someone asks about text-message marketing, SMS campaigns, cart recovery texts, opt-ins, or messaging compliance."
---

# SMS Marketing

## Purpose
Plan and write SMS marketing programs that convert and stay legal. Covers opt-in capture methods, the standard flows (welcome, cart recovery, post-purchase, promo/drop), campaign cadence, and the TCPA/FCC/carrier compliance guardrails that apply to US texting programs. This is practical education, not legal advice. For high-volume or gray-area sends, the agent routes to counsel.

## Workflow
1. **Define the program.** Brand, goal (acquire, recover carts, win back, launch), audience segment, and the sending number type (10DLC long code, toll-free, or short code). For US A2P traffic, the brand and campaign must be registered with The Campaign Registry before sending.
2. **Design opt-in capture.** Pick one or more capture methods and write the exact consent language for each (see `references/optin_capture.md`). Record the consent evidence: phone number, timestamp, source, and the exact language shown. Never send marketing texts without documented prior express written consent.
3. **Write the flows.** Build message-by-message sequences with trigger, timing, copy, and exit conditions (see `references/flows.md`). Keep each text under 160 GSM characters when possible, name the brand in every message, and make the call to action a single link or keyword.
4. **Apply the compliance gate.** Run every campaign draft through the checker: `python3 bin/sms_check.py draft.json` (see Tooling below). Fix every finding before the draft is approved. Rules summary in Operating Rules; full rules in `references/compliance.md`.
5. **Set cadence and measure.** Disclose the cadence at opt-in, send within it, respect quiet hours (8 AM to 9 PM recipient local time), and track sends, deliveries, clicks, unsubscribes, coupon use, and recovered revenue by segment.

## Tooling
`bin/sms_check.py` — pre-flight compliance checker. Takes a JSON draft and reports violations.

Draft format:
```json
{
  "brand": "Acme Outdoor",
  "tcr_registered": true,
  "disclosed_cadence_per_month": 4,
  "optin": {"method": "checkout checkbox", "timestamp": "2026-10-09T13:40:00-05:00", "language": "Get order updates and 4 deals/month from Acme Outdoor. Reply STOP to opt out. Msg&data rates may apply."},
  "messages": [
    {"text": "Acme Outdoor: flash sale ends tonight, 20% off tents: example.com/sale Reply STOP to opt out", "send_time": "2026-10-10T14:00:00-05:00", "recipient_tz_offset": -5}
  ]
}
```
It checks: STOP keyword present, HELP/INFO availability on first message, brand identification, send time inside 8 AM to 9 PM recipient local time, no public link shorteners, no SHAFT content without approval flag, content matches a registered use case, frequency within disclosed cadence, and opt-in record completeness. Exit 0 means clean; non-zero prints each finding.

Quick usage:
```bash
python3 bin/sms_check.py ~/workspace/skill-production/scratch/sms-draft-example.json
```

## Output Contract
- Every flow ships as: trigger, per-message timing, message copy, exit/suppression conditions, and the consent + compliance evidence it relies on.
- Every campaign draft passes `bin/sms_check.py` with zero findings, or the findings are documented as accepted risks with the rationale written down.
- Copy is plain, short, and sounds like a person texting. No hype stacking, no mystery links.
- When the answer involves a legal gray area, say so plainly and point to counsel instead of guessing.

## Operating Rules
1. **Consent first, always.** No purchased lists, no borrowed lists, no "they gave their number to the partner brand". Prior express written consent, documented, for marketing texts.
2. **STOP works, instantly.** Honor any reasonable opt-out wording ("stop", "quit", "end", "cancel", "unsubscribe", "opt out", "take me off your list") within 10 business days at the latest, same-day in practice. One confirmation text with no promo content is allowed.
3. **Identify the sender.** Brand name in every message, matching the 10DLC registration. No messages that make the recipient guess who is texting.
4. **Quiet hours are the recipient's.** 8 AM to 9 PM in their local time zone, not yours. Some states are stricter; know the states you text into.
5. **One campaign per use case.** Promotional content only from promotional-registered campaigns. Do not repurpose a transactional/OTP campaign for promos.
6. **No discount in the first recovery message.** Remind first; incentive later with an expiring single-use code. Stop the flow on purchase, max four touches.
7. **Check the cart before you text.** A reminder for a sold-out item is worse than silence. The link must restore the cart on the same device.
8. **Never use public shorteners.** Links resolve to the brand's own domain. Check deliverability and spam-trigger wording before scale.
9. **Frame unverifiable claims as opinion or cut them.** Open-rate and recovery-rate benchmarks vary by vertical; cite the source and the segment when quoting them.
