SMS Notifications
Send booking reminders, reconfirmation prompts, and follow-ups by text — Twilio-backed, with STOP/START/HELP keyword handling and a per-workspace credit ledger.
Workestra sends SMS reminders, reconfirmations, and follow-ups through Twilio. They're fired from the same Workflows engine as email — the channel is just SMS instead of email.
This page covers the consent model, opt-out keywords, credit limits, and the practical bits you need to set up before SMS reminders start landing.
Screenshot needed — workflow step editor with channel set to SMS
How it works end-to-end
- Attendee provides a phone number at booking time — either through a
phonepre-meeting form field, or an explicit phone field on the booking page. - Workestra checks consent — if the attendee hasn't opted in for this workspace, no SMS is sent and the step is logged as
skipped: opt_in_missing. - First message includes the legal disclaimer — "Reply STOP to opt out. Msg & data rates may apply." Auto-appended.
- At send time, the workflow engine pulls the row from
scheduling_pending_reminders, renders the body with{{variable}}substitution, chunks it to 158 chars (leaving 2 chars for a continuation marker), and posts to Twilio's Programmable SMS API. - Inbound replies hit
/api/sms/inbound— STOP, START, and HELP are intercepted before reaching the workspace; everything else is logged for the host to read.
Consent
A row is written to messaging_consent (phone_number, workspace_id, consented) the first time a phone number is captured at booking. Workspaces can configure consent capture two ways:
| Consent mode | What the attendee sees |
|---|---|
| Implicit | "By providing a phone number, you agree to receive booking-related SMS." Booking proceeds normally. |
| Explicit checkbox | A required pre-meeting form checkbox that says the same. Booking is rejected if unchecked. |
Switch between them at /calendar/workflows → SMS settings. Most workspaces use implicit; explicit is safer in regulated industries.
A person can be opted in for one workspace and out for another — messaging_consent is workspace-scoped.
STOP, START, HELP
Twilio handles these keywords at the carrier level for free; Workestra mirrors the state into messaging_consent so subsequent steps know to skip.
| Keyword | Effect | Reply |
|---|---|---|
STOP (or STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT) | messaging_consent.consented = false for that phone + workspace; no further messages until they opt back in | "You've been unsubscribed from <workspace> reminders. Reply START to resubscribe." |
START (or YES, UNSTOP) | messaging_consent.consented = true; future steps resume | "You're subscribed to <workspace> reminders. Reply STOP to opt out." |
HELP (or INFO) | No state change; explains what the workspace is | "<workspace> booking reminders. Reply STOP to opt out, START to resume. Questions? Email <host>." |
Anything else replied is logged on the booking row's notes timeline — useful for "I'm running 5 min late" replies you want the host to see.
Credit ledger
Every workspace gets 50 SMS sends per month free. Beyond that, Twilio's per-message cost is passed through (typically $0.0075 / segment in the US, more for international). The credit ledger lives at /calendar/workflows → SMS usage.
| Field | What it shows |
|---|---|
| This month | Sends consumed since the 1st of the month |
| Free tier remaining | 50 minus this month's count |
| Pay-as-you-go segments | Segments billed beyond the free tier |
| Estimated charge | Rolling estimate based on Twilio's price list |
Charges land on your monthly Workestra invoice. Workspaces with no SMS usage see no line item.
Message length
SMS is 160 chars per segment. Workestra reserves 2 chars for a continuation marker (▸2/3) and chunks at 158. A 470-char message goes out as 3 segments, billed as 3.
Variables expand at chunk time, so if {{invitee_name}} is unusually long, the resulting chunks differ. Keep templates short. The workflow editor shows a live char + segment count as you type.
International support
Workestra sends to any country Twilio supports — currently 180+. A few caveats:
- France, Germany, Switzerland: alphanumeric sender ID is required for non-promotional SMS. Workestra defaults to your workspace name (truncated to 11 chars) — configurable in SMS settings.
- India: the DLT registration is your responsibility — Workestra cannot register your sender on TRAI's behalf. Without it, deliverability is unpredictable.
- China: blocked by Twilio. Use email-only workflows for Chinese phone numbers.
What's NOT supported
- Two-way conversation threads. Replies are logged on the booking row, but there's no inbox view yet.
- MMS. Image attachments are a future feature.
- Verified short codes. Workestra uses long codes by default. If your volume requires a short code, contact support.
- Caller ID lookup. The phone number you collect is the only identity used.
Restricting SMS for compliance
Workspace admins can disable SMS entirely from /settings/security → Communication restrictions → Disable SMS sends. While disabled, all workflow SMS steps are skipped silently and logged to the audit log. Useful for industries (healthcare, EU public sector) where text messages need separate compliance review.
Twilio account requirement
Workestra ships with a workspace-level Twilio account by default — included in the free tier. To send from your own Twilio account (for branded sender IDs, custom regions, or VAR billing), set TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in workspace integrations. The credit ledger then bills against your Twilio account directly and the per-segment cost is on your Twilio invoice, not Workestra's.
Read next
- Workflows — the engine SMS rides on
- Booking Links — adding a phone field to the pre-meeting form
- Reschedule & Cancel — how SMS reminders are cancelled when a booking changes
- Calendar Dashboard — see SMS sends on the booking timeline