# Vapi confirmation calls for today's appointments

> Every weekday at 8am, a Vapi voice agent calls today's clients to confirm, reschedule, or capture special requests, then posts one Slack roll-up to ops.

- Workflow type: agent
- Services: Vapi, Google Calendar, Slack
- Categories: Operations, Customer Support
- Published: 2026-07-11

## What it does

- Every weekday morning, pulls today's client appointments from your Google Calendar and skips internal meetings automatically.
- Places a warm outbound Vapi call to each client, greets them by name, confirms the time and service, offers to reschedule, and captures parking, delivery, or provider notes.
- Writes the outcome back to the calendar event so anyone opening it sees Confirmed, Reschedule requested, No answer, or Cancelled at a glance.
- Posts a single Slack roll-up to your ops channel with total appointments, confirmations, reschedules, no-answers to retry, and special requests that need a human.

## What you'll need

- A Google Calendar account with today's client appointments on your primary calendar.
- A Vapi account with a pre-configured assistant and an outbound phone number.
- Client phone numbers stored on the event (as an attendee or in the description).
- A Slack workspace and the ops channel you want the morning roll-up posted to.

## Prompt

Build me an agent workflow that cuts no-shows by proactively calling every client I have on my calendar today. This should run on a cron trigger every weekday at 8am in my local timezone.

Step 1. Use Google Calendar's List Events to pull today's events on my primary calendar (from 00:00 to 23:59 in my local timezone). Only keep events that look like real client appointments: they must have at least one attendee outside my company domain, OR a phone number in the description. Skip any event where every attendee is on my domain (internal meeting). Skip any event whose description already contains a line starting with 'Confirmation:' or 'Confirmed' from an earlier run so we never double-dial the same customer.

Step 2. For each qualifying event, use Vapi's Create Call to place an outbound phone call using my pre-configured Vapi assistant and outbound phone number id. Pass the customer's name, appointment time, service or event title, and any relevant context as assistant overrides so the assistant can greet them by name, confirm the appointment time and service, offer to reschedule if the time no longer works, and capture any special notes (parking, delivery instructions, questions for the provider).

Step 3. After each call finishes (poll Vapi's Get Call until status is 'ended', with a reasonable timeout so a stuck call doesn't block the run), pull the transcript and the structured outcome. Classify the outcome into one of: Confirmed, Reschedule requested, No answer, or Cancelled. Extract any special notes the caller shared.

Step 4. Use Google Calendar's Patch Event to append a single line to the event description in the form: 'Confirmation: <status> — <notes> (<timestamp>)'. Do not overwrite the existing description; append to it. This is how we guarantee idempotency for the next run.

Step 5. Once every event has been processed, use Slack's Send a Message to post one roll-up to the ops channel I specify. Include: total appointments processed, count confirmed, count needing reschedule, a bulleted list of no-answers to retry later (name + time + phone), and a bulleted list of special requests that need staff attention. Keep it scannable, one message, no threads.

Inputs I should be able to configure: calendar id (default 'primary'), my company email domain (for the internal-meeting filter), Vapi assistant id, Vapi phone number id, Slack channel id for the roll-up, and my local timezone. If any event is missing a phone number entirely, log it in the Slack roll-up under 'skipped: no phone' rather than trying to call.

## How to customize

- Change the run time to match when your front desk starts, for example 7am for early clinics or 10am for salons.
- Adjust what the caller says. Tweak the greeting, the confirmation script, or how the agent handles reschedule requests.
- Swap the destination channel or route special requests to a different Slack channel for staff to action.
- Tighten the filter that picks which events get called. For example, only events with a specific tag in the title, or only events longer than 30 minutes.

## FAQ

### Will it call people twice if I run it more than once?

No. Before dialing, the agent checks whether the event description already has a Confirmed line from an earlier run and skips it. You can safely re-run or move the schedule around without double-dialing.

### How does it know which events are client appointments and which are internal?

It skips any event where every attendee shares your company domain, and only calls events that have a client attendee or a phone number in the description. You can tighten this further with a title tag or a calendar name.

### What if a client asks to reschedule during the call?

The Vapi assistant captures the request and the caller's preferred time, and the agent writes Reschedule requested plus their note back into the event. The roll-up in Slack flags it so a human can follow up.

### Can I use a different voice model or a specific Vapi assistant?

Yes. Point the workflow at your pre-configured Vapi assistant id and the outbound number you want to call from. You can maintain multiple assistants (clinic, salon, home services) and swap them in.

### What happens when no one answers?

The event is marked No answer and the customer shows up in the Slack roll-up under a list of people to retry later. You can extend the workflow to try again in the afternoon or fall back to SMS.

Use this prompt in General Input: https://www.generalinput.com/prompts/vapi-confirmation-calls-for-todays-appointments