{"slug":"sms-best-practices","title":"SMS Best Practices — Consent, Opt-Out, Brand ID, Character Limits","tags":["signalwire","sms","compliance","ctia","opt-in","opt-out","segments"],"agent_summary":"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.","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"],"runnable":false,"markdown":"\n# SMS Best Practices\n\nThe 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.\n\n## Opt-in — get clear consent\n\n- Every recipient must have opted in to **the specific kind of messaging** you're sending. Account notifications consent ≠ marketing consent.\n- Send an **opt-in confirmation** immediately after opt-in, per CTIA.\n- Maintain verifiable opt-in records (timestamp, source, channel, message type) — TCR and carrier audits ask for them.\n\n## Opt-out — every message, always\n\n- Every message must include an opt-out mechanism. No exceptions, even on follow-ups.\n- Common phrasings: \"Reply STOP to opt out\", \"Reply NO to cancel\", \"Responde NO para cancelar\".\n- 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.\n\n## Brand identification — name in every message\n\nAlways include your business or brand name in the body. Carriers and recipients use it to distinguish legitimate from spam.\n\n**Bad:** `Your appointment is at 3.`\n\n**Better:** `Dr. Crentist's Office: Hi Dwight, your cleaning is at 3 PM on Jan 1. Call to reschedule. Reply STOP to opt out.`\n\n## Number association — one use case per number set\n\nDon't cross-pollinate campaigns. If you run a plumbing business with marketing AND appointment confirmations:\n\n- One number set → marketing campaign.\n- A different number set → appointment confirmations.\n\nSharing numbers between use cases is one of the fastest ways to get flagged.\n\n## URL rules — no public shorteners\n\nCarriers treat public shorteners as spam signals. **Banned in production:**\n\n- `bit.ly`, `goo.gl`, `tinyurl.com`, `tiny.cc`, `lc.chat`, `is.gd`, `soo.gd`, `s2r.co`, `budurl.com`, `bc.vc`\n\n**Acceptable:**\n\n- Full branded domain (`acme-plumbing.com/appt`).\n- Private shortener on a dedicated domain + dedicated IPs (`acme.li`, hosted by you, used by you only).\n\n## Prohibited content (SignalWire — non-exhaustive)\n\nCarriers and SignalWire will block or suspend accounts for these categories:\n\n- Social marketing.\n- Collections.\n- Financial services (high-risk lending, payday loans, debt consolidation, student-loan forgiveness, credit repair, tax relief).\n- Third-party insurance (car, health) when marketed cold.\n- Gambling, casino, bingo, sweepstakes, free prizes.\n- Investment opportunities, lead generation, recruiting, commission programs.\n- Illicit substances, get-rich-quick, work-from-home, deceptive marketing.\n- SHAFT — Sex, Hate, Alcohol, Firearms, Tobacco.\n- Cannabis.\n- Phishing, fraud, scams.\n\nIncluding prohibited content can flag your account for fraud. Repeat or serious offences = suspension or cancellation.\n\n## Snowshoeing — banned\n\nUsing multiple numbers to bypass throughput limits (\"snowshoeing\") is forbidden by carriers. If you need higher throughput:\n\n- Increase your TCR-approved throughput via vetting.\n- Open a Sales ticket for a justified higher limit.\n\nIf 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.\n\n## Volume cadence\n\nEven with opt-in, 4 messages/month per recipient is a healthy ceiling for marketing. Past that, opt-out rates climb sharply.\n\n## Character limits and segments\n\n| Encoding | Single-segment limit | Multi-segment chunk size |\n|---|---|---|\n| **GSM-7** | 160 chars | 153 chars/segment (UDH eats 7) |\n| **UCS-2 / Unicode** | 70 chars | 67 chars/segment (UDH eats 3) |\n\nA single Unicode character (like `♥`) flips the entire message to Unicode encoding — drops your per-segment limit from 160 to 70.\n\n- Max 1600 chars total per message body.\n- Max 5 segments — some carriers cap lower.\n- Whitespace counts as a character.\n- Don't copy/paste from rich-text editors — invisible non-GSM characters cause unexpected segmentation.\n\nYou're billed **per segment**, in both directions. SignalWire recombines inbound multi-segment messages into one logical record.\n\n## Checking your encoding\n\nIn 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.\n\n## What to do if flagged as spam\n\n1. **Audit your traffic.** Are you using opt-in/opt-out, identifying your brand, full URLs, no prohibited content?\n2. **Verify TCR registration** (10DLC) or **toll-free verification** is approved for your use case.\n3. **Confirm the numbers** sending the flagged content are assigned to the right campaign.\n4. **Open a SignalWire Support ticket** with the message SID. Their team can investigate carrier-side.\n\n## Why bother? — open and response rates\n\nSMS 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.\n\n## Anti-patterns\n\n- Sending the opt-in confirmation 10 minutes later — CTIA expects it immediately.\n- Skipping STOP in non-marketing messages \"because the user already opted in\" — every message needs it.\n- Sending marketing under an appointment-reminder campaign — the carriers cross-check content vs use case.\n- Sharing one TCR campaign across multiple unrelated use cases (instead of using **Mixed** intentionally) — flagged.\n- Using emojis casually — flips to Unicode, drops segment limit, doubles your cost.\n- Manually copying from Word or Google Docs into the API — smart-quote and ellipsis characters force Unicode.\n\n## See also\n\n- [A2P 10DLC Campaign Registry](/topic/a2p-10dlc-campaign-registry)\n- [Toll-free and hosted messaging](/topic/toll-free-and-hosted-messaging)\n","html":"<h1>SMS Best Practices</h1>\n<p>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.</p>\n<h2>Opt-in — get clear consent</h2>\n<ul>\n<li>Every recipient must have opted in to <strong>the specific kind of messaging</strong> you're sending. Account notifications consent ≠ marketing consent.</li>\n<li>Send an <strong>opt-in confirmation</strong> immediately after opt-in, per CTIA.</li>\n<li>Maintain verifiable opt-in records (timestamp, source, channel, message type) — TCR and carrier audits ask for them.</li>\n</ul>\n<h2>Opt-out — every message, always</h2>\n<ul>\n<li>Every message must include an opt-out mechanism. No exceptions, even on follow-ups.</li>\n<li>Common phrasings: \"Reply STOP to opt out\", \"Reply NO to cancel\", \"Responde NO para cancelar\".</li>\n<li>When a STOP arrives, process it carrier-side and remove the number from <strong>all</strong> distribution lists for that brand. Don't try to re-engage opted-out numbers.</li>\n</ul>\n<h2>Brand identification — name in every message</h2>\n<p>Always include your business or brand name in the body. Carriers and recipients use it to distinguish legitimate from spam.</p>\n<p><strong>Bad:</strong> <code>Your appointment is at 3.</code></p>\n<p><strong>Better:</strong> <code>Dr. Crentist's Office: Hi Dwight, your cleaning is at 3 PM on Jan 1. Call to reschedule. Reply STOP to opt out.</code></p>\n<h2>Number association — one use case per number set</h2>\n<p>Don't cross-pollinate campaigns. If you run a plumbing business with marketing AND appointment confirmations:</p>\n<ul>\n<li>One number set → marketing campaign.</li>\n<li>A different number set → appointment confirmations.</li>\n</ul>\n<p>Sharing numbers between use cases is one of the fastest ways to get flagged.</p>\n<h2>URL rules — no public shorteners</h2>\n<p>Carriers treat public shorteners as spam signals. <strong>Banned in production:</strong></p>\n<ul>\n<li><code>bit.ly</code>, <code>goo.gl</code>, <code>tinyurl.com</code>, <code>tiny.cc</code>, <code>lc.chat</code>, <code>is.gd</code>, <code>soo.gd</code>, <code>s2r.co</code>, <code>budurl.com</code>, <code>bc.vc</code></li>\n</ul>\n<p><strong>Acceptable:</strong></p>\n<ul>\n<li>Full branded domain (<code>acme-plumbing.com/appt</code>).</li>\n<li>Private shortener on a dedicated domain + dedicated IPs (<code>acme.li</code>, hosted by you, used by you only).</li>\n</ul>\n<h2>Prohibited content (SignalWire — non-exhaustive)</h2>\n<p>Carriers and SignalWire will block or suspend accounts for these categories:</p>\n<ul>\n<li>Social marketing.</li>\n<li>Collections.</li>\n<li>Financial services (high-risk lending, payday loans, debt consolidation, student-loan forgiveness, credit repair, tax relief).</li>\n<li>Third-party insurance (car, health) when marketed cold.</li>\n<li>Gambling, casino, bingo, sweepstakes, free prizes.</li>\n<li>Investment opportunities, lead generation, recruiting, commission programs.</li>\n<li>Illicit substances, get-rich-quick, work-from-home, deceptive marketing.</li>\n<li>SHAFT — Sex, Hate, Alcohol, Firearms, Tobacco.</li>\n<li>Cannabis.</li>\n<li>Phishing, fraud, scams.</li>\n</ul>\n<p>Including prohibited content can flag your account for fraud. Repeat or serious offences = suspension or cancellation.</p>\n<h2>Snowshoeing — banned</h2>\n<p>Using multiple numbers to bypass throughput limits (\"snowshoeing\") is forbidden by carriers. If you need higher throughput:</p>\n<ul>\n<li>Increase your TCR-approved throughput via vetting.</li>\n<li>Open a Sales ticket for a justified higher limit.</li>\n</ul>\n<p>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.</p>\n<h2>Volume cadence</h2>\n<p>Even with opt-in, 4 messages/month per recipient is a healthy ceiling for marketing. Past that, opt-out rates climb sharply.</p>\n<h2>Character limits and segments</h2>\n<p>| Encoding | Single-segment limit | Multi-segment chunk size |\n|---|---|---|\n| <strong>GSM-7</strong> | 160 chars | 153 chars/segment (UDH eats 7) |\n| <strong>UCS-2 / Unicode</strong> | 70 chars | 67 chars/segment (UDH eats 3) |</p>\n<p>A single Unicode character (like <code>♥</code>) flips the entire message to Unicode encoding — drops your per-segment limit from 160 to 70.</p>\n<ul>\n<li>Max 1600 chars total per message body.</li>\n<li>Max 5 segments — some carriers cap lower.</li>\n<li>Whitespace counts as a character.</li>\n<li>Don't copy/paste from rich-text editors — invisible non-GSM characters cause unexpected segmentation.</li>\n</ul>\n<p>You're billed <strong>per segment</strong>, in both directions. SignalWire recombines inbound multi-segment messages into one logical record.</p>\n<h2>Checking your encoding</h2>\n<p>In the SignalWire portal, click any message record → <strong>Message Encoding Details</strong>. Shows segments, encoding, per-character box (blue UDH headers, pink for emoji/Unicode triggers), and final billing.</p>\n<h2>What to do if flagged as spam</h2>\n<ol>\n<li><strong>Audit your traffic.</strong> Are you using opt-in/opt-out, identifying your brand, full URLs, no prohibited content?</li>\n<li><strong>Verify TCR registration</strong> (10DLC) or <strong>toll-free verification</strong> is approved for your use case.</li>\n<li><strong>Confirm the numbers</strong> sending the flagged content are assigned to the right campaign.</li>\n<li><strong>Open a SignalWire Support ticket</strong> with the message SID. Their team can investigate carrier-side.</li>\n</ol>\n<h2>Why bother? — open and response rates</h2>\n<p>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.</p>\n<h2>Anti-patterns</h2>\n<ul>\n<li>Sending the opt-in confirmation 10 minutes later — CTIA expects it immediately.</li>\n<li>Skipping STOP in non-marketing messages \"because the user already opted in\" — every message needs it.</li>\n<li>Sending marketing under an appointment-reminder campaign — the carriers cross-check content vs use case.</li>\n<li>Sharing one TCR campaign across multiple unrelated use cases (instead of using <strong>Mixed</strong> intentionally) — flagged.</li>\n<li>Using emojis casually — flips to Unicode, drops segment limit, doubles your cost.</li>\n<li>Manually copying from Word or Google Docs into the API — smart-quote and ellipsis characters force Unicode.</li>\n</ul>\n<h2>See also</h2>\n<ul>\n<li><a href=\"/topic/a2p-10dlc-campaign-registry\">A2P 10DLC Campaign Registry</a></li>\n<li><a href=\"/topic/toll-free-and-hosted-messaging\">Toll-free and hosted messaging</a></li>\n</ul>\n"}