agentsclimarketplace

Sms best practices

Skill SendlyHQ/sendly-skills/skills/sms-best-practices

Provides 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.From its SKILL.md

Install
npx -y skills add SendlyHQ/sendly-skills --skill sms-best-practices

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

3.9 KB, 923 tokens by cl100k_base, as published. Nobody here has run it

SMS Best Practices

Phone number formatting

Always use E.164 format: +{country_code}{number} with no spaces, dashes, or parentheses.

InputE.164Valid?
(415) 555-1234+14155551234After formatting
415-555-1234+14155551234After formatting
+14155551234+14155551234Yes
4155551234+14155551234Need country code

Message types and compliance

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:

  • Quiet hours: 9pm–8am in the recipient's local timezone
  • Prior express written consent required (TCPA)
  • Must include opt-out instructions

Misclassifying marketing as transactional violates TCPA and can result in fines up to $1,500 per message.

Opt-out handling

Sendly automatically handles opt-outs. When a recipient replies STOP, UNSUBSCRIBE, CANCEL, END, or QUIT:

  • The number is added to the opt-out list
  • Future sends to that number return opted_out error
  • An opt_out.created webhook event fires

Do 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.

Quiet hours

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.

Message segmentation

SMS messages are limited to 160 characters (GSM-7 encoding) or 70 characters (UCS-2 for emoji/Unicode). Longer messages are split into segments:

EncodingSingle segmentMulti-segment per part
GSM-7 (ASCII)160 chars153 chars
UCS-2 (emoji/Unicode)70 chars67 chars

Each segment costs credits separately. Keep messages concise.

SHAFT content filtering

Sendly blocks messages containing prohibited content categories (SHAFT):

  • Sex/adult content
  • Hate speech
  • Alcohol
  • Firearms
  • Tobacco/drugs

Messages flagged by SHAFT filtering return content_violation error.

Credit costs

  • US/CA: 2 credits ($0.02) per message segment
  • International: varies by destination (see country requirements)
  • 1 credit = $0.01

Check balance: GET /api/v1/credits

Carrier verification

To send SMS in the US/CA, your toll-free number must be verified by carriers. This requires:

  • Business name and address
  • Website URL (use hosted business pages if you don't have one)
  • Use case description
  • Sample messages

Verification takes 1–5 business days. Use sandbox mode (sk_test_* keys) while waiting.

Common errors

ErrorCauseFix
invalid_phone_numberNot E.164 formatFormat as +{country}{number}
insufficient_creditsBalance too lowPurchase credits at sendly.live
quiet_hours_violationMarketing during 9pm–8amUse transactional type or wait
opted_outRecipient unsubscribedDo not retry — respect opt-out
content_violationSHAFT filter triggeredRevise message content
not_verifiedNumber not carrier-verifiedComplete verification at sendly.live

Full reference

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,851. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.