Vapi confirmation calls for today's appointments

By General Input

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.

Integrations

  • Vapi
  • Google Calendar
  • Slack

Type

Agentic Task

Categories

  • Operations
  • Customer Support

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsFront desk appointment confirmation board for the next 3 daysWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in production