T
Telephony SOPKnowledge Base
Search
← All topics

SMS Best Practices — Consent, Opt-Out, Brand ID, Character Limits

CTIA-aligned SMS rules: opt-in confirmation, opt-out in every message, brand identification, full URLs only, prohibited content list, and the segment math (160 GSM-7 / 70 Unicode, 153/67 per segment when split). Apply to 10DLC and toll-free alike.

signalwiresmscompliancectiaopt-inopt-outsegments
Agent trigger phrases: SMS compliance SignalWire · opt-in opt-out SMS · STOP keyword SMS · SMS segment limit 160 · prohibited SMS content SignalWire · snowshoeing SMS · GSM 7 Unicode segments

SMS Best Practices

The faster you internalize CTIA-aligned habits, the better your delivery rate, the lower your spam-flag risk, and the cleaner your TCR audit trail. Applies to every SignalWire SMS channel — 10DLC, toll-free, short code.

Opt-in — get clear consent

  • Every recipient must have opted in to the specific kind of messaging you're sending. Account notifications consent ≠ marketing consent.
  • Send an opt-in confirmation immediately after opt-in, per CTIA.
  • Maintain verifiable opt-in records (timestamp, source, channel, message type) — TCR and carrier audits ask for them.

Opt-out — every message, always

  • Every message must include an opt-out mechanism. No exceptions, even on follow-ups.
  • Common phrasings: "Reply STOP to opt out", "Reply NO to cancel", "Responde NO para cancelar".
  • When a STOP arrives, process it carrier-side and remove the number from all distribution lists for that brand. Don't try to re-engage opted-out numbers.

Brand identification — name in every message

Always include your business or brand name in the body. Carriers and recipients use it to distinguish legitimate from spam.

Bad: Your appointment is at 3.

Better: Dr. Crentist's Office: Hi Dwight, your cleaning is at 3 PM on Jan 1. Call to reschedule. Reply STOP to opt out.

Number association — one use case per number set

Don't cross-pollinate campaigns. If you run a plumbing business with marketing AND appointment confirmations:

  • One number set → marketing campaign.
  • A different number set → appointment confirmations.

Sharing numbers between use cases is one of the fastest ways to get flagged.

URL rules — no public shorteners

Carriers treat public shorteners as spam signals. Banned in production:

  • bit.ly, goo.gl, tinyurl.com, tiny.cc, lc.chat, is.gd, soo.gd, s2r.co, budurl.com, bc.vc

Acceptable:

  • Full branded domain (acme-plumbing.com/appt).
  • Private shortener on a dedicated domain + dedicated IPs (acme.li, hosted by you, used by you only).

Prohibited content (SignalWire — non-exhaustive)

Carriers and SignalWire will block or suspend accounts for these categories:

  • Social marketing.
  • Collections.
  • Financial services (high-risk lending, payday loans, debt consolidation, student-loan forgiveness, credit repair, tax relief).
  • Third-party insurance (car, health) when marketed cold.
  • Gambling, casino, bingo, sweepstakes, free prizes.
  • Investment opportunities, lead generation, recruiting, commission programs.
  • Illicit substances, get-rich-quick, work-from-home, deceptive marketing.
  • SHAFT — Sex, Hate, Alcohol, Firearms, Tobacco.
  • Cannabis.
  • Phishing, fraud, scams.

Including prohibited content can flag your account for fraud. Repeat or serious offences = suspension or cancellation.

Snowshoeing — banned

Using multiple numbers to bypass throughput limits ("snowshoeing") is forbidden by carriers. If you need higher throughput:

  • Increase your TCR-approved throughput via vetting.
  • Open a Sales ticket for a justified higher limit.

If you genuinely need multiple numbers for legitimate reasons (multi-location franchises), that's a different conversation — Carrier Operations will work with you to configure it correctly.

Volume cadence

Even with opt-in, 4 messages/month per recipient is a healthy ceiling for marketing. Past that, opt-out rates climb sharply.

Character limits and segments

| Encoding | Single-segment limit | Multi-segment chunk size | |---|---|---| | GSM-7 | 160 chars | 153 chars/segment (UDH eats 7) | | UCS-2 / Unicode | 70 chars | 67 chars/segment (UDH eats 3) |

A single Unicode character (like ) flips the entire message to Unicode encoding — drops your per-segment limit from 160 to 70.

  • Max 1600 chars total per message body.
  • Max 5 segments — some carriers cap lower.
  • Whitespace counts as a character.
  • Don't copy/paste from rich-text editors — invisible non-GSM characters cause unexpected segmentation.

You're billed per segment, in both directions. SignalWire recombines inbound multi-segment messages into one logical record.

Checking your encoding

In the SignalWire portal, click any message record → Message Encoding Details. Shows segments, encoding, per-character box (blue UDH headers, pink for emoji/Unicode triggers), and final billing.

What to do if flagged as spam

  1. Audit your traffic. Are you using opt-in/opt-out, identifying your brand, full URLs, no prohibited content?
  2. Verify TCR registration (10DLC) or toll-free verification is approved for your use case.
  3. Confirm the numbers sending the flagged content are assigned to the right campaign.
  4. Open a SignalWire Support ticket with the message SID. Their team can investigate carrier-side.

Why bother? — open and response rates

SMS open rate: ~98%. Response rate: ~45%. Compare to email (~20-40% open) and cold call (~2%). When done right, SMS is the highest-leverage channel. When done wrong, it's the fastest way to a carrier ban.

Anti-patterns

  • Sending the opt-in confirmation 10 minutes later — CTIA expects it immediately.
  • Skipping STOP in non-marketing messages "because the user already opted in" — every message needs it.
  • Sending marketing under an appointment-reminder campaign — the carriers cross-check content vs use case.
  • Sharing one TCR campaign across multiple unrelated use cases (instead of using Mixed intentionally) — flagged.
  • Using emojis casually — flips to Unicode, drops segment limit, doubles your cost.
  • Manually copying from Word or Google Docs into the API — smart-quote and ellipsis characters force Unicode.

See also