SMS (Twilio)
Slug: sms
Provider: Twilio REST API
Inbound ACK: Yes — user replies with the notification UUID to the SMS
How it works
PSAPLink sends an SMS via the Twilio REST API. Each SMS includes a notification UUID. When the recipient replies with a message whose body starts with that UUID, Twilio forwards the reply to POST /api/v1/inbound/sms and PSAPLink resolves the acknowledgement. A plain "ACK" reply without a UUID is logged and ignored.
Configuration schema
| Field | Type | Required | Description |
|---|---|---|---|
account_sid | string | Yes | Twilio Account SID (starts with AC). |
auth_token | string | Yes | Twilio Auth Token. Must match the TWILIO_TOKEN env var. |
from_number | string | Yes | Twilio phone number in E.164 format (e.g. +15551234567). |
default_to_number | string | Yes | Default destination number in E.164 format. |
to_number | string | No | Per-channel override for the destination number. |
Infrastructure requirement
TWILIO_TOKEN must be set in the Cloud app's environment and must match auth_token:
TWILIO_TOKEN=your_twilio_auth_token
PSAPLink uses this to validate incoming Twilio webhook signatures on POST /api/v1/inbound/sms and POST /api/v1/inbound/sms/status. A mismatch causes all inbound validation to fail.
Create a channel
POST /api/v1/transport-channels
Authorization: Bearer <token>
Content-Type: application/json
{
"transport_type_slug": "sms",
"name": "Operations SMS",
"config": {
"account_sid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth_token": "your_auth_token",
"from_number": "+15551234567",
"default_to_number": "+15559876543"
}
}
Inbound ACK setup
In the Twilio console, configure a webhook on your phone number:
- Incoming message URL:
https://psaplink.com/api/v1/inbound/sms(POST) - Status callback URL:
https://psaplink.com/api/v1/inbound/sms/status(POST)
ACK detection
An inbound message is treated as an acknowledgement only when the body starts with a valid notification UUID (e.g. 550e8400-e29b-41d4-a716-446655440000). Messages that contain only "ACK" without a leading UUID are logged and ignored.
Test the channel
POST /api/v1/transport-channels/{id}/test
Authorization: Bearer <token>
Limitations
- Twilio account must have SMS capability enabled.
- International numbers require additional Twilio geographic permission configuration.