SMS Appointment Reminder
Each morning the flow reads the day's appointments from a Dataverse table and sends each attendee an SMS reminder via Twilio with the time and location, then logs the Twilio message SID and a Sent status back to the record. A simple, high-value beginner flow that introduces the Twilio connector.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
Each morning a scheduled flow reads the day's appointments from a Dataverse table, texts each attendee a personalized same-day reminder via Twilio, and writes the Twilio message SID and a Sent status back to the appointment row. The today-window query also excludes rows already marked Sent, so re-runs are idempotent.
Why it matters: SMS reminders cut no-shows sharply and reach people who never open email. This is the simplest possible Twilio pattern - a great first build for the connector - wired end-to-end with real connector actions (no fixtures). Built and verified (Flow Checker 0/0), ships Off.
Use Case
Clinics, salons, advisors, or any appointment-based business that wants an automatic same-day text reminder to reduce no-shows, with a per-record log of which reminders were delivered (Twilio message SID).
Flow Architecture
Daily Morning Run
Recurrence (daily 08:00 ET)Runs daily to send same-day reminders
Initialize variables
Initialize Variable x3Loads the SMS template, the Twilio sender number, and the appointments table name
List Todays Appointments
Dataverse ListRecordsFilters appointments scheduled today where the reminder is not yet sent
Apply To Each Appointment
ForeachIterates each of today's appointments
Send SMS
Twilio SendMessageTexts the attendee the personalized reminder
Update Reminder Status
Compose + Dataverse UpdateRecordWrites the message SID and a Sent status back to the appointment row
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AppointmentTable | String | flowlibs_smsappointments | Source table (entity set / plural logical name) |
| flowlibs_TwilioFromNumber | String | +15551234567 | Verified Twilio sender number |
| flowlibs_ReminderTemplate | String | Hi {name}, reminder: your appointment "{subject}" is today at {time}, {location}. Reply STOP to opt out. | SMS body template; tokens replaced per appointment |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Twilio | shared_twilio | SendMessage |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords UpdateRecord |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Opt-out (compliance)
- Add a flowlibs_smsoptout Two Options column and append 'and flowlibs_smsoptout ne true' to the List Todays Appointments filter to skip opted-out attendees (TCPA / GDPR).
- Two-way confirm
- Add a second flow with a built-in Request trigger as the Twilio inbound webhook; mark the appointment confirmed when the attendee replies YES.
- Lead time
- Clone the flow with an evening Recurrence for day-ahead reminders, or parameterize the run hour with another env var.
- Message channel
- The same Twilio SendMessage op sends WhatsApp by prefixing both numbers with whatsapp: (sender from a WhatsApp number env var).
- Time zone
- The recurrence runs in Eastern Standard Time; change the trigger timeZone/hours to match your business.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Today filter (Dataverse $filter)
Today's not-yet-sent appointments
EXPR.02Personalized body
Replaces the template tokens per appointment
EXPR.03Row update object (Compose)
Bound to UpdateRecord item as a single expression
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.