SMS outbound happens through Twilio. When it fails, the failure usually lands in one of these buckets.
1. 10DLC registration pending
If your tenant is under 72 hours old, your Twilio 10DLC brand + campaign registration may still be pending. During this window, SMS goes out on a shared number and some carriers flag it as spam. Wait 72 hours after signup for the flow to stabilize.
2. Notification toggle disabled
Check Settings → Notifications. Is the trigger you expected to fire (e.g., visit.on_the_way) checked? If unchecked, no message is sent by design.
3. Template missing for the SMS channel
Go to Templates. Filter by the relevant trigger. Is there a row with channel=SMS and locale matching the client's preferred locale? If none exists, the SMS portion is silently skipped (email might still go, if that template exists).
4. Client opted out
On the client detail page, check the "notification preferences" section. If the client replied STOP to a prior SMS, they are suppressed. You can see the opt-out status here.
5. Phone number format issue
Twilio requires E.164 format (+15125551234). Servicio normalizes US numbers automatically, but non-US numbers can land in the database in a format Twilio rejects. Check the audit log for Twilio error codes.
Where to check delivery
On any client's inbox thread, outbound SMS messages show their delivery status: queued, sent, delivered, or failed. Failed messages have a tooltip with the Twilio error code.