How the AI books appointments (and avoids double-booking)
Last updated: September 19, 2026
Every appointment GodSetter books lands on a real calendar in your CRM — no shadow schedule, no "someone will call you to confirm". This article explains where that calendar comes from, how the agent picks a time during a live call, and the guard that keeps two leads from ending up in the same slot.
The calendar belongs to the client
Each client (an imported CRM sub-account) has its own calendar, selected in the client detail page ("GHL Calendar" field). Picking a calendar is part of activation: a client without one cannot be set to active, and no calls fire for it. Agents are templates shared across clients, but every booking targets the calendar of the client the lead belongs to — the agent never has to guess where the appointment goes.
What happens during the call
When the conversation reaches scheduling, the agent reads the calendar's actual free slots — real availability at that moment, not a canned list — and proposes times the lead can genuinely take. The lead picks one, the agent confirms it out loud, and only then books. The agent is handed at most seven candidate slots per request, so it proposes a short, speakable list rather than reading out a whole week.
On an in-app test lead the agent reads the client's real free slots — that is the point of the test — but the booking itself is simulated: nothing is created on the calendar and nothing is written to the CRM.
Which time zone the slots use
Each agent has an Appointments setting in its Retries & transfer tab with two choices. Client's local time (the default) searches and quotes slots in the time zone of the client's sub-account — the right choice for a local business. Lead's time zone translates the slots into the lead's own zone (from the CRM trigger or the contact) and the agent says so out loud ("3 pm your time") — the choice for online or international businesses. When the lead's zone is unknown the client's is used instead.
The model converts nothing. Each free slot reaches the agent as a ready-to-read label in the agent's own language plus an id — "Tuesday 5 May at 15:00", with "your time" appended in lead mode — and booking passes that id back. Existing appointments and the confirmed callback time come with the same kind of label, so what the lead hears is what the platform computed.
The double-booking guard
Between "does Tuesday at 3 work for you?" and "you're booked", the slot can disappear: another lead on a parallel call, or someone on your team, may take it. So the agent never books on stale data. Immediately before confirming, it re-checks that the chosen slot is still free. If it is, the appointment is created. If it was taken in the meantime, the agent does not double-book — it tells the lead the slot is gone and proposes alternatives from a fresh read of the calendar.
What happens right after booking
- The contact is tagged in your CRM. The tag name is configurable in Settings, in the CRM tags card ("Appointment booked" event). Leave the field empty and no tag is applied. See the 13 tag events.
- Scheduled redials are cancelled — whether the agent booked through the calendar tool during the call, or the booking only surfaced in the post-call analysis, every retry or callback still scheduled for that lead is removed. The automatic cadence never calls a lead who has just booked.
One honest caveat: that cleanup covers GodSetter's own scheduled redials. A new trigger fired by your CRM workflow would still start a new call, because a fresh trigger is treated as fresh intent. That is exactly why the booked tag matters: use it as an exclusion filter in the workflow, so contacts carrying it stop matching the trigger and are never re-dialed after booking.
When the contact books outside a call
A funnel link or a human colleague can book the same contact. GodSetter only learns about it if you wire the "Appointment booked (stop calls)" webhook (or the matching marketplace action) to your CRM's native "Customer booked appointment" trigger — see Wire your CRM workflow to an agent. Once wired, the lead is marked booked and every scheduled redial and callback for them is removed.
With the GodSetter Marketplace app installed you get this for nothing: GoHighLevel sends every new appointment of every installed sub-account straight to GodSetter, so the lead is marked booked and its redials cleared with no workflow to wire at all. The webhook above stays a valid alternative, and with both in place the stop simply runs twice — which changes nothing.
If the contact cancels afterwards
A booked appointment can still fall through: the contact cancels it, does not show up, or someone deletes the event. With the GodSetter Marketplace app installed the platform hears it from GoHighLevel and records it on the call that booked it, so the appointment figures you read are honest instead of optimistic.
Where you see it:
- the agent editor's Versions tab shows it next to the bookings of each prompt version ("Booked 12 · Cancelled 3") — a prompt that books a lot and holds nothing is visible;
- the dashboard has a Cancellations card over the last 7 days, read against the appointments booked in the same days;
- the lead's call history marks the call that booked with a Cancelled badge and the date.
What does not happen: no automatic call back. The lead keeps its booked outcome — the cycle really did end with a booking, and that history stays true — no tag or note is written, and no retry is scheduled. Recontacting someone who cancelled is your decision (or your workflow's), not something the platform takes on its own.
Only appointments booked during a call are counted: one taken from a funnel link has no call to attribute it to, so it never enters these figures — which is the point, they answer "of the appointments this agent booked, how many held?".
Agents created before the booking tools
If an agent was created before the CRM tools integration, it does not have the booking tools yet. Open the agent editor, go to the "Data & GHL" tab and press "Sync GHL tools" (saving the agent's settings also syncs them). Agents created after the integration carry the tools from day one.
