Skip to main content

SMS Campaigns

SMS is the highest-urgency channel in Joryio: short, immediate, and read within minutes. It works best for time-sensitive messages - flash sales, back-in-stock alerts, order and delivery updates, appointment reminders - and as the fast follow-up step in a journey when an email goes unopened.

Sending numbers and provider accounts are connected for you during onboarding - there is nothing to configure before your first campaign. If you need an additional number or sender, contact your Joryio administrator.

Creating an SMS campaign

SMS campaigns use the same six-step wizard as every other channel - open Campaigns → New Campaign and pick SMS as the channel. See Creating Campaigns for the wizard itself; below is what's specific to SMS.

Sender selection (Compose step)

  • Send from account - shown only when your organization has more than one SMS provider account. Each option reads Name (provider) and your default account is preselected. With a single account there's no picker, just an informational hint.
  • Send from number - pick which number the message goes out from, or leave Default number to use your workspace default.

The sending number matters for compliance: each number has its own opt-out group, so a contact who texted STOP to one number can still receive messages from another. The live preview header shows the resolved sender so you can see exactly what recipients will see.

Message (Compose step)

The compose step is a two-column layout: the message editor on the left, a live phone preview (switchable between iOS, Android, and plain-text views) on the right.

  • Message - a plain-text body. Use AI write to draft copy in your brand voice, and + Personalize to insert personalization variables from a typed picker.
  • Character and segment counter - live count under the editor: characters, billable segments, and the detected encoding (GSM-7 or Unicode (incl. emoji)). If the message crosses into multiple segments, an inline notice tells you how many segments each recipient will be billed as.
  • Shorten & track links - on by default. Every URL in the body is replaced at send time with a short, click-tracked link. Turn it off to send the original links untouched (no shortening, no click tracking).
  • Send test SMS - appears once the campaign has been saved; see Testing below.

Variants (A/B testing)

SMS campaigns support the same variant builder as email - add variants, each with its own message body, and let the test pick a winner. Each variant keeps its own character/segment count. See A/B Testing.

Audience

Choose Send to everyone or build a filtered audience with the filter builder. The audience preview counts reachable recipients for SMS specifically - contacts must have a phone number, and the per-channel subscription gate is applied to the count.

Under Sending options, the subscription preference defaults to Subscribed (opted-out users are excluded). Confirmed narrows it to double-opt-in contacts. The third option, which includes unsubscribed users, is for transactional messages only and requires an explicit confirmation acknowledging the compliance risks.

Delivery

All four delivery modes are available for SMS:

  • Send now - goes out as soon as you publish.
  • Schedule - a specific date and time, in a fixed timezone or each recipient's local time.
  • Recurring - a repeating schedule (daily/weekly/…), also supporting recipient-local time.
  • Intelligent - Send-Time Optimization picks each recipient's best hour inside a delivery window.

Quiet windows and frequency caps apply on top of whichever mode you pick - see Compliance and delivery gates.

Conversion and Summary

Define primary and secondary conversion events on the Conversion step, then review everything on the Summary step before publishing. Conversion tracking works the same for SMS as for every other channel.

Writing the message

Personalization

SMS bodies support full Liquid templating - the same syntax as email:

Hi {{ user.firstName }}, your order {{ event.orderId }} has shipped!

The + Personalize picker inserts variables for you, so you don't need to remember paths. The full list of variables, filters, and defaults is in the Liquid Reference.

Keep personalized values short - a long product name can push a one-segment message into two.

Characters, segments, and billing

Carriers split SMS into segments, and each segment is billed separately:

EncodingSingle messagePer segment when longer
GSM-7 (plain Latin text)160 characters153 characters
Unicode (emoji, Hebrew, Arabic, …)70 characters67 characters

A single character outside the GSM-7 set - one emoji, one Hebrew letter - switches the whole message to Unicode limits. The composer detects this live and shows the encoding next to the counter, so there are no surprises at billing time.

With Shorten & track links on (the default), every URL in the body is replaced at send time with a short link of the form /s/<code>. This does two things:

  • Keeps the message short - a long product URL becomes a fixed-length short link, protecting your segment budget.
  • Tracks clicks - opening the short link records a click for campaign analytics and revenue attribution, then redirects to the original URL.

Short links are served from your custom tracking domain when one is configured - recipients see your brand in the link, not a generic domain. Links to your own unsubscribe/preference pages are also shortened but redirect directly without recording a click.

You can also insert a wallet pass install link via the Personalize picker - it resolves to a short link that adds your pass to Apple or Google Wallet. See Wallet Passes.

Opt-out language

SMS has no unsubscribe link - the {{ unsubscribe_url }} Liquid variable is an email feature. On SMS, the opt-out is the reply keyword: recipients text STOP (or a localized equivalent) and Joryio records the opt-out automatically. Include clear opt-out wording in promotional messages:

Flash sale: 30% off everything today. Shop: https://example.com/sale
Reply STOP to opt out.

Note that STOP only works on two-way phone numbers. Alphanumeric sender names (like Acme) can't receive replies - if you send from one, offer an alternative opt-out such as a preferences-page link.

Compliance and delivery gates

Every SMS send passes through the same guardrails, regardless of who authored the campaign:

  • STOP / START keywords - replying STOP opts the contact out of the sending number; STOPALL opts them out of every SMS number; START re-subscribes. Keyword matching is case- and punctuation-tolerant and understands localized keywords (Hebrew, Spanish, French, and more). Full tables and scoping rules: Subscription Management → Keywords.
  • Opt-out enforcement at send - before each message, Joryio checks the recipient's opt-out status for the sending number's group. Opted-out recipients are skipped. The check fails closed: if it can't be verified, the message is not sent.
  • Quiet time - SMS has its own quiet windows (late-night sends are delayed or skipped per your workspace policy). See Quiet Time.
  • Frequency capping - workspace-level touching rules cap how many SMS each contact can receive per day/week/month. See Frequency Capping.
  • Send volume and rate limits - cap a campaign's total volume or throttle its send rate (shared or per-channel). See Send Volume & Rate Limits.

Testing your message

Once the campaign has been saved (after the first step transition auto-saves it as a draft), a Send test SMS button appears under the composer. Enter a phone number and Joryio sends the current composer content - including your live sender account/number selection and the link-shortening setting - so what you receive is exactly what recipients will get.

Test sends are the fastest way to check segment count on a real device, confirm the sender displays correctly, and click through your shortened links.

Analytics

SMS campaigns report delivery outcomes, not just that a message left the system:

  • message.sent - the message was handed to the provider.
  • message.delivered - the carrier confirmed delivery to the handset.
  • message.failed - the message could not be delivered (with the provider error code).
  • message.clicked - a recipient opened one of your shortened links.

These roll up on the campaign detail page alongside conversions and revenue. SMS has no open tracking - delivery and clicks are the engagement signals. See Campaign Analytics.