SMS Optimizer
SMS 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.
Solves
- 1. Copy feels spammy or low-value — messages triggering opt-outs at above 3% per send because they lead with discount pressure rather than genuine value
- Carrier filtering blocking delivery — messages using known spam triggers (ALL CAPS, excessive punctuation, prohibited shorteners) that get flagged before reaching subscribers
- Character count overruns — copy that exceeds 160 characters once compliance footer and tracking link are included, causing messages to split into two billable segments
- Compliance gaps — missing opt-out language, missing business identification, or transactional messages that include promotional angles prohibited under TCPA
- Weak A/B test coverage — sending only one copy variant when small hook changes can shift click-through by 20–40%
- Platform mismatch — copy that doesn't account for platform-specific footer formatting in Postscript, Attentive, or Klaviyo SMS
- Sequence pacing errors — sending too frequently or at sub-optimal times, burning subscriber goodwill before the customer lifecycle matures
Quick Reference
| 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 |
Workflow
Step 1 — Gather campaign inputs
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.
Step 2 — Calculate character budget
Before writing copy, calculate available characters:
- - Total budget: 160 characters (single segment)
- Reserve for tracking link placeholder: 23 characters (standard short URL length)
- Reserve for platform compliance footer: check platform-specific footer length from the Compliance Guide reference
- Available for copy: 160 – link – footer
- If budget is under 70 characters, flag to the user that the message will need a multi-segment format
Step 3 — Draft primary message
Write the primary message using the character budget from Step 2. Apply the following structure:
- - Hook (first 10–15 characters): behavior-triggered or benefit-first opening
- Offer (middle section): specific product, discount, or action — never vague
- CTA (last 10–15 characters before link): single action verb, present tense
- Link placeholder:
[LINK] notation so the user can see where the tracking URL fits - Do NOT include the compliance footer in the draft — this is appended automatically by the platform
Step 4 — Draft A/B variant
Write 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.
Step 5 — Run compliance check
Before presenting output, check every compliance item in the SMS Quality Checklist (assets/sms-quality-checklist.md). Pay particular attention to:
- - Transactional vs. promotional classification (mixing these violates TCPA)
- Business identification presence
- No prohibited claim language for the product category
- Platform-specific opt-out format matches user's stated platform
Step 6 — Assemble output
Present the full output package in this structure:
- 1. Primary Message with exact character count
- A/B Variant with exact character count
- Character Budget Breakdown (hook / offer / CTA / link / footer allocation)
- Compliance Checklist confirmation with any flags raised
- Send Timing Recommendation for the campaign type
- If a sequence was requested: Cadence Recommendation with intervals and priority ordering
Step 7 — Deliver sequence (if applicable)
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").
Examples
Example 1 — Flash sale SMS
Inputs:
- - Campaign type: Flash sale
- Offer: 30% off all skincare bundles with code SPRING30, free shipping over $50, ends midnight EST
- Platform: Postscript
- Brand voice: Friendly and casual, 1–2 emojis max
- Link: ourstore.com/spring-sale
Character budget:
- - Total: 160
- Link placeholder: 23 (Postscript standard short link)
- Postscript footer: appended automatically (not counted in message body)
- Available for copy: 137 characters
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:
- - Hook: 21 characters ("Spring drop is here 🌸")
- Offer: 55 characters ("30% off skincare bundles ends midnight")
- CTA + link setup: 21 characters ("grab yours before it's gone")
- Link placeholder: 23 characters
- Footer: platform-appended (not in body count)
- Total body: 120/160 ✓
Compliance Checklist:
- - ✓ Business identified (covered by Postscript sender profile — confirm sender name is set)
- ✓ Opt-out language: platform-appended automatically
- ✓ No prohibited discount claim language for skincare
- ✓ No generic shortener domain
- ✓ Under 160 characters (single segment)
- ✓ Promotional classification: correct for flash sale
Send Timing Recommendation: Tuesday–Thursday, 10am–12pm subscriber local time for highest open rates on promotional sends.
Example 2 — Abandoned cart recovery sequence
Inputs:
- - Campaign type: Abandoned cart recovery (3-message sequence)
- Offer: Items in cart, 10% off first order code SAVE10 if purchased within 24 hours
- Platform: Klaviyo SMS
- Brand voice: Minimal, no emoji, professional
- Link: checkout URL (dynamic, inserted by platform)
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:
- - Message 1: 1 hour post-abandonment
- Message 2: 6 hours post-abandonment (only if no purchase after Message 1)
- Message 3: 22 hours post-abandonment (only if no purchase after Message 2)
- Stop sequence immediately on purchase — configure suppression list in Klaviyo
Common Mistakes
- 1. 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.
- 2. 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.
- 3. 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.
- 4. 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.
- 5. 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.
- 6. 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.
- 7. 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.
- 8. 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.
- 9. 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.
- 10. 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.
Resources
- -
references/output-template.md — Standard output format for all SMS Optimizer deliverables - INLINECODE2 — TCPA, CTIA, and platform-specific compliance requirements by campaign type
- INLINECODE3 — Known spam trigger words, prohibited link domains, and carrier filtering avoidance techniques
- INLINECODE4 — 40-point quality checklist covering copy, compliance, character budget, and deliverability
SMS 优化器
短信营销的打开率超过90%,点击率远超电子邮件,但电商品牌始终面临两个难题:在160个字符的限制内写出有价值而非垃圾信息的内容,以及遵守TCPA、CTIA和运营商过滤规则(否则可能导致号码被列入黑名单)。SMS优化器通过生成高转化率的短信文案来解决这两个问题,该文案尊重字符限制,包含必要的合规要素,并运用经过验证的心理触发机制,且可根据您的特定营销活动类型进行调整。
解决的问题
- 1. 文案感觉像垃圾信息或价值低 — 每次发送因以折扣压力而非真正价值开头,导致退订率超过3%的消息
- 运营商过滤阻止送达 — 使用已知垃圾信息触发词(全大写、过多标点、禁用短链接)的消息在到达订阅者前被标记
- 字符数超限 — 在包含合规页脚和跟踪链接后,文案超过160个字符,导致消息分成两个计费段
- 合规漏洞 — 缺少退订说明、缺少企业标识,或交易类消息包含TCPA禁止的促销角度
- A/B测试覆盖不足 — 仅发送一个文案变体,而微小的钩子变化即可使点击率提升20–40%
- 平台不匹配 — 文案未考虑Postscript、Attentive或Klaviyo短信中特定平台的页脚格式
- 序列节奏错误 — 发送过于频繁或时机不佳,在客户生命周期成熟前消耗订阅者好感
快速参考
| 决策 | 强 | 可接受 | 弱 |
|---|
| 消息开头 | 引用行为或分组的个性化钩子 | 利益优先的通用开场 | 先写品牌名,无钩子 |
| 字符分配 |
钩子60 + 优惠50 + 行动号召20 + 链接/页脚预留 | 钩子80 + 优惠50 + 链接/页脚预留 | 全部160字符用于文案,无链接或页脚空间 |
|
紧迫感语言 | 具体截止时间(美国东部时间午夜结束) | 相对紧迫感(仅限今天) | 模糊紧迫感(限时)或无紧迫感 |
|
行动号召风格 | 单一明确动作动词(立即购买、领取) | 双选项行动号召(购买或回复STOP) | 无行动号召或被动措辞 |
|
表情符号使用 | 1–2个符合品牌声音并强化信息的表情符号 | 3个表情符号,无冗余 | 4个以上表情符号,或表情符号重复已写文字 |
|
合规页脚 | 通过附加设置实现平台原生退订 | 末尾手动添加回复STOP退订 | 无退订说明,或退订说明埋藏在消息中间 |
|
发送时机 | 订阅者当地时间上午10点–12点或下午6点–8点 | 当地时间上午9点–10点或下午5点–6点 | 当地时间上午9点前、晚上9点后,或未经审核的平台默认时间 |
|
链接域名 | 品牌短域名(如 brand.co/spring) | 可信完整URL | bit.ly、tinyurl或其他通用短链接 |
工作流程
第1步 — 收集营销活动输入
在写任何字符前收集所有必要输入:营销活动类型、产品或优惠详情、短信平台、品牌声音偏好以及链接目标。如果缺少任何必要输入,请先询问再继续。不完整的输入会导致文案无法通过合规检查或需要完全重写。
第2步 — 计算字符预算
在写文案前,计算可用字符:
- - 总预算:160个字符(单段)
- 跟踪链接占位符预留:23个字符(标准短URL长度)
- 平台合规页脚预留:从合规指南参考中检查特定平台的页脚长度
- 文案可用字符:160 – 链接 – 页脚
- 如果预算低于70个字符,向用户标记该消息将需要多段格式
第3步 — 起草主要消息
使用第2步的字符预算起草主要消息。应用以下结构:
- - 钩子(前10–15个字符):行为触发或利益优先的开场
- 优惠(中间部分):具体产品、折扣或行动 — 绝不模糊
- 行动号召(链接前最后10–15个字符):单个动作动词,现在时态
- 链接占位符:[LINK] 标记,以便用户看到跟踪URL的位置
- 不要在草稿中包含合规页脚 — 这由平台自动附加
第4步 — 起草A/B变体
为同一消息编写第二个版本,使用截然不同的钩子角度。不要只替换一个词 — 完全改变心理方法(例如,主要版本使用紧迫感,变体使用社会证明;或主要版本使用折扣框架,变体使用好奇心框架)。两个变体都必须符合字符预算。
第5步 — 执行合规检查
在呈现输出前,检查SMS质量检查清单(assets/sms-quality-checklist.md)中的每一项合规项目。特别注意:
- - 交易类与促销类分类(混合违反TCPA)
- 企业标识是否存在
- 产品类别无禁止声明语言
- 特定平台的退订格式与用户声明的平台匹配
第6步 — 组装输出
按以下结构呈现完整输出包:
- 1. 主要消息及精确字符数
- A/B变体及精确字符数
- 字符预算分解(钩子/优惠/行动号召/链接/页脚分配)
- 合规检查清单确认及任何标记的问题
- 该营销活动类型的发送时机建议
- 如果请求了序列:节奏建议,包含间隔和优先级顺序
第7步 — 交付序列(如适用)
对于多消息序列(购物车放弃、欢迎系列、挽回系列),按发送顺序交付消息,并附上建议的延迟间隔。为每条消息标注其位置(消息1/3)及其行为触发条件(例如,购物车放弃后1小时发送,如未购买)。
示例
示例1 — 闪购短信
输入:
- - 营销活动类型:闪购
- 优惠:所有护肤套装30%折扣,使用代码SPRING30,满50美元免运费,美国东部时间午夜结束
- 平台:Postscript
- 品牌声音:友好且随意,最多1–2个表情符号
- 链接:ourstore.com/spring-sale
字符预算:
- - 总计:160
- 链接占位符:23(Postscript标准短链接)
- Postscript页脚:自动附加(不计入消息正文)
- 文案可用:137个字符
主要消息(134个字符):
春季新品到货啦🌸护肤套装30%折扣午夜结束——趁没抢完快来[LINK]
字符数:97 + 链接 = 120 ✓(如有个人化前缀,剩余17个字符缓冲)
A/B变体(好奇心钩子):
你的皮肤会感谢你的💚SPRING30 = 套装30%折扣仅限今天[LINK]
字符数:88 + 链接 = 111 ✓
字符预算分解:
- - 钩子:21个字符(春季新品到货啦🌸)
- 优惠:55个字符(护肤套装30%折扣午夜结束)
- 行动号召+链接设置:21个字符(趁没抢完快来)
- 链接占位符:23个字符
- 页脚:平台附加(不计入正文计数)
- 正文总计:120/160 ✓
合规检查清单:
- - ✓ 企业已标识(由Postscript发送者资料覆盖 — 确认发送者名称已设置)
- ✓ 退订说明:平台自动附加
- ✓ 护肤品类无禁止折扣声明语言
- ✓ 无通用短链接域名
- ✓ 低于160个字符(单段)
- ✓ 促销分类:闪购正确
发送时机建议: 周二至周四,订阅者当地时间上午10点–12点,促销发送打开率最高。
示例2 — 购物车放弃恢复序列
输入:
- - 营销活动类型:购物车放弃恢复(3条消息序列)
- 优惠:购物车中的商品,24小时内购买使用代码SAVE10享首单10%折扣
- 平台:Klaviyo短信
- 品牌声音:极简,无表情符号,专业
- 链接:结账URL(动态,由平台插入)
消息1/3 — 放弃后1小时(仅提醒,无折扣):
您有东西落下了。购物车已保存,随时等您回来。[LINK]
字符数:68 + 链接 = 91 ✓
注意:消息1中无折扣 — 为无需激励即可转化的订阅者保留利润空间。
消息2/3 — 放弃后6小时(温和激励):
还在考虑?使用SAVE10享订单10%折扣 — 未来24