Install
openclaw skills install sms-best-practicesProvides SMS compliance, formatting, and delivery best practices for the Sendly API. Covers TCPA compliance, quiet hours, opt-out handling, E.164 phone formatting, message segmentation, and carrier verification. Applies when building SMS features that must be compliant and deliverable.
openclaw skills install sms-best-practicesAlways use E.164 format: +{country_code}{number} with no spaces, dashes, or parentheses.
| Input | E.164 | Valid? |
|---|---|---|
| (415) 555-1234 | +14155551234 | After formatting |
| 415-555-1234 | +14155551234 | After formatting |
| +14155551234 | +14155551234 | Yes |
| 4155551234 | +14155551234 | Need country code |
transactional: OTP codes, order confirmations, appointment reminders, account alerts, shipping updates. Allowed 24/7. The recipient has an existing relationship with the sender.
marketing: Promotions, sales, newsletters, product announcements. Subject to:
Misclassifying marketing as transactional violates TCPA and can result in fines up to $1,500 per message.
Sendly automatically handles opt-outs. When a recipient replies STOP, UNSUBSCRIBE, CANCEL, END, or QUIT:
opted_out erroropt_out.created webhook event firesDo not attempt to send to opted-out numbers. Check message.status for opted_out errors.
Opt-out status is checked automatically when sending — the API returns an opted_out error if the recipient has unsubscribed.
Marketing messages are blocked during quiet hours (9pm–8am recipient local time). Sendly enforces this automatically — the API returns quiet_hours_violation if you attempt a marketing send during quiet hours.
Transactional messages are exempt from quiet hours.
SMS messages are limited to 160 characters (GSM-7 encoding) or 70 characters (UCS-2 for emoji/Unicode). Longer messages are split into segments:
| Encoding | Single segment | Multi-segment per part |
|---|---|---|
| GSM-7 (ASCII) | 160 chars | 153 chars |
| UCS-2 (emoji/Unicode) | 70 chars | 67 chars |
Each segment costs credits separately. Keep messages concise.
Sendly blocks messages containing prohibited content categories (SHAFT):
Messages flagged by SHAFT filtering return content_violation error.
Check balance: GET /api/v1/credits
To send SMS in the US/CA, your toll-free number must be verified by carriers. This requires:
Verification takes 1–5 business days. Use sandbox mode (sk_test_* keys) while waiting.
| Error | Cause | Fix |
|---|---|---|
invalid_phone_number | Not E.164 format | Format as +{country}{number} |
insufficient_credits | Balance too low | Purchase credits at sendly.live |
quiet_hours_violation | Marketing during 9pm–8am | Use transactional type or wait |
opted_out | Recipient unsubscribed | Do not retry — respect opt-out |
content_violation | SHAFT filter triggered | Revise message content |
not_verified | Number not carrier-verified | Complete verification at sendly.live |