Install
openclaw skills install sms-optimizerCraft compelling, policy-safe SMS messages for flash sales, order updates, and retention campaigns that drive clicks without triggering opt-outs.
openclaw skills install sms-optimizerSMS marketing delivers open rates above 90% and click-through rates that dwarf email, but ecommerce brands consistently struggle with two problems: writing messages that feel valuable rather than spammy within the 160-character constraint, and staying compliant with TCPA, CTIA, and carrier filtering rules that can get your number blacklisted. SMS Optimizer solves both by generating high-converting SMS copy that respects character limits, includes required compliance elements, and uses proven psychological triggers calibrated to your specific campaign type.
| Decision | Strong | Acceptable | Weak |
|---|---|---|---|
| Message opening | Personalized hook referencing behavior or segment | Benefit-first generic opener | Brand name first with no hook |
| Character allocation | Hook 60 + offer 50 + CTA 20 + link/footer reserved | Hook 80 + offer 50 + link/footer reserved | Entire 160 used for copy, no room for link or footer |
| Urgency language | Specific deadline ("ends midnight EST") | Relative urgency ("today only") | Vague urgency ("limited time") or no urgency |
| CTA style | Single clear action verb ("Shop now", "Claim it") | Two-option CTA ("Shop or reply STOP") | No CTA or passive phrasing |
| Emoji usage | 1–2 emojis that match brand voice and reinforce message | 3 emojis, non-redundant | 4+ emojis or emojis duplicating words already written |
| Compliance footer | Platform-native opt-out via append setting | Manual "Reply STOP to opt out" at end | No opt-out language or opt-out buried mid-message |
| Send timing | 10am–12pm or 6pm–8pm subscriber local time | 9am–10am or 5pm–6pm local | Before 9am, after 9pm, or platform default without review |
| Link domain | Branded short domain (e.g. brand.co/spring) | Trusted full URL | bit.ly, tinyurl, or other generic shorteners |
Collect all required inputs before writing a single character: campaign type, product or offer details, SMS platform, brand voice preference, and the link destination. If any required input is missing, ask before proceeding. Incomplete inputs produce copy that fails compliance checks or requires full rewrites.
Before writing copy, calculate available characters:
Write the primary message using the character budget from Step 2. Apply the following structure:
[LINK] notation so the user can see where the tracking URL fitsWrite a second version of the same message with a materially different hook angle. Do not just swap one word — change the psychological approach entirely (e.g., primary uses urgency, variant uses social proof; or primary uses discount framing, variant uses curiosity framing). Both variants must fit the character budget.
Before presenting output, check every compliance item in the SMS Quality Checklist (assets/sms-quality-checklist.md). Pay particular attention to:
Present the full output package in this structure:
For multi-message sequences (cart abandonment, welcome series, win-back), deliver messages in send order with recommended delay intervals between each. Label each message with its position (Message 1 of 3) and its behavioral trigger (e.g., "Sends 1 hour after cart abandonment if no purchase").
Inputs:
Character budget:
Primary Message (134 characters):
Spring drop is here 🌸 30% off skincare bundles ends midnight — grab yours before it's gone [LINK]
Character count: 97 + link = 120 ✓ (17 buffer for personalization prefix if added)
A/B Variant (curiosity hook):
Your skin's going to thank you for this one 💚 SPRING30 = 30% off bundles today only [LINK]
Character count: 88 + link = 111 ✓
Character Budget Breakdown:
Compliance Checklist:
Send Timing Recommendation: Tuesday–Thursday, 10am–12pm subscriber local time for highest open rates on promotional sends.
Inputs:
Message 1 of 3 — 1 hour after abandonment (reminder only, no discount):
You left something behind. Your cart is saved and ready when you are. [LINK]
Character count: 68 + link = 91 ✓ Note: No discount in Message 1 — preserves margin for subscribers who convert without incentive.
Message 2 of 3 — 6 hours after abandonment (soft incentive):
Still thinking it over? Use SAVE10 for 10% off your order — good for the next 24 hours. [LINK]
Character count: 88 + link = 111 ✓
Message 3 of 3 — 22 hours after abandonment (urgency + final offer):
Last call: SAVE10 expires in 2 hours. Don't leave 10% off on the table. [LINK]
Character count: 72 + link = 95 ✓
Cadence Recommendation:
Including the compliance footer in the character count — Postscript and Attentive append footers automatically. If you write "Reply STOP to opt out" in your message body AND the platform appends it, your subscribers receive duplicate opt-out language and the message splits across two segments.
Using bit.ly or tinyurl links — Generic URL shorteners are flagged by carrier filtering algorithms and dramatically reduce deliverability. Use branded short domains or the platform's built-in link shortener.
Writing urgency without specifics — "Limited time offer" is a spam trigger phrase in carrier filtering systems. "Ends tonight at 11:59pm EST" is specific, credible, and passes filtering.
Sending transactional messages with promotional angles — Shipping notifications with a discount code appended violate TCPA transactional message rules. Keep transactional and promotional content in separate sends with separate consent paths.
Ignoring subscriber local time — Sending at 8am platform time when half your list is in PST means sending at 5am. Most SMS platforms support send-time optimization or time zone bucketing — use it.
Not reserving characters for the link — Writing exactly 160 characters of copy with no room for the tracking link forces the platform to either truncate your message or create a second segment, doubling cost.
Using ALL CAPS for urgency — ALL CAPS is one of the most reliable carrier filtering triggers. Use italics equivalents ("flash sale"), exclamation points sparingly, or time-specificity to convey urgency instead.
Testing only one variant — A single copy test wastes send volume. Always prepare two variants with materially different hooks. Even a 5% CTR improvement on a 10,000-subscriber list compounds significantly over an annual send calendar.
Forgetting suppression lists — Sending promotional SMS to subscribers who already purchased during the same campaign window is the fastest way to drive opt-outs. Always configure active-purchaser suppression before campaign launch.
Writing for desktop reading — SMS is consumed on mobile lock screens in 2–3 seconds. Long sentences, complex punctuation, and multi-clause offers all hurt mobile readability. Write for a lock screen glance, not a full read.
references/output-template.md — Standard output format for all SMS Optimizer deliverablesreferences/compliance-guide.md — TCPA, CTIA, and platform-specific compliance requirements by campaign typereferences/carrier-filtering-guide.md — Known spam trigger words, prohibited link domains, and carrier filtering avoidance techniquesassets/sms-quality-checklist.md — 40-point quality checklist covering copy, compliance, character budget, and deliverability