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
- Audit your traffic. Are you using opt-in/opt-out, identifying your brand, full URLs, no prohibited content?
- Verify TCR registration (10DLC) or toll-free verification is approved for your use case.
- Confirm the numbers sending the flagged content are assigned to the right campaign.
- 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.