Bookings Pre-Appointment Intake Form
When a Microsoft Bookings appointment is created, the flow emails the customer a pre-appointment intake form (Microsoft Form), stores the responses in Dataverse linked to the appointment, alerts staff if the responses contain flags (allergies, special needs), and reminds non-responders before the appointment. Ensures staff are prepared with the right information.
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 FlowLibs solution collects pre-appointment intake information for Microsoft Bookings. When a new booking is created it emails the customer an intake Microsoft Form link and creates a linked Dataverse record; when the customer submits the form it stores the answers, scans them for flag keywords (allergies, special needs, accessibility), and alerts staff in Teams + email when flagged; and on a schedule it reminds non-responders before their appointment.
Why it matters: Walking into an appointment blind wastes time and risks mistakes. Structured, automated intake ensures staff are prepared with the right information for every appointment.
Built: API-first; all flows ship Off; Flow Checker 0 errors / 0 warnings on all three flows.
This idea needs three trigger types (a Bookings event, a Forms event, and a schedule), so it is built as three coordinated cloud flows + one Dataverse table in a single solution. The three flows share the flowlibs_bookingintake table and a correlationId hand-off stamped by Flow 1.
Shared Dataverse table - flowlibs_bookingintake (Booking Intake): flowlibs_name (Text, primary, customer + service); flowlibs_appointmentid (Text, Bookings appointment Id); flowlibs_customeremail (Text, match key); flowlibs_customername (Text); flowlibs_servicename (Text, booked service); flowlibs_appointmentstart (DateTime, drives the reminder window); flowlibs_intakestatus (Text, Pending -> Responded / Flagged); flowlibs_responsesummary (Memo, flattened intake answers); flowlibs_hasflags (Text, Yes / No); flowlibs_correlationid (Text, cross-flow trace id); flowlibs_reminderssent (Integer, reminder counter).
Use Case
A clinic / professional-services team using Microsoft Bookings wants intake collected automatically and surfaced to staff ahead of each appointment, with reminders for customers who haven't responded and alerts for responses that need special preparation.
Flow Architecture
When a Bookings Appointment Is Created (Flow 1)
Bookings CreateAppointment (Notification)Fires on a new appointment; delivers the full appointment body.
Create Intake Record (Flow 1)
Dataverse CreateRecordPending Booking Intake row linked to the appointment, stamped with the correlation id.
Send Intake Form Email (Flow 1)
Outlook SendEmailV2Emails the customer the intake form link + appointment details.
When an Intake Response Is Submitted (Flow 2)
Forms CreateFormWebhookFires on a new form response.
Get Response Details (Flow 2)
Forms GetFormResponseByIdFetches the submitted answers.
Filter Flag Matches (Flow 2)
Filter arrayReturns flag keywords present in the answers.
Condition Response Has Flags (Flow 2)
ConditionTrue: mark Flagged + alert staff in Teams and email. False: mark Responded and store answers.
Every 6 Hours (Flow 3)
RecurrenceScheduled sweep for non-responders.
List Pending Intakes Due Soon (Flow 3)
Dataverse ListRecordsPending records whose appointment is inside the lead-hours window.
Apply To Each Pending Intake (Flow 3)
Foreach + Outlook SendEmailV2 + Dataverse UpdateRecordEnvironment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_IntakeFormId | String | <configure> | Microsoft Form id - Forms trigger + GetFormResponseById. |
| flowlibs_IntakeFormUrl | String | <configure> | Form link emailed to the customer. |
| flowlibs_BookingsBusinessId | String | <configure> | Bookings business id - trigger SMTPAddress. |
| flowlibs_IntakeStaffEmail | String | intake-staff@flowlibs.local | Staff mailbox for flagged alerts. |
| flowlibs_IntakeFlagAnswers | String | ["allergy","allergies","special needs",...] | JSON keyword list that alerts staff. |
| flowlibs_IntakeReminderLeadHours | String | 48 | Hours-before-appointment reminder window. |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team id for the staff alert. |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for the staff alert. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Bookings | shared_microsoftbookings | CreateAppointment |
| Microsoft Forms | shared_microsoftforms | CreateFormWebhook GetFormResponseById |
| Microsoft Dataverse | shared_commondataserviceforapps | CreateRecord ListRecords UpdateRecord |
| Office 365 Outlook |
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.
- Per-service intake forms
- Branch on ServiceName and switch flowlibs_IntakeFormId / flowlibs_IntakeFormUrl so each service type gets its own intake form.
- Document upload
- Collect documents in the form and archive them to SharePoint on the intake record.
- e-Consent
- Capture signed consent via DocuSign before the appointment and store the envelope id on the record.
- Tune flagging
- Edit flowlibs_IntakeFlagAnswers (JSON list) to change which answers alert staff; no flow edits needed.
- Reminder cadence
- Change the Recurrence interval and flowlibs_IntakeReminderLeadHours to control how early/often non-responders are nudged.
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.01Correlation id (Flow 1)
Stored on the record and propagated across flows.
EXPR.02Flag gate (Flow 2)
Filter Flag Matches predicate, then Condition @greater(length(body('Filter_Flag_Matches')), 0).
EXPR.03Responder match (Flow 2)
Finds the most recent Pending intake for the responder.
EXPR.04Reminder window (Flow 3)
Selects Pending intakes due inside the lead-hours window.
EXPR.05Reminder counter (Flow 3)
Increments the per-record reminder count.
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.