Service Booking Agent
Your AI booking concierge — slots, classes, and appointments with payment, in chat.
The DomainChat Service Booking Agent is a fully autonomous AI assistant for businesses that book services: sports academies, salons and parlors, clinics and consultants, masterclasses and workshops, and home services like AC repair or plumbing — in fact, any service with a bookable slot. It lists your services live from your booking platform (Cal ID or Cal.com), lets customers pick a date and time on a beautiful in-chat calendar, collects payment through your connected gateway (Razorpay, Stripe, or PayPal), confirms the booking with a reference code right in the chat, and handles cancellations, reschedules, reminders, and follow-ups — on your website chat, WhatsApp, Instagram, Telegram, and Facebook.
Hero screenshot — the agent booking a tennis court slot inside the web chat, with the calendar card open
What the Service Booking Agent Does
Think of it as your front-desk receptionist and your best customer-service agent combined, working 24/7 across every channel. Your services, prices, availability, and payments live on your booking platform — the agent reads them live, so anything you change there appears in the chat instantly. Here's the complete capability map:
Getting Started — The 9-Step Wizard
Creating your Service Booking Agent takes about ten minutes — most of it is setting up your booking platform account (which you may already have). Every step has built-in guidance and tips.
Step 1: Choose the Service Booking archetype
In your workspace, click Create Agent and pick the Service Booking card. This tells DomainChat the agent's one job: turning conversations into booked, paid slots.
Step 2: About Your Service
You tell us about your business — this personalizes the agent from the first message:
- Service / business name — e.g. "Spin Sports Academy" or "Dr. Mehta Clinic".
- Service type — Sports Academy, Salon/Parlor/Spa, Clinic/Doctor/Consultant, Masterclass/Workshops, Home Services/Repairs, or Other. This tailors the agent's tone and examples — but any service with a bookable slot works: tutors, labs, photographers, car detailing, and everything else.
- Contact details — email is mandatory (shown when customers ask how to reach a human, used on confirmations); phone is optional.
- Booking policies — three editable, pre-filled answers (cancellation, refund, reschedule) that become the agent's policy answers. Customers will ask "can I cancel?" — with these, the agent answers in your words.
- CRM — every booking automatically saves the customer (name, email, phone) to your customer list. DC CRM is built in and free; HubSpot, Zoho, or Freshworks available if your team already uses them.
Step 3: Connect Your Booking Platform (required)
This is the heart of the agent — your services, prices, availability, and payments live on Cal ID or Cal.com, and the agent reads them live. Connecting a platform is required to finish the wizard: a booking agent without a booking engine can't take bookings. The step includes business examples (sports academy, clinic, masterclass, salon, home repairs — the one matching your service type is highlighted), provider cards, and an open step-by-step setup guide.
Test Connection is a live check, not a formality: it verifies your booking URL and API key actually work, requires at least one event type to exist, and reports payment readiness — "3 services (2 paid)" means payments will be collected; if all services are free you'll see a note explaining how to set prices and connect a gateway.
Wizard Step 3 — Connect Your Booking Platform: provider cards (Cal ID / Cal.com), business-type examples, and the setup guide open
Steps 4–9: Knowledge, greetings, and branding
Feed the agent your business knowledge — scrape your website, upload documents (price lists, class schedules, facility rules), add custom Q&A, or type notes directly. Then review the AI-generated greeting and starter chips, set your brand color and logo, and deploy. The booking-platform webhook (which pushes payment confirmations back into chats) is registered automatically when you connect — no manual setup.
Wizard Step 2 — About Your Service: service-type picker, contact details, booking policies, and CRM sections
Setting Up Cal ID (recommended for India + international)
Cal ID (cal.id) is the booking platform best suited for Indian and international businesses — it natively supports Razorpay for Indian payments, plus Stripe and PayPal. The free plan is enough to start. Set this up first; the wizard connects to it afterwards.
- 1Create your account at cal.id — the free plan works.
- 2Create one event type per bookable service. Event Types → New. For a sports academy: “Tennis Court — 60 min, ₹500”, “Badminton Court — 60 min, ₹350”. Set duration, price, and your weekly availability for each. Availability is enforced live — the chat calendar only ever shows genuinely open slots.
- 3For group classes, enable “Offer Seats”. Event → Advanced → Offer seats → set capacity (e.g. 100 for a masterclass). The same slot then admits many attendees, each seat-holder gets their own confirmation email, the chat shows “Only N seats left” as it fills, and the class closes automatically when full.
- 4Connect a payment app. In the Cal ID app directory, connect Razorpay (India), Stripe, or PayPal. You can charge the full amount or a deposit. Cancellations trigger automatic refunds through the gateway.
- 5Copy your booking link — it looks like
https://cal.id/your-username. - 6Create an API key: Settings → Developer → API keys → create. Keys start with
calid_. This uses Cal ID’s current REST API (api.cal.id) — the same structure our integration is built on. - 7Paste both into the wizard’s Step 3 and click Test Connection. You should see “Connected — N bookable services”.
Cal ID — creating an event type with duration, price, and availability
Cal ID — the Advanced tab with the Offer Seats toggle and seat count
Cal ID — connecting the Razorpay / Stripe / PayPal payment app in the app directory
Cal ID — Settings → Developer → API keys, showing a calid_ key being created
Setting Up Cal.com (international)
Cal.com (cal.com) is the better-known international option. It supports the same booking model — event types, seats, pricing — with Stripe and PayPal payments. Razorpay is not available on Cal.com, so Indian businesses should prefer Cal ID.
- 1Create your account at cal.com.
- 2Create one event type per service with duration, price (requires a payment app), and availability — exactly as with Cal ID.
- 3Group classes: Event → Advanced → “Offer Seats” → set the number of seats.
- 4Connect Stripe or PayPal from the Cal.com App Store. Paid bookings are charged at checkout; cancellations refund automatically.
- 5Copy your booking link —
https://cal.com/your-username. - 6Create an API key: Settings → Developer → API keys. Keys start with
cal_live_. DomainChat uses Cal.com’s current v2 API (api.cal.com/v2) — the modern, non-deprecated interface. - 7Paste both into the wizard’s Step 3 and Test Connection.
Cal.com — event type editor with price and availability
Cal.com — Settings → Developer → API keys with a cal_live_ key
| Cal ID | Cal.com | |
|---|---|---|
| Best for | India + international | International |
| Payments | Razorpay, Stripe, PayPal | Stripe, PayPal (no Razorpay) |
| Group classes with seats | Yes | Yes |
| API | api.cal.id (current REST API) | api.cal.com/v2 (current) |
| API key format | calid_… | cal_live_… |
| Free plan | Yes | Yes |
How Booking Works — The Customer Journey (Web Chat)
From "I want a slot" to a confirmed, paid booking — entirely inside the chat window:
1. The agent lists your services
When a customer wants to book, the agent shows your services as tappable cards — each with the service name, duration, price badge, and a seats-left badge for group classes. Services the customer already has a confirmed booking for show a BOOKED badge — tapping those switches straight to rescheduling instead of double-booking.
Web chat — the service picker cards with price, seats-left, and BOOKED badges
2. The in-chat calendar
Tapping a service opens an interactive month calendar inside the chat. Only genuinely available dates are pickable (availability comes live from your platform), then the open time slots for that day appear as buttons. The customer picks one and fills their name, email, and phone — this is also what saves them to your CRM automatically.
Web chat — the calendar card with the month grid and time-slot buttons
3a. Free services — instant confirmation
If the service is free, the booking is created on your platform immediately and the chat shows a confirmation ticket: service, date & time, and the booking reference. A calendar invite and email go out from your booking platform at the same moment.
3b. Paid services — checkout inside the chat
If the service has a price, a checkout window opens on top of the chat with the customer's details pre-filled — they pay through your connected gateway (Razorpay, Stripe, or PayPal) without ever leaving the conversation. If their gateway prefers a full page, there's an "Open in new tab" button inside the window. Either way, the moment payment succeeds the window closes itself and the confirmation with the BK- reference appears in the chat automatically — no refresh, no "did it work?".
Web chat — the in-chat payment window over the conversation, with the pre-filled checkout
Web chat — the automatic confirmation card with the BK- reference after payment
Real conversation — paid group class
Real conversation — status by reference
Payments — How Money Moves
DomainChat never touches your money. Payments are collected by your booking platform's hosted checkout using the gateway you connected there (Razorpay, Stripe, or PayPal on Cal ID; Stripe or PayPal on Cal.com). The agent's job is the experience: pre-filled checkout inside the chat, automatic confirmation when payment lands, and clean records of every rupee/dollar.
If a customer abandons checkout
The slot is held as "awaiting payment". After about 30 minutes the agent sends a recovery nudge — an email with the checkout link, and a message in the chat channel if the conversation is still active — exactly once, never spammy. You can also resend the link any time from the dashboard (see below).
Cancelling, Rescheduling & Booking Status
Customers manage their bookings conversationally — the agent finds the booking by reference code, email, phone, or the current chat session.
Web chat — managed right in the conversation
"Cancel my booking" or "move my slot to Sunday" pulls up their booking card with Cancel and Reschedule buttons. Rescheduling re-opens the same in-chat calendar to pick a new time; cancelling is one confirm-tap away. Changes apply on your booking platform instantly, and refunds for paid bookings process automatically.
WhatsApp, Instagram, Facebook, Telegram — the Manage Booking link
On channels without an in-chat calendar, the agent explains that everything about the booking is managed directly on your booking platform and sends a 📅 Manage Booking button — tapping it opens that specific booking's page where the customer cancels or reschedules themselves, with refunds handled there automatically.
Real conversation — cancel on Instagram
When the customer is stuck
Payment won't go through? Their booking can't be found? Cancellation disabled by you? After two failed attempts at anything, the agent stops retrying and proactively shares your business contact details so a human can take over — it never leaves a customer hanging.
Group Classes & Limited Seats
Masterclasses, workshops, batch coaching — any event where many customers share one slot. Enable Offer Seats on the event (Advanced tab) and set the capacity. That's the entire setup:
Omni-Channel Booking
The same agent books on every channel, shaped to what each channel can do:
| Channel | How booking works |
|---|---|
| Website chat | Full experience — service cards, in-chat calendar, payment window, manage cards |
| Numbered service list in chat → prefilled booking link button → books & pays on the platform page → confirmation pushed back into the chat | |
| Instagram / Facebook | Same as WhatsApp, with the Manage Booking link for changes |
| Telegram | Same link-button flow with inline keyboards |
On messaging channels the agent sends a booking link pre-filled with the customer's known details — they tap, pick the slot, and pay on your platform's page. The webhook pushes the confirmation (with the reference code) back into the same chat automatically, even if they left the app.
WhatsApp — the numbered service list reply and the booking link button
The 24-hour messaging window
WhatsApp and Meta channels only allow businesses to message a user within 24 hours of that user's last message. DomainChat respects this strictly: chat reminders and payment nudges are only sent when the conversation is inside the window. Outside it, your booking platform's own email reminders cover the customer — they were already scheduled when the event was created. Confirmations for bookings the customer just made always land inside the window.
Your Booking Policies — Answered in Your Words
During onboarding you saw three editable policy answers — cancellation, refund, and reschedule. These become part of your agent's knowledge: when a customer asks "can I cancel and get my money back?", the agent answers from your text, not generic filler. The defaults are written to match what actually happens on the platforms (automatic refunds on cancellation); edit them to your real rules — e.g. "free cancellation up to 24 hours before the slot" — and the agent will communicate exactly that.
Real conversation — policy question
Your Customer List (CRM)
There's no lead form in this agent — the booking is the capture. The moment a customer starts booking, their name, email, and phone are saved to your CRM:
Workspace → CRM — the customer list auto-populated from bookings
The Bookings Dashboard & Analytics
Open Workspace → Analytics → Bookings (visible on Service Booking agents). Everything the agent did is here:
Workspace → Analytics → Bookings tab — KPI row and charts
Bookings tab — the transactions table with the Awaiting payment filter active and amber rows
Reminders & Follow-Ups
| What | When | Where |
|---|---|---|
| Booking confirmation | Instantly on booking/payment | Chat + email (from your platform) |
| Payment recovery nudge | Once, ~30 min after an abandoned checkout | Email always; chat when inside the 24h window |
| Booking reminder | ~24h before the event | Chat when inside the 24h window; email always (scheduled by your platform) |
Reminders include the booking reference and a Manage Booking link, so a customer who can't make it can move their slot in one tap — which is how reminders quietly reduce no-shows.
Troubleshooting & FAQ
Test Connection fails
- "No bookable services found" — you haven't created an event type on the platform yet. Create one per service (guide above), then retest.
- Invalid URL — use your public booking link (
https://cal.id/usernameorhttps://cal.com/username). - Invalid API key — re-copy from Settings → Developer → API keys; keys start with
calid_(Cal ID) orcal_live_(Cal.com). - "All services are currently free" — not an error. It means no event has a price; if you intend to charge, set prices and connect a gateway on the platform.
Payment succeeded but the chat didn't confirm
The chat polls for a few minutes automatically; the customer can also tap "Check payment status" on the pending card. If it still shows pending, the webhook may have failed — open Workspace → Integrations → Calendar and use Register webhook, or check that the booking appears on your platform's dashboard (the booking itself is safe there).
Why didn't the chat reminder send?
The conversation was outside the 24-hour messaging window (Meta/WhatsApp rules) — the email reminder was still sent by your platform. Nothing is lost; nothing is spammed.
How does the BOOKED badge know?
It matches your confirmed bookings by the current chat session and by the customer's email (recognized across visits and channels). No email verification step — the same trust model as "find my booking". Abandoned (unpaid) bookings don't badge; past bookings clear automatically.
Switching or reconnecting the platform later
Workspace → Integrations → Calendar shows your connection status, webhook health, and a manual webhook register button. Disconnecting is clean — the webhook is removed from your platform account automatically.