# SMS Desk > Check and fix one SMS flow or campaign send before it goes out. The browser measures every > message the way carriers bill it and checks it against a fixed rule set, free and without an > account; a paid review rewrites what needs it, or a paid draft writes a flow from a brief, and > every text either lane writes is measured and checked again in the browser. App: https://sms-desk.skillsafe.ai/ API tutorial: https://sms-desk.skillsafe.ai/api.html Derived from the agent skill @coreyhaines31/sms (https://skillsafe.ai/skill/@coreyhaines31/sms), coreyhaines31/marketingskills, MIT licence. Model: gpt-terra (the balanced GPT tier on SkillSafe). ## What the free check computes - Encoding: GSM-7 when every character is in the GSM 03.38 default alphabet or its extension table, otherwise UCS-2. The character table matches the one in Twilio's open-source segment calculator (capital C-cedilla at position 0x09, as Twilio treats it; the Unicode mapping file has the small letter there). - Segments: GSM-7 holds 160 septets in one segment and 153 per segment once split; the ten extension characters (form feed, ^ { } \ [ ~ ] | and the euro sign) cost two septets. UCS-2 holds 70 code units in one segment and 67 per segment once split; a character outside the Basic Multilingual Plane, such as most emoji, costs two. Segments are filled one whole grapheme cluster at a time, so no character is split across a boundary. - Merge tags ({{ first_name }}, {first_name}, {{ person.first_name|default:'there' }}, Braze {{${first_name}}}, Mailchimp *|FNAME|*, %FIRSTNAME%, [[first_name]]) are filled at an assumed width before counting (first_name 12, link-type tags 23, others 15, or your own widths). The worst case assumes a merged name carries one letter outside GSM-7. - Lookalike swaps: curly quotes, en and em dashes, the ellipsis, odd spaces, bullets and common accented letters outside GSM-7 have one-click GSM-7 replacements. - Rules, each with its source: brand named; opt-out instruction; an opt-in confirmation that carries help or contact, frequency and the message-and-data-rates notice; HELP and STOP replies; public link shorteners; more than one link; restricted (SHAFT) content; emoji and all-caps words; the segment budget; the 1,600-character body limit; scheduled marketing sends against 8 a.m. to 9 p.m. and the stricter 8 p.m. state windows in every selected time zone; more than three marketing messages in 24 hours; the disclosed monthly frequency; a first abandoned-cart text that already carries a discount; placeholders left in; an offer inside a message filed as transactional (treated as marketing); a scheduled time or a delay that cannot be read (never silently ignored). - Input: [Label | delay | kind] headers, --- separators, blank-line blocks (one message with paragraphs unless the blocks look like separate texts), or a CSV/TSV/semicolon export with a header row (the text column is found by name; the page says which column it read). Scheduled times: 2026-10-06 18:30 ET, ISO 8601 with an offset, or 10/06/2026 6:30 PM CT. - Exports: the check as Markdown and a messages CSV that reads back in; each export says PARTIAL in its name and body when the engine did not read the whole paste. Every message has its own copy button. - Cost at your own per-segment price, per recipient and for the list. These are rule checks, not legal advice. A clean check does not make a program compliant. Send marketing texts only to people who gave prior express written consent to receive them; a purchase or an email sign-up is not SMS consent. ## Paid lanes (one system prompt, routed on `task`) Input: `{ "task": "review" | "draft", "facts": "", "question": "optional" }`. - `review`: facts are the free check's output (messages with their measured encoding and segments, every finding with id, severity and rule, the verdict floor). The reply gives a verdict (ready, fix_first or blocked, never looser than the floor), per-message issues and full rewrites with the segments and encoding aimed for, notes across the flow, suggested registration samples, a HELP reply, a STOP reply and a summary. - `draft`: facts are a brief (brand, business, flow type, audience, offer, allowed merge tags, jurisdictions, segment budget, GSM-7 only, disclosed frequency). The reply gives two to five messages with delays, an opt-in disclosure, HELP and STOP replies, what to test and what the marketer must supply. The page re-measures and re-lints every rewrite and drafted message, checks that every block and warn finding was answered, that every marketing message carries an opt-out, and that a draft has its opt-in disclosure and HELP and STOP replies, and shows each disagreement. Applying rewrites skips any rewrite that still fails a rule and keeps the paste's own format. A direct API caller receives the raw reply without that reconciliation. ## Sources the rules rest on (read 2026-09-28) - GSM 03.38 mapping: https://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - Twilio, SMS character limit: https://www.twilio.com/docs/glossary/what-sms-character-limit - Twilio, UCS-2: https://www.twilio.com/docs/glossary/what-is-ucs-2-character-encoding - Twilio, GSM-7: https://www.twilio.com/docs/glossary/what-is-gsm-7-character-encoding - Twilio segment calculator: https://github.com/TwilioDevEd/message-segment-calculator - Twilio Smart Encoding characters: https://www.twilio.com/docs/messaging/services/smart-encoding-char-list - 47 CFR 64.1200 (hours; revoking consent; the one-time confirmation text): https://www.ecfr.gov/current/title-47/chapter-I/subchapter-B/part-64/subpart-L/section-64.1200 - Florida Stat. 501.616: https://www.flsenate.gov/Laws/Statutes/2026/501.616 - Oklahoma 15 O.S. 775C.4: https://www.oscn.net/applications/oscn/DeliverDocument.asp?CiteID=492651 - Maryland Stop the Spam Calls Act (Ch. 413 of 2023): https://mgaleg.maryland.gov/2023RS/chapters_noln/Ch_413_sb0090E.pdf - CTIA Messaging Principles and Best Practices (May 2023): https://api.ctia.org/wp-content/uploads/2023/05/230523-CTIA-Messaging-Principles-and-Best-Practices-FINAL.pdf - CTIA Short Code Monitoring Handbook v1.9: https://api.ctia.org/wp-content/uploads/2024/01/CTIA-Short-Code-Monitoring-Handbook-v1.9-FINAL.pdf - T-Mobile Code of Conduct (public URL shorteners): https://assets.ctfassets.net/up8h5u10ttz3/3X151LU5HQDFAvqHVdKva3/365400814daacf73fa64fa054c6843a7/T-Mobile_2020_11.pdf - CASL: https://laws-lois.justice.gc.ca/eng/acts/E-1.6/FullText.html and SOR/2012-36: https://laws-lois.justice.gc.ca/eng/regulations/SOR-2012-36/FullText.html - Spam Act 2003 (Australia): https://www.legislation.gov.au/C2004A01214/latest/text - UK PECR regulation 22: https://www.legislation.gov.uk/uksi/2003/2426/regulation/22 Whether the Florida, Oklahoma and Maryland telephone-solicitation laws reach a given text program is not decided by the app; it flags the window and the frequency and names the statutes.