Bookings Multi-Channel Reminder Sequence
After a Microsoft Bookings appointment is created, the flow runs a reminder sequence - a confirmation email immediately, an SMS via Twilio the day before, and a final SMS a few hours prior - each with reschedule/cancel options, and stops if the customer cancels. Cuts no-shows with timely, multi-channel reminders.
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
This flow reduces Microsoft Bookings no-shows with a layered, multi-channel reminder sequence. When a customer books an appointment, the flow immediately emails a confirmation, then sends a day-before SMS and a final SMS a few hours prior via Twilio - each carrying a self-service reschedule/cancel link. Before every SMS it re-reads the appointment from Microsoft Graph and stops the sequence if the customer has cancelled.
Why it matters: A single email reminder is easy to miss. A timed email-plus-SMS sequence reaches people where they'll actually see it and meaningfully cuts no-shows - while respecting cancellations so customers aren't messaged after they've already pulled out.
Status: Built and verified (Flow Checker 0 errors / 0 warnings). Ships Off as a demo. Going live requires only authorizing the three connections and setting the environment variable values.
Use Case
A services business (salon, clinic, advisory, repair shop) takes bookings through Microsoft Bookings and wants reminders that genuinely reach customers across channels and reduce no-shows, without sending reminders to people who have already cancelled.
Flow Architecture
When an Appointment Is Created
Bookings CreateAppointment (webhook)Fires on each new booking; SMTPAddress = flowlibs_BookingsBusinessId.
Initialize Variables (Email, Phone, Name, Service, Appointment Id, Start Time, Twilio From, Reschedule Url, Final Hours)
Initialize Variable (x9)Pull trigger fields + env vars into named, configurable variables.
Send Confirmation Email
Outlook SendEmailV2Immediate booking confirmation with service, date/time, and reschedule link.
Wait Until Day Before
Delay untilPauses until 24h before the appointment start.
Get Appointment Status Day Before
HTTP -> Microsoft GraphRe-reads the appointment (404 = cancelled).
Check Not Cancelled Day Before
Condition (If)True: Send Day Before SMS (Twilio). False: Terminate (run cancelled).
Wait Until Final Reminder
Delay untilPauses until flowlibs_FinalReminderHours before the start.
Get Appointment Status Final
HTTP -> Microsoft GraphRe-checks cancellation again.
Check Not Cancelled Final
Condition (If)True: Send Final SMS (Twilio). False: Terminate.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_BookingsBusinessId | String | contoso@contoso.onmicrosoft.com | Bookings business SMTP/id - trigger SMTPAddress and Graph business id. |
| flowlibs_TwilioFromNumber | String | +15551234567 | E.164 Twilio sender number for the SMS From. |
| flowlibs_FinalReminderHours | String | 3 | Hours before start to send the final SMS. |
| flowlibs_RescheduleUrl | String | https://outlook.office.com/bookwithme/... | Self-service reschedule/cancel link in every reminder. |
| flowlibs_GraphBaseUrl | String | https://graph.microsoft.com | Graph base (flow appends /v1.0/...). |
| flowlibs_TenantId | String | <your-tenant-id> | AAD tenant for Graph OAuth. |
| flowlibs_GraphClientId | String | 00000000-0000-0000-0000-000000000000 | App registration client id for Graph. |
| flowlibs_GraphClientSecret | String | REPLACE_WITH_CLIENT_SECRET | App registration secret for Graph. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Bookings | shared_microsoftbookings | CreateAppointment |
| Office 365 Outlook | shared_office365 | SendEmailV2 |
| Twilio | shared_twilio | SendMessage |
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.
- Quiet hours / opt-out
- The trigger exposes IsSMSNotificationsEnabled; gate the SMS branches on it, and add a time-of-day check so messages never land overnight.
- Add a third touch
- Duplicate the wait + re-check + SMS pattern for a same-morning nudge by changing the Wait Until offset.
- Two-way SMS
- Wire a Twilio inbound webhook flow to accept CONFIRM/CANCEL replies and update the booking.
- Localization
- Branch the email/SMS text on CustomerTimeZone or a language field to send in the customer's language.
- Swap the Twilio from for a WhatsApp-enabled sender where customers prefer it.
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.01Day-before delay
Schedules the day-before reminder.
EXPR.02Final-reminder delay
Schedules the final reminder N hours before start.
EXPR.03Graph appointment URL
Endpoint to re-read the appointment status.
EXPR.04Still-active check
Confirms the appointment still exists before messaging.
EXPR.05Friendly date / time formatting
Friendly date in email; time in SMS.
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.