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
| Property | Value |
|---|---|
| Category | Action |
| Node IDs | ds.smsSend.perItem.in1.success1.error1 (per-item)ds.smsSend.batch.in1.success1.error1 (batch) |
| Input Ports | 1 |
| Success Outputs | 1 |
| Error Outputs | 1 |
| Execution Mode | Per-item or Batch |
| Timeout | 30 seconds |
| Retry Strategy | Exponential, 3 attempts |
| Side-Effecting | Yes |
Prerequisites
- Recipient phone numbers in E.164 format
- Optional: Verify your phone number in Settings for sender ID
Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
to | CEL Expression | Yes | Recipient phone number (E.164 format) |
body | Liquid Template | Yes | SMS message content |
To Parameter
Phone number in E.164 format:
From upstream data:
json.contact.phone
Static number:
"+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:
| Country | Format |
|---|---|
| USA | +15551234567 |
| UK | +447912345678 |
| Germany | +4915112345678 |
| Australia | +61412345678 |
Body Parameter
SMS content using Liquid template:
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
{
"success": true,
"messageId": "SM1234567890abcdef",
"to": "+15551234567",
"body": "Urgent: Meeting needs follow-up...",
"sentAt": "2024-01-15T14:30:00Z"
}
Error Output
{
"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:
URGENT: {{ json.alertMessage }}. Check Slack immediately.
Example: Meeting Alert
Alert about a meeting that needs attention.
To: json.manager.phone
Body:
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:
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:
[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
{{ json.message | truncate: 150 }}
3. Include Action
Tell recipient what to do:
✅ Good:
Deal risk alert: {{ json.dealName }}. Check Slack #deals for details.
❌ Bad:
There's an issue with a deal.
4. Validate Phone Numbers
Before sending, validate format:
json.phone matches "^\\+[1-9]\\d{1,14}$"
Or use If node to check:
[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:
- Ensure E.164 format (
+15551234567) - Remove spaces, dashes, parentheses
- Include country code
SMS not delivered
Causes:
- Invalid number
- Carrier blocking
- Recipient phone issues
Solutions:
- Verify number is correct
- Check execution logs for delivery status
- Contact support if issues persist
Message truncated
Cause: Content exceeds SMS limits
Solution: Keep under 160 characters or handle multi-part:
{{ json.message | truncate: 155, "..." }}
High costs
Cause: Sending too many SMS
Solutions:
- Use SMS only for critical alerts
- Implement proper filtering
- Use Slack/email for non-urgent
Related Nodes
- If - Filter to only urgent items
- Slack Post - Less intrusive alternative
- Email Send - Another alternative
Technical Details
Character Limits
| Message Type | Limit |
|---|---|
| Standard SMS (GSM-7) | 160 characters |
| Unicode SMS | 70 characters |
| Concatenated SMS | Multiple 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.