Introduction
The Cal.com integration lets the agent book appointments directly during a phone call. When the caller wants to schedule, the agent invokes thebook_appointment action - without hanging up.
Supported templates
Cal.com bookings are available in templates including:- Beauty salon / hairdresser
- Restaurant (table reservations)
- Healthcare (clinic appointments)
Enabling bookings
1. The onboarding toggle
When creating an agent from a template, enable “Cal.com bookings” in the form. The agent will be configured with thebook_appointment action
right away.
2. Connecting your Cal.com account
After creating the agent:- Go to the agent’s Integrations tab.
- Find the Cal.com section.
- Provide your Cal.com API key and the Event Type ID.
- Save the configuration.
The connection is created once on the Integrations page and only selected
in the agent, so one Cal.com account can serve many agents. The Event Type
ID is the number in the URL while you edit the event type in Cal.com
(
app.cal.com/event-types/**4034029**). Set Host Timezone to the
calendar’s own timezone, e.g. Europe/Warsaw - the caller states a local time
and Cal.com expects UTC.3. Action configuration
- Event type - which Cal.com event to book (e.g. “Haircut”, “Consultation”, “Table reservation”).
- Required data - the agent collects the caller’s details (name, phone, email, preferred time) before booking.
- Confirmation - what the agent says after a successful booking.
What it looks like in a call
- The caller wants to book (e.g. “I’d like to book a haircut on Friday”).
- The agent collects the required details (name, contact, time).
- The agent invokes the
book_appointmenttool. - The platform calls the Cal.com API with the collected data.
- The agent confirms the booking details.
- The booking appears in your Cal.com dashboard.
The phone number and the date
Two things used to sink a booking after the agent had already told the caller it was done. The attendee’s phone. A Cal.com event type can mark the attendee phone required, and a booking without one is then refused. The number is taken, in order, from what the caller gave the agent, the number they are calling from, and whatever the agent collected earlier in the conversation. That last path is the one that matters for calls from the website widget, which have no caller id at all. If no number can be found, the agent is told to ask for one and book again - and does so while still on the call. The date. A language model has no clock, so asked about “Friday” it will pick a year out of the air. The booking tool is given today’s date in the calendar’s timezone, and a booking in the past is refused with today’s date in the message, so the agent re-asks instead of spending the caller’s time. In prompts you can also use{{today}} - see
Template variables.
