> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nedzo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Send SMS action

> Send a text message to a contact or custom phone number as a workflow step. Messages appear in Unibox alongside other conversations for unified tracking.

Send an SMS message as part of your workflow. Messages appear in Unibox alongside other conversations.

## Configuration

| Field          | Required  | Default | Description                                                                                      |
| -------------- | --------- | ------- | ------------------------------------------------------------------------------------------------ |
| Phone number   | Yes       | —       | Which workspace phone number to send from. Select from your purchased numbers.                   |
| Recipient type | Yes       | Contact | **Contact** sends to the trigger contact's phone. **Custom** lets you enter a specific number.   |
| Custom phone   | If custom | —       | Phone number in E.164 format (e.g., `+14155551234`). Only shown when recipient type is "Custom". |
| Message        | Yes       | —       | The message text. Supports `{{variables}}`. Max 1,600 characters.                                |

## Variables

Use variables to personalize the message:

```
Hi {{firstName}}, thanks for chatting with us today.
We'll send over the details to {{email}} shortly.
```

Available variables: `{{firstName}}`, `{{lastName}}`, `{{email}}`, `{{phone}}`, `{{businessName}}`, plus any trigger data or previous step outputs.

## Compliance

The first SMS sent to a new phone number automatically includes an opt-out footer with your workspace info and instructions to reply STOP. This is required for compliance and happens automatically — you don't need to add it to your message.

Two independent toggles control this, under **Phone Numbers → Compliance**: the company/sender name and the opt-out notice. Both are **on by default**. You can disable either one per workspace (for example, if your carrier already appends opt-out language), but leaving them on is strongly recommended — opt-out text is generally an A2P/carrier requirement and turning it off makes compliance your responsibility.

### Opt-out enforcement

If the contact replied `STOP` (or any of `STOPALL`, `UNSUBSCRIBE`, `CANCEL`, `END`, `QUIT`) to the workspace number you're sending from, the action fails with an opt-out error and the SMS is not sent. The check is per `(contact, phone number)` — a contact opted out from one number can still be reached from another.

A contact who later replies `START`, `UNSTOP`, or `YES` is opted back in automatically and the workflow can send again. Carrier-level opt-outs (received via Telnyx webhooks) are enforced the same way.

See [Unibox → SMS opt-out handling](/unibox/channels#opt-out-handling-tcpa) for full opt-out behavior.

## Limits

| Limit                   | Value                                         |
| ----------------------- | --------------------------------------------- |
| Max message length      | 1,600 characters                              |
| Daily SMS per workspace | 100                                           |
| Segment length          | 160 chars (GSM-7) or 70 chars (Unicode/emoji) |

Messages longer than one segment are sent as multi-part SMS and count as multiple segments.

## Checks

Before sending, the action verifies:

* The contact has a phone number
* The contact is not on the Do Not Call (DNC) list
* The contact has not opted out from the selected workspace number
* The phone number is active in your workspace
* The daily SMS limit hasn't been reached

If any check fails, the action fails with a descriptive error.

## Example

**Follow-up after a call:**

1. Trigger: Conversation ended → Agent Type: voice
2. Condition: Outcome equals "completed"
3. Action: Send SMS
   * Phone number: Your workspace number
   * Recipient: Contact
   * Message: *"Hi `{{firstName}}`, great speaking with you! As discussed, here's the link to get started: [https://example.com/signup](https://example.com/signup)"*
