You can use Iterable to send marketing and transactional SMS messages. SMS messages generally have high open rates, and you can use them to interact almost immediately with your audience.
This guide provides a high-level description of Iterable's SMS support.
In this article
- Setting up your project
- Sending SMS campaigns
- SMS segments
- SMS link shortening and click tracking
- SMS opt-out instructions
- Handling inbound SMS messages
-
Frequently asked questions
- Does Iterable provide phone number validation?
- Can I send SMS from an alphanumeric sender ID?
- Can I send images along with my text messages?
- Can I send videos, or other file types in my messages?
- What metrics can I use with SMS?
- Why would an SMS message bounce?
- How do contacts unsubscribe and subscribe?
Setting up your project
To get started with SMS, you'll need to work with your Iterable customer success manager. They'll ask you some important questions, such as:
- What kinds of messages will you be sending, when, and why?
- How many SMS and MMS messages do you plan to send, per day and per month?
- Will you send messages internationally?
- Do you have an existing SMS provider and/or phone number(s)?
- Will your SMS channel be outbound-only, or do you need to receive and manage replies?
- Where and how will users opt in to your SMS channel?
Once you've clarified key details, your customer success manager can help you set up your project to send SMS campaigns. This will take several steps:
- Select an SMS provider and set up your account (if you don't already have one).
- Set up a messaging service (Twilio) or messaging profile (Telnyx), using either long codes or short code(s), which includes registering your numbers nationally.
- Set up your messaging service or messaging profile as a sender in Iterable. Optionally, you can bind your sender to a message type for enhanced opt-out management.
- Add a phone number field for your contacts.
Depending on your campaign needs, there may be additional setup necessary.
Choosing an SMS provider
To send SMS, you must sign up for an account with an SMS provider. Iterable projects can send via several different services:
Each provider has different costs and advantages. If you don't have an account with one of our partners yet, your customer success manager can help you decide which service is right for you.
Long codes, short codes, and message throughput
When you set up a new messaging service (Twilio) or messaging profile (Telnyx), you'll need to decide whether to send from long codes or short codes (or in some limited use cases, an alphanumeric sender ID). This decision will impact-among other things-your SMS pricing, deliverability, and message throughput.
Message throughput is measured in messages per second (MPS). This is the maximum number of messages you can send in a given period of time. Some carriers such as T-Mobile will impose daily limits in addition to an MPS limit.
Do you have an idea of how many users you will send messages to, and in what time frame? Sending an SMS campaign to 10,000 users within one hour for a marketing blast will have different throughput needs than a transactional SMS campaign for a triggering event that occurs 10,000 times on any given day.
Long Codes
Long codes are general-use phone numbers, available for low-volume SMS and MMS sends. When you set up your messaging service or messaging profile, you will also complete a registration process to send A2P (Application to Person) messages from 10DLC (10-digit long codes).
Once registered, you will be given a trust score (or brand score). This score will determine your throughput. Note that this score will be the same regardless of the SMS provider you choose, and either SMS provider will provide the same throughput for a given score. For more information on message throughput for registered 10DLC campaigns, see the guide for your SMS provider:
- Telnyx: How Carriers Determine Throughput
- Twilio: Message throughput (MPS) and Trust Scores for A2P 10DLC in the US
Most Iterable customers use long codes, and this is a cost-effective choice if you are just getting started with SMS marketing.
TIP
It is a common practice to have multiple long codes in your messaging service or messaging profile, creating a sending pool. Sending from a pool like this will provide you with the ability to use geolocation matching. This will send SMS from local area codes that are familiar to your users.
Short Codes
Short codes are five or six-digit numbers used for high-volume, rapid SMS and MMS sends and replies. Short codes have a default limit of 100 MPS, but they can be upgraded (at an additional cost). They must be registered on a national registry, which can take 8 to 12 weeks to set up. Short codes are more expensive than long codes, and are recommended for use cases that require high volume sending.
Binding message types for opt-out management
When you set up your project, you can add one or more SMS senders. Each sender is associated with a single messaging service or messaging profile, in a one-to-one ratio. Setting up more than one sender in Iterable is particularly beneficial when considering how you want to manage SMS opt-outs.
When adding a SMS sender, you can optionally include a message type binding. Configuring a message type binding will cause the following behavior changes:
- You are restricted to sending messages only of that type from that SMS Sender. On the Edit Template page, you can only select the sender when the message type of the template matches that of the sender.
- When a user texts an opt-out keyword in reply to that sender, they will be unsubscribed only from that message type.
To better understand how binding an SMS sender to a message type impacts opt-out behavior, review the following example scenarios. If you still have questions, your Iterable Customer Success Manager can help you decide what setup is best for your project.
IMPORTANT
If you are sending SMS/MMS from Telnyx, please take note: The information in this section applies only when opt-outs are handled specific to a messaging profile. This is not a default setting for Telnyx.
By default, when a contact sends an opt-out keyword to one of your Telnyx senders, the contact will be opted out of your Telnyx account overall. Optionally, you can change this behavior so that the contact is only opted out of the specific messaging profile that sent the message. To update this, contact Telnyx.
Example: Project has one sender, not bound to a message type
In this scenario, your project has one SMS sender which is not set up to send a specific message type. You have one messaging service or messaging profile set up with your SMS provider, and you send your marketing and transactional messages from the same sender.
When a user sends an unsubscribe message to the SMS sender in your project:
- They will be unsubscribed from the messaging service or messaging profile with your SMS carrier.
- They will be unsubscribed from the Iterable project's SMS channel (all message types).
- They will not receive any SMS messages from your Iterable project until they resubscribe to the SMS channel.
Example: Project has two senders, each bound to a different message type
In this scenario, your project has two SMS senders. One SMS sender is bound to send marketing messages, while the other is bound to send transactional messages. You have two messaging services or messaging profiles set up with your SMS provider - one service for sending SMS marketing messages, and another for sending SMS transactional messages.
When a user sends an unsubscribe message in reply to a marketing SMS they received:
- They will be unsubscribed from your SMS provider's messaging service or messaging profile that is bound to the marketing message type in Iterable.
- They will be unsubscribed from the marketing message type in your Iterable project.
- They will not receive marketing SMS messages until they resubscribe to the marketing message type.
- They will still receive transactional messages from your project because they have only unsubscribed from the marketing message type.
Similarly, if a user unsubscribes to a transactional message, they may still receive marketing messages. Subscription status will be governed by the message type that the user unsubscribed from.
Example: Project has one sender bound to a message type, and another that is not
In this scenario, you have two messaging services set up with your SMS provider. Accordingly, your project has two SMS senders. One SMS sender is bound to send transactional messages and can only send transactional SMS campaigns (Sender A). The other sender is not bound to any message type and can send any campaign type (Sender B).
When a user sends an unsubscribe message in reply to a SMS they received from Sender A:
- They will be unsubscribed from the messaging service or messaging profile that is associated with Sender A in Iterable.
- They will be unsubscribed from the transactional message type in your Iterable project.
- They will not receive transactional SMS messages from any SMS sender until they reply an opt-in keyword to Sender A.
- They will still receive marketing messages from your project's Sender B because they have only unsubscribed from Sender A and transactional messages.
However, when a user sends an opt-out keyword in reply to any SMS they receive from Sender B, they will experience the following:
- They will be unsubscribed from your SMS provider's messaging service or messaging profile that is associated with Sender B in Iterable.
- They will be unsubscribed from the entire SMS channel in your Iterable project.
- They will not receive any SMS messages until they resubscribe by replying an opt-in keyword to Sender B.
TIP
If you send a mix of marketing and transactional SMS messages, it's best to set up separate SMS senders for each message type. When you do this, your user can unsubscribe from marketing SMS messages and still receive important transactional SMS messages. Just make sure that each sender has a different message type binding.
Contact phone numbers
Once your Iterable project has been set up with an SMS sender, you can send SMS
messages to contacts that have a phoneNumber
field on their user profiles.
This field must be in E.164 format and include a country code, with our without
a +
character. For example, +16503926753
or 16503926753
.
A valid German phone number (which uses country code 49
) might be
+496503926753
.
IMPORTANT
- The default country code is
+1
(USA, Canada, and parts of the Caribbean). If you don’t specify a country code,+1
will automatically be prepended to thephoneNumber
value. - Iterable does not provide full phone number validation. However, if a
phoneNumber
field doesn't show up on a user profile after you set it, check for superficial signs of an invalid number (bad area code, wrong format, etc). You can also use a lookup tool from your SMS provider - see our FAQ below for more info. - Iterable won't send an SMS campaign to contacts who don't have a
phoneNumber
field on their user profiles.
Setting a phone number field using Iterable's API
To use the POST /api/users/update
API endpoint to set a phoneNumber
field on a user profile, use a JSON request
body such as:
{ "email": "docs@iterable.com", "dataFields": { "phoneNumber": "+15551112222" } }
For an international number, use JSON such as:
{ "email": "docs@iterable.com", "dataFields": { "phoneNumber": "+4916503926753" } }
And if your data does not include the leading +
, you may format the JSON body
like this:
{ "email": "docs@iterable.com", "dataFields": { "phoneNumber":15551234567 } }
Sending SMS campaigns
You can send SMS messages as part of a blast campaign, a triggered campaign, or a journey.
To learn how to build out the content for an SMS message, read Creating SMS Templates. Then, to learn how to send a SMS campaign or journey, see:
When creating your SMS Campaign, there are some limitations to note:
- Iterable does not currently support sending voice messages.
- You can only send a marketing message to a user once in an 18-hour period. This limit does not apply to transactional sends.
SMS segments
Each SMS has a limited number of characters. This limit varies based on two factors: the character encoding of the message, and whether the message is one segment or multiple segments.
When you're working on a message, you can see the total character count, number of segments, and encoding type to the left of the message body.
You can use two different character sets in the message body of your SMS: GSM-7 and UCS-2 (UTF-16). GSM-7 is default in the template editor, and it also supports UCS-2 and will automatically detect based on the input.
You may notice that when your SMS passes the limit for a single segment, the character limit per segment decreases slightly. This happens because multi-segmented SMS messages are sent with data headers that contain information for the receiving carrier about how to display the message (such as concatenation).
When your message body is GSM-7 encoded, a single-segment SMS is limited to 160 characters. Once a SMS has 161 or more GSM-7 characters, each segment is limited to 153 characters.
When your message body is UCS-2 encoded, a single-segment SMS is limited to 70 characters. Once a SMS has 71 or more UCS-2 characters, each segment is limited to 67 characters.
See this progression of character count totals and number of segments:
SMS Segments | GSM-7 Characters | UCS-2 Characters |
---|---|---|
1 segment | 0 - 160 | 1 - 70 |
2 segments | 161 - 306 | 71 - 134 |
3 segments | 307 – 459 | 135 - 201 |
... and so on
To learn more about character encoding and how it impacts SMS, read Twilio's guides to GSM-7 and UCS-2.
IMPORTANT
Avoid surprises! Pay attention for some of these character count caveats when crafting your SMS message body:
Special characters and emojis - These can consume multiple characters and may also change the encoding from GSM-7 to UCS-2—which reduces the overall character limit per segment. (Note: Emojis are not universally supported by mobile carriers at this time.)
-
Handlebars - If a handlebar value varies in length for different users, your SMS campaign may send a different number of segments to different users, resulting in odd numbers of segments sent per campaign.
To see the character count when using handlebars, save the message and view a preview for a user. Keep in mind that this count might vary per user depending on the data field you're referencing.
SMS link shortening and click tracking
Iterable makes it possible to shorten the links you include in an SMS campaign, and to track clicks on those links. For more information, see our support guide on SMS Link Shortening and Click Tracking.
SMS opt-out instructions
When sending SMS informational or promotional SMS messages, it's important to include opt-out instructions, because:
- It's an industry best practice. Regularly including clear opt-out
instructions in your messages tells your contacts how they can stop receiving unwanted content. For more information, take a look at the CTIA's guide, Messaging Principles & Best Practices, which includes definitions for "informational" (transactional) and "promotional" (marketing) message types, as well as consumer opt-out mechanisms. - In an effort to protect consumer privacy, AT&T has announced plans to more tightly filter SMS messages sent from 10-digit long codes that don't include opt-out instructions (and it's conceivable that other carriers might eventually follow suit). Because of this, SMS messages without these instructions may not be delivered to consumers on AT&T's network.
Including opt-out instructions
In Settings > Project Settings, you can specify when Iterable should automatically include opt-out instructions with your SMS campaigns:
The Include SMS opt-out instructions setting can have one of three values:
With every SMS campaign - Your project will automatically include opt-out instructions in every campaign, to every contact. This is the default setting for new Iterable projects. Select this option to maximize your deliverability.
Only with the first SMS campaign to each contact - Your project will automatically include opt-out instructions only in the first SMS campaign it sends to any given contact. This option can negatively impact your deliverability, since some carriers may filter messages that don't include opt-out instructions.
Disabled - Your project will never automatically include opt-out instructions. This option can negatively impact your deliverability, since some carriers may filter messages that don't include opt-out instructions. Only your customer success manager can select this option for your project.
Iterable uses Msg&data rates may apply. Text 'STOP' to quit.
as the default
SMS opt-out instructions.
To customize these instructions, go to Settings > Project Settings and update the SMS Opt-Out Instructions Text field:
NOTES
- If your project isn't configured to automatically include opt-out instructions, you can manually add them to any campaign by including them directly in your message's content.
- Keep in mind that when Iterable automatically includes opt-out instructions in your messages, it will increase their length (in characters). Because of SMS message character limits, this can cause an individual campaign to split into segments (read more on segments above).
- When you change this value and save your project settings, the new value will be applied to all SMS campaigns that have not been sent, even if they've already been created. This means that the new settings will affect existing blast campaigns scheduled for the future, and active and inactive triggered and journey campaigns.
Handling inbound SMS messages
Contacts can respond to your SMS messages. These responses are saved as
smsReceived
events on their user profiles, and each has an smsMessage
field
that contains the text of the message (in all lowercase).
To view an individual contact's SMS messages, go to Contacts > Audience Lookup and look them up. To see a list of recent incoming SMS messages across your project, go to Insights > Logs > Inbound SMS:
NOTE
Iterable currently does not support receiving inbound MMS that your contacts may send.
Triggering journeys with inbound SMS messages
To trigger a journey from an incoming SMS message, use a Received an SMS trigger
node. If necessary, add a filter examining the contents of the incoming
message's smsMessage
field, which contains the lower-cased text of the
message. For example:
There are many scenarios to anticipate when using a journey to respond to incoming SMS messages. Among these are, for instance:
- All inbound SMS messages can trigger a journey
- Typos made by the contact
- Keywords reused in multiple campaigns
Consider discussing these cases with your customer success manager before using a journey to respond to incoming SMS messages.
Frequently asked questions
Does Iterable provide phone number validation?
Iterable does not fully validate phone numbers. However, you can use your SMS provider's tools to look up a phone number:
- Telnyx: online lookup | API lookup
- Twilio: online lookup | API lookup
Can I send SMS from an alphanumeric sender ID?
Alphanumeric sender IDs offer high deliverability and unmatched brand recognition. However, messages from this type of sender ID can only be sent to select countries, and are not deliverable to places such as the US and Canada. To explore this option further, contact your customer success manager.
Can I send images along with my text messages?
Yes, Iterable accepts URLs to .png, .jpeg, and .gif files. Insert the URL of the image into the Image URL box in the SMS template editor.
Can I send videos, or other file types in my messages?
Yes. You an include a link to a file of a supported type, that's within the accepted size limit, in the Image URL section of the SMS template editor.
Sample content URLs:
- Video:
https://www.w3schools.com/html/mov_bbb.mp4
- vCard:
https://www.w3.org/2002/12/cal/vcard-examples/john-doe.vcf
Supported file types and size limits vary depending on your SMS provider:
- Iterable SMS: MMS messages sent by your Iterable SMS services may be up to 1MB in size—though we recommend keeping the limit to 900kb so there is data space for message encoding. (MMS exceeding these limits can't be sent.)
- Telnyx: See MMS Sending and Receiving.
- Twilio: See Accepted Content Types for Media.
What metrics can I use with SMS?
To learn about SMS metrics, read SMS Campaign Metrics.
Why would an SMS message bounce?
SMS bounces can happen if a phone number doesn't exist, is not a SMS-receiving phone line, or if part of your setup is incorrect, among other reasons. For an exhaustive list of error codes, see the associated documentation for your SMS provider:
IMPORTANT
Iterable does not unsubscribe contacts when their SMS has bounced.
How do contacts unsubscribe and subscribe?
To unsubscribe and resubscribe to your SMS messages, your contacts can just reply to them.
Whether they are unsubscribed/resubscribed to the SMS channel or just a SMS message type depends on if you have bound a message type as part of your sender setup.
-
To unsubscribe, they can reply with one of these keywords:
STOP
STOPALL
-
STOP ALL
(Telnyx only) UNSUBSCRIBE
END
CANCEL
QUIT
NOTES
- These keywords do not attribute an unsubscribe to an SMS campaign.
- By default, Twilio does not handle these keywords when the reply is sent to a short code. You will need to set up your own handling for this, such as Advanced Opt Out. Talk to your customer success manager for help.
-
To resubscribe and be removed from the SMS blocklist, the contact must reply via SMS with one of these keywords:
START
-
YES
(Twilio only) UNSTOP
Manually resubscribing a contact to one of your project's SMS channels does not automatically cause them to start receiving SMS messages from you again. They must reply to the SMS they received.
For more information on subscribe/unsubscribe keywords and how they are handled, see the guide for your SMS provider:
TIP
To fully understand how your project's specific SMS configuration works with opt-outs and resubscribing, talk to your customer success manager.
Comments
0 comments
Please sign in to leave a comment.