# SMS Channel

Engage Studio's SMS channel lets you send promotional text messages to US customers via short code. The process involves four steps:

1. Provision your SMS sender number and connect it to your workspace
2. Build your target audience in a Parent Segment with consent filtering
3. Create and configure an SMS campaign
4. Review delivery results in the events table


## Prerequisites

Before creating an SMS campaign, the following must be in place:

* A short code has been provisioned by Treasure AI and assigned to your workspace
* Your Parent Segment includes a phone number column in E.164 format (e.g., `+12125551234`)
* Consent filtering is applied at the segment or activation level to exclude opted-out recipients
* Quiet Hours settings are configured for your audience's time zones


Important
Provisioning a short code requires lead time. Contact your Treasure AI account team to initiate the request before building your campaign.

## Campaign Setup

## Campaign Setup

### Creating a Campaign

* Click **Create Campaign**
* Select **SMS** as the channel
* Enter a Campaign Name
* Click **Create**


### Selecting Target Audience

* Choose a **Parent Segment** and **Target Segment**
* Click **Next**


Important
Opted-out recipients are not automatically excluded from your segment. You must filter them out at the CDP level (in your Parent Segment or Activation) before launching. Treasure AI records opt-out events to the `subscription_events` table — use this data to keep your segments current.

### Composing Your Message

Create your message content.

| Field | Description | Notes |
|  --- | --- | --- |
| Sender | The send number (short code) assigned to this workspace | Configured by Treasure AI during provisioning |
| Message Body | The text sent to recipients | GSM-7: 160 chars per segment. Unicode: 70 chars per segment. |
| Segment Count | Live indicator of how many SMS segments your message uses | Displayed in the editor. Each additional segment adds cost. |


#### Personalizing your message

Engage Studio offers the ability to personalize your messages using profile attributes from your CDP segments.

To personalize, add a liquid template.

**Example:** `Hi {{ profile.first_name }}, your offer is ready.`

### Allowed Delivery Time

Allowed Delivery Time settings prevent messages from being sent outside of a pre-defined time window. This allows you to comply with federal quiet hours.

| Field | Description | Example |
|  --- | --- | --- |
| Timezone | IANA timezone for the send window | `America/New_York` |
| Allowed Start | Earliest time messages can be sent | `08:00` |
| Allowed End | Latest time messages can be sent | `20:00` |
| Weekday Overrides (Always On Campaigns only) | Optional per-day restrictions | Disable sends on Sundays |


Note
The send window applies uniformly to all recipients in your segment — it is not resolved per-recipient timezone. If your audience spans multiple US time zones or states with stricter quiet hours than the federal minimum, we recommend splitting your segments by region in the CDP before launching.

Note
Messages blocked by Quiet Hours are logged as `quiet_hours_blocked` in the delivery events table. They are **not** retried automatically. Launch a new campaign to re-send to blocked recipients.

**US Federal requirement (TCPA):** 8:00 AM – 9:00 PM recipient local time. Some states enforce stricter cutoffs (e.g., Florida: 8:00 PM). Treasure AI recommends applying the most restrictive applicable window for your audience.

### Selecting Delivery Schedule

Note
This section references guidance from the [One-off Campaign](/products/marketing-cloud/engage-studio/channels/email/bulk-delivery) and [Always On Campaign](/products/marketing-cloud/engage-studio/always-on-campaigns) help documentation.

| Option | Description | Typical Use Case |
|  --- | --- | --- |
| Send immediately | Sends as soon as you launch the campaign | Flash promotions, time-sensitive alerts |
| Schedule for later | Sends at a specific future date and time | Planned campaigns, coordinated multi-channel sends |


Tip
For large campaigns, schedule delivery in advance to allow audience preparation and Quiet Hours validation to complete before send time.

### Selecting Activation

Select the appropriate activation configuration.

#### Details

| Field | Description | Notes |
|  --- | --- | --- |
| Activation Name | System-generated unique identifier | auto-assigned |
| Enable Activation Actions | Toggles whether Activation Actions are used for delivery | If disabled, the campaign will launch without Activation Actions enabled |
| Authentication | Specifies the Engage connector used for delivery |  |
| Batch Size | Records processed per batch | 1,000 (default and max), 1 (min) |
| Thread Count | Parallel send threads | 1 (default), 10 (max) |


#### Output Column Mapping

Map segment data to the SMS delivery pipeline. Engage Studio uses Liquid syntax (`{{ profile.column_name }}`) to substitute values per recipient at send time.

**Required:**

* `phone_number` → recipient's phone number (must be in E.164 format, e.g., `+12125551234`)


**Optional custom fields** (used in message personalization):

* Any additional columns referenced in your Liquid template, e.g., `first_name`, `loyalty_points`


Important
All columns referenced as Liquid variables in your message body must be covered by output mappings.

### UTM Tracking

UTM parameters are tags appended to every URL in your message body, enabling analytics platforms like Google Analytics or Adobe Analytics to attribute traffic to a specific campaign.

* Available for all campaign types (One-off and Always-on)
* Engage Studio automatically appends parameters to all links when enabled


**Toggle:**

* **On**: UTM parameters appended to all links
* **Off**: Links sent as-is, no parameters appended


When toggled on, **Medium**, **Source**, and **Campaign** are required fields.

Tip
UTM fields remain editable when a campaign is in a **Paused** state, allowing you to adjust tracking parameters before resuming delivery.

#### UTM Parameter Fields

| Field | UTM Parameter | Required | Default | Description |
|  --- | --- | --- | --- | --- |
| **Campaign ID** | `utm_id` | — | Auto-generated | Read-only unique system identifier |
| **Medium** | `utm_medium` | Yes | `sms` | Marketing channel |
| **Source** | `utm_source` | Yes | `treasureai` | Traffic referrer; supports Liquid syntax e.g., `{{profile.segment}}` |
| **Campaign** | `utm_campaign` | Yes | *(user-defined)* | Campaign name; e.g., `spring_sale`, `product_launch_2026` |
| **Source Platform** | `utm_source_platform` | No | `treasureai` | Platform directing traffic |
| **Marketing Tactic** | `utm_marketing_tactic` | No | *(empty)* | Targeting criteria; e.g., `remarketing`, `prospecting` |


#### Validation Rules

**Character Limits:**

* Medium, Source, Source Platform: max **100 characters**
* Campaign, Marketing Tactic: max **40 characters**


**Allowed Characters:** Letters (a–z, A–Z), numbers (0–9), hyphens (`-`), underscores (`_`), periods (`.`). Source also permits `{` and `}` for Liquid syntax. Spaces and special characters are not allowed.

All input is automatically converted to lowercase before being appended to the URL.

#### How UTM Parameters Appear in Links

A link like `https://example.com/offers` becomes (shown wrapped here for readability; the actual URL is a single unbroken string with no line breaks):

```
https://example.com/offers?utm_id=019dacdc-de23-7193-a9a4-4d2eb9a6b514&utm_medium=sms&utm_source=treasureai&utm_campaign=spring_sale&utm_source_platform=treasureai&utm_marketing_tactic=remarketing
```

## Monitoring Delivery

SMS delivery data is written to event tables in the `delivery_sms_` database for your workspace.

| Table | Contents |
|  --- | --- |
| `events` | One row per message — delivery status (sent, delivered, failed) and quiet hours blocks (`quiet_hours_blocked`) |
| `subscription_events` | Opt-out and opt-in events (STOP / START keywords received) |
| `error_events` | Send failures |


Tip
Use `subscription_events` to keep your CDP segment up to date. Opt-out sync to your Parent Segment is not automatic — you must update your segment manually to exclude opted-out recipients from future campaigns.

## Opt-Out Handling

Treasure AI uses Twilio's Advanced Opt-Out to process STOP keywords automatically.

**Opt-out keywords:** STOP, STOPALL, UNSUBSCRIBE, END, QUIT, CANCEL

**Opt-in keywords:** START, YES, UNSTOP

When a recipient sends a STOP keyword:

1. Twilio automatically blocks future outbound messages to that number and sends a confirmation reply
2. Engage Studio writes an opt-out event to `subscription_events` in your delivery database
3. The recipient remains in your CDP until you update their profile — **you are responsible for syncing this data and excluding them from future sends**


Important
Re-opt-in requires the recipient to text a keyword (e.g., START). It **cannot** be triggered via API or website. Do not attempt to re-enroll recipients who have opted out without their explicit re-opt-in action.

## Compliance Notes

Treasure AI provides the tools to enforce compliant sends — but compliance with TCPA and applicable regulations is the responsibility of the sending organization.

| Requirement | Details | How to Meet It in Engage Studio |
|  --- | --- | --- |
| Quiet Hours | Send only during 8AM–9PM recipient local time (federal). Some states restrict further. | Configure Quiet Hours. Segment audience by time zone. |
| STOP Compliance | Honor opt-out requests immediately | Sync `subscription_events` to your Parent Segment after each campaign. |
| Consent | Obtain prior express written consent before sending | Manage consent capture outside Engage Studio (e.g., web forms, checkout flow). |
| Consent Records | Retain records of consent for the regulatory period | Store consent records in your CDP. Treasure AI does not retain consent data on your behalf. |


Important
TCPA violations carry statutory damages of $500–$1,500 per message. Ensure your consent records, opt-out processes, and send windows meet applicable legal standards before sending at scale.