Auto-create Zoom meetings for new Acuity virtual sessions

By General Input

Every 15 minutes we sweep Acuity for freshly booked virtual sessions, spin up a Zoom room with passcode, draft a warm client confirmation, and post a compact Slack heads-up.

Integrations

  • Acuity Scheduling
  • Zoom
  • Gmail
  • Slack Bot

Type

Agentic Task

Categories

  • Operations
  • Personal Productivity

Every 15 minutes during business hours (roughly 8am to 6pm on weekdays in the account's local timezone), sweep Acuity Scheduling for appointments that were freshly booked since the previous run and provision Zoom meetings for the virtual ones.

Step 1. Fetch fresh bookings. Call Acuity's List Appointments with a small look-back window that comfortably overlaps the 15-minute cron cadence, filtering to appointments created since the previous sweep. Acuity datetime parameters must be parseable by PHP strtotime (e.g. 2024-03-15T14:00:00-0500), and timezones are IANA identifiers. Keep a lightweight record of appointment IDs already processed so re-runs never double up.

Step 2. Judge which bookings are virtual. For each fresh appointment, look at the appointment type name and description. Use judgment to decide whether it is a virtual or online session — things like 'video consult', 'online coaching', 'virtual intake', 'remote session', 'telehealth', 'Zoom call' are strong signals; anything clearly in-person (studio, office, on-site, in-clinic) gets skipped. Do not hardcode a fixed list because the practitioner's virtual offerings drift over time. If ambiguous, treat it as virtual only when the type name or description explicitly indicates remote.

Step 3. Enrich with intake context. For each virtual booking, call Acuity's Get Appointment with intake form answers included. Read the answers so you can tailor the confirmation email later — flag anything relevant like the client's goals, prior context, or logistical constraints.

Step 4. Create the Zoom meeting via Zoom's Create Meeting operation. Set: topic to '<Client first + last name> — <Appointment type>'; type to scheduled (2); start_time to the appointment datetime in ISO 8601; timezone to the appointment's IANA timezone; duration to the appointment's duration in minutes; and settings with waiting_room enabled and a passcode set (use the password field so the client sees it in the join link). Capture the join_url, id, password, and dial-in numbers from the response.

Step 5. Draft the client confirmation with Gmail's Create a Draft. Recipient is the client's email from the Acuity record. Subject something like 'Your <appointment type> is confirmed for <date> at <time>'. Body: warm hello using their first name; the session type, date, and time formatted in the client's timezone; the Zoom join link with the passcode; the phone dial-in fallback that Zoom returned; and one or two short prep pointers tailored to the session type, referencing the intake answers when they naturally inform what to prep. Keep it warm but efficient — no hard sell, no boilerplate essay.

Step 6. Post a compact heads-up to Slack using Slack Bot's Send a Message. Target the team's bookings or operations channel. Keep it to a single line so it reads fast: something like 'Zoom set up: Jane Doe — 60min Video Consult on Thu Aug 14 at 2:00pm PT. Draft ready in Gmail.' Include the join link only if the team asks for it; the point is that the meeting is ready and the confirmation is drafted.

Guardrails: the Gmail confirmation is a draft, never a direct send — the practitioner reviews before it goes out. Skip any booking whose start time is already in the past (safety net for backfills). Never create a second Zoom meeting for the same appointment ID. If Zoom returns an error, still post the Slack note flagging the failure so the team can intervene, but do not draft the client email.

Related prompts

Explore more prompts
Win back LiveChat visitors whose chats went unansweredA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seats