Search documentation

Search for pages in the documentation

SMS Send

Send text messages via SMS

The SMS Send node sends text messages via SMS. Use it for urgent notifications, time-sensitive alerts, or reaching people who may not be checking email or Slack.

Overview

PropertyValue
CategoryAction
Node IDsds.smsSend.perItem.in1.success1.error1 (per-item)
ds.smsSend.batch.in1.success1.error1 (batch)
Input Ports1
Success Outputs1
Error Outputs1
Execution ModePer-item or Batch
Timeout30 seconds
Retry StrategyExponential, 3 attempts
Side-EffectingYes

Prerequisites

  • Recipient phone numbers in E.164 format
  • Optional: Verify your phone number in Settings for sender ID

Configuration

ParameterTypeRequiredDescription
toCEL ExpressionYesRecipient phone number (E.164 format)
bodyLiquid TemplateYesSMS message content

To Parameter

Phone number in E.164 format:

From upstream data:

cel
json.contact.phone

Static number:

cel
"+15551234567"

Phone Number Format (E.164)

The E.164 format is:

  • Starts with +
  • Country code
  • Area code (no leading zero)
  • Local number
  • No spaces or dashes

Examples:

CountryFormat
USA+15551234567
UK+447912345678
Germany+4915112345678
Australia+61412345678

Body Parameter

SMS content using Liquid template:

liquid
Urgent: Meeting "{{ json.meeting.title }}" needs follow-up. Check Slack for details.

Input Schema

Accepts any data from upstream. Access via json in templates.

Output Schema

Success Output

json
{
  "success": true,
  "messageId": "SM1234567890abcdef",
  "to": "+15551234567",
  "body": "Urgent: Meeting needs follow-up...",
  "sentAt": "2024-01-15T14:30:00Z"
}

Error Output

json
{
  "error": "INVALID_PHONE_NUMBER",
  "message": "Phone number must be in E.164 format",
  "to": "555-123-4567"
}

Examples

Basic Example: Urgent Alert

Send an urgent notification.

Configuration:

To: json.recipientPhone

Body:

liquid
URGENT: {{ json.alertMessage }}. Check Slack immediately.

Example: Meeting Alert

Alert about a meeting that needs attention.

To: json.manager.phone

Body:

liquid
Meeting Alert: "{{ json.meeting.title }}" flagged as {{ json.riskLevel }}.
Action needed: {{ json.recommendedAction | truncate: 80 }}

Example: Time-Sensitive Follow-up

Send reminder for time-sensitive items.

To: json.assignee.phone

Body:

liquid
Reminder: Follow up with {{ json.contact.name }} by {{ json.deadline | date: "%I:%M %p" }} today. Topic: {{ json.topic }}

Example: Conditional SMS

Only send SMS for truly urgent situations.

Workflow:

text
[AI: Classify urgency]
         │
         ▼
[If: json.urgency == "critical"]
    ├── Yes ──▶ [SMS Send]
    └── No ───▶ [Slack Post] (less intrusive)

Best Practices

1. Reserve for Urgent Messages

SMS is intrusive—use sparingly:

  • Critical alerts that need immediate action
  • Time-sensitive information
  • When other channels have failed

2. Keep Messages Short

SMS has character limits:

  • Standard SMS: 160 characters
  • Longer messages split into multiple SMS
liquid
{{ json.message | truncate: 150 }}

3. Include Action

Tell recipient what to do:

Good:

liquid
Deal risk alert: {{ json.dealName }}. Check Slack #deals for details.

Bad:

liquid
There's an issue with a deal.

4. Validate Phone Numbers

Before sending, validate format:

cel
json.phone matches "^\\+[1-9]\\d{1,14}$"

Or use If node to check:

text
[If: phone is valid?]
    ├── Yes ──▶ [SMS Send]
    └── No ───▶ [Log error] ──▶ [Sink]

5. Consider Time Zones

Don't send SMS at inappropriate hours:

  • Use scheduled triggers for business hours
  • Consider recipient's time zone
  • Save urgent-only for true emergencies

Common Issues

"Invalid phone number" error

Causes:

  • Missing + prefix
  • Invalid country code
  • Non-numeric characters

Solutions:

  1. Ensure E.164 format (+15551234567)
  2. Remove spaces, dashes, parentheses
  3. Include country code

SMS not delivered

Causes:

  • Invalid number
  • Carrier blocking
  • Recipient phone issues

Solutions:

  1. Verify number is correct
  2. Check execution logs for delivery status
  3. Contact support if issues persist

Message truncated

Cause: Content exceeds SMS limits

Solution: Keep under 160 characters or handle multi-part:

liquid
{{ json.message | truncate: 155, "..." }}

High costs

Cause: Sending too many SMS

Solutions:

  1. Use SMS only for critical alerts
  2. Implement proper filtering
  3. Use Slack/email for non-urgent

Technical Details

Character Limits

Message TypeLimit
Standard SMS (GSM-7)160 characters
Unicode SMS70 characters
Concatenated SMSMultiple 153/67 char segments

Emojis use Unicode and reduce character count.

Idempotency

SMS Send uses idempotency keys to prevent duplicate messages during retries.

Delivery Status

The success output indicates the message was accepted by Twilio. Final delivery depends on:

  • Carrier networks
  • Recipient phone status
  • Number validity

Check delivery status in the execution logs.