Dograh

AI Voice Agents for Appointment Scheduling: The Booking Loop

AI Voice Agents for Appointment Scheduling: The Booking Loop
Use CaseOctober 24, 2026·9 min read

AI Voice Agents for Appointment Scheduling: The Booking Loop

Vemu Sandeep
Vemu Sandeep·GTM Engineer, Dograh AI

GTM engineer at Dograh working across voice AI and enterprise AI. IIT (BHU) and IIM Visakhapatnam alumnus.

AI voice agents for appointment scheduling book, reschedule and cancel appointments by phone against your own calendar or booking system. During the call, the agent reads live slots, offers two or three, writes the chosen one back and reads it back. It verifies the caller before naming an existing booking, and a call ID stops duplicate bookings.

Key Takeaways

  • Read slots live from your booking system, never from a list in the prompt.
  • A call ID on every booking request lets your system ignore a repeat.
  • Plain reminders go by text; call when a booking needs a yes or a new time.

This post is part of our guide to AI voice agents by use case. The guide's section "Inbound calls: support, booking and new leads" sums this call up in one line: the agent reads live slots from your calendar or booking system during the call, offers two or three, writes the chosen one back and reads it back. Here is that loop in full, for any business, run in Dograh, an open-source, self-hostable voice agent platform.

The booking loop: read, offer, write, read back

Every business books the same way, so build the loop once. The rules for a booking, such as how long a service takes and how far ahead a slot can be taken, stay in your own system. The agent asks for slots that fit and books the one the caller picks. It never decides a rule.

In Dograh, the loop is two HTTP API tools. The first sends the service and the caller's preferred days to your booking system and gets open slots back. Slots fill while calls are happening, so the agent reads them at the moment it offers them, never from a list in the prompt. It offers two or three, because nobody can scan a whole day of times by ear.

Tell the agent in the prompt to read the booking back and wait for a yes before the second tool writes anything. After the write, it reads back what your system confirmed, from the tool's response. If the write fails because someone just took the slot, the agent says so and offers the next opening.

A lookup takes a moment. Each HTTP API tool waits 5 seconds by default and does not retry. After that, the error goes to the agent. The tool's Custom Message, text or a recorded clip, plays once just before it runs, so the caller hears that the agent is checking the calendar.

Dograh has no built-in calendar connector. Calendly, Google Calendar, a practice system or a field-service tool are all reached the same way, through an HTTP API tool against that system's API. Our post on booking meetings mid-call with Calendly shows one such setup step by step. When a new lead's call ends in a booking, the questions before it belong to AI voice agents for lead qualification.

Stopping double bookings when a request repeats

Double bookings come from two different places, and each needs its own fix. Two callers can want the same slot at the same moment. Only your booking system can settle that, by accepting the first write and refusing the second. The agent cannot lock a slot, so it treats a refused write as "just taken" and offers another time.

One call can also send the same booking twice. A request times out and the agent tries again, but the first request had already gone through. To catch that, add a Preset Parameter to the booking tool named workflow_run_id, with the value {{initial_context.workflow_run_id}}. The HTTP API tool sends no Idempotency-Key header, so your system uses that ID, together with the slot, to ignore the second request. If your booking system cannot do that, a small service in front of it can.

Dograh

Open Source Alternative to Vapi / Retell

Self-hosted voice agent platform — no per-minute fees

dograh-hq/dograh

Star on GitHub

Reschedules and cancels run the same loop

A reschedule or a cancel touches a booking that already exists, so it starts with the verify step. A phone number finds the booking but does not prove who is calling, since families and teams share phones. Tell the agent in the prompt to ask for an approved check, such as date of birth or the last digits of a booking reference, before it names anything on file. A brand-new booking needs no check, because nothing on file is read out.

After the check, a reschedule runs the loop again, with one rule about order. Tell the agent in the prompt to book the new slot first and cancel the old one only after the new booking comes back as a success. Cancelling first can leave the customer with no appointment if the new slot was just taken. A cancel writes back at once, so the slot reopens for the next caller.

A four-step comic of a reschedule call: check who is calling, book the new slot, the booking system confirms it, then cancel the old slot. Below, cancelling first leaves no appointment when the new slot is taken.
The agent cannot lock a slot, so between cancelling and rebooking another caller can take the time the customer wanted. Book first and the worst case is two held slots for a moment, never a customer with no appointment.

Requests the rules do not allow, such as an exception to a full calendar or a waived fee, go to a person. Transfer Call works on Twilio, Telnyx and Asterisk ARI. It passes no summary by default; on Twilio it can play a short spoken introduction to both people. Write the details to your system with an HTTP API tool before the transfer. If nobody answers within the 30-second default, the caller stays with the agent; tell it in the prompt to offer a callback.

Confirmation calls: text first, call for an answer

Most reminders do not need a call. In EZ Texting's survey of 959 US adults, 65% said they prefer text for appointment reminders. Dograh sends no texts itself, so the plain reminder comes from your own booking system. The call is for bookings still unconfirmed a day or two before, where you need an answer on whether to keep the booking or change it.

Those calls run as Campaigns. Upload a CSV from your booking system, and each column, such as the appointment time or the service, becomes a variable the agent can use after the verify step. The greeting plays before that step, so it carries the business name and the contact's name only.

Bookings change after the list is uploaded. Pre-Call Data Fetch, set to "Outbound calls only", re-reads the booking once the person answers, so the agent speaks about the current time, not the one in the file. It can change what the agent says, but it never decides whether the call is placed. A running campaign's contact list cannot be edited. To stop calling someone mid-campaign, pause the campaign and start a new one from a corrected list. For lists that change daily, start calls from your own system with the API Trigger, so your system decides who is called.

Calling hours are set by weekday in one time zone per campaign (UTC by default), so split a list that spans time zones. Retries run from 0 to 10, 2 by default. Expect voicemail. Hiya's State of the Call report, a survey of more than 12,000 consumers, found 41% leave unrecognised calls to go to voicemail. Voicemail handling is off by default. Turn it on in the agent's Settings, then under "When voicemail is detected" choose "Disconnect the call" or "Leave a message", and keep any message to the business name and a number to call back.

A booking call the customer places to you generally needs no consent under the robocall rules. A confirmation call you place is different. The FCC's rule, 47 CFR 64.1200, bars any call "using an automatic telephone dialing system or an artificial or prerecorded voice" to a mobile number unless it is "made with the prior express consent of the called party". The FCC's 2024 ruling treats AI-generated voices as artificial voices. So capture consent to calls when the customer books.

Keep offers out of the call. A call that "includes or introduces an advertisement" generally needs prior express written consent under the same rule, so a confirmation that adds an upgrade is a sales call. AI voice agents for upsell and cross-sell covers that call. This is general information, not legal advice; confirm your position with counsel.

Opt-outs live on your list. Dograh keeps no do-not-call list. When a caller opts out, an HTTP API tool writes it to your own list, and you remove those numbers before the next campaign upload. The do_not_call call tag records the request but never blocks a later call.

Self-hosted Dograh has no per-minute platform fee (servers, model keys and phone minutes still cost); Dograh Cloud has a 1¢-a-minute platform fee.

By industry: where scheduling rules get specific

Each industry adds its own rules to this loop. These posts cover them:

Join the Dograh Community

Dograh is an OSS alternative to Vapi. Join our Slack community for queries, releases, best practices & community interactions.

Glossary

Preset Parameter
A value Dograh adds to every request an HTTP API tool sends, filled from the call's own data rather than the conversation. Setting workflow_run_id as one lets your booking system ignore a request that arrives twice from the same call.
Read-back
The agent repeating the day, time and service to the caller before it writes a booking, and the confirmed details after. It catches a misheard time before it reaches your calendar.
Pre-Call Data Fetch
A Dograh setting at the bottom of the Start Call node that asks your system for fresh data once a call connects. On outbound calls it runs after the person answers, and it never decides whether a call is placed.
Prior express consent
The consent the FCC's rule at 47 CFR 64.1200 generally requires before a call with an artificial voice, including an AI voice, reaches a mobile number. A confirmation call that adds an offer generally needs written consent instead.

Frequently Asked Questions

Get started with Dograh

Build, deploy, and scale AI agents with Dograh. Join the community of developers building the future.