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.

Image placeholderHero screenshot — the agent booking a tennis court slot inside the web chat, with the calendar card open

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:

Live service list from Cal ID / Cal.com — always in sync, no retraining
Interactive in-chat calendar — customers pick date & time without leaving the chat
Multi-service picker with prices and seats-left badges
Free services booked instantly, right in the conversation
Paid services with a secure checkout that opens inside the chat
Automatic confirmation in chat the moment payment succeeds
A BK-XXXXXXX booking reference for every booking — quoted anywhere
Cancel & reschedule in chat (web) or via a Manage Booking link (all channels)
Booking status lookups by reference, email, or phone
"Booked" badges — tapping a booked service offers rescheduling
Group classes with limited seats — sold out closes automatically
Cancellation / refund / reschedule policies answered in your own words
Every booking auto-saves the customer to your CRM
Returning visitors recognized across chat, WhatsApp & Instagram
Payment-recovery nudges for abandoned checkouts (email + chat)
Chat reminders before the appointment (messaging-window aware)
Bookings dashboard: revenue, awaiting payments, channels, CSV export
Stuck? The agent hands off to your business contact proactively
Works on website, WhatsApp, Instagram, Telegram, and Facebook

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.

Image placeholderWizard Step 3 — Connect Your Booking Platform: provider cards (Cal ID / Cal.com), business-type examples, and the setup guide open

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.

Image placeholderWizard Step 2 — About Your Service: service-type picker, contact details, booking policies, and CRM sections

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.

  1. 1Create your account at cal.id — the free plan works.
  2. 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.
  3. 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.
  4. 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.
  5. 5Copy your booking link — it looks like https://cal.id/your-username.
  6. 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.
  7. 7Paste both into the wizard’s Step 3 and click Test Connection. You should see “Connected — N bookable services”.
Image placeholderCal ID — creating an event type with duration, price, and availability

Cal ID — creating an event type with duration, price, and availability

Image placeholderCal ID — the Advanced tab with the Offer Seats toggle and seat count

Cal ID — the Advanced tab with the Offer Seats toggle and seat count

Image placeholderCal ID — connecting the Razorpay / Stripe / PayPal payment app in the app directory

Cal ID — connecting the Razorpay / Stripe / PayPal payment app in the app directory

Image placeholderCal ID — Settings → Developer → API keys, showing a calid_ key being created

Cal ID — Settings → Developer → API keys, showing a calid_ key being created

Optional — prevent late cancellations: Cal ID refunds any cancelled paid booking automatically, and it cannot charge a late-cancellation fee by itself. If you want to discourage last-minute cancellations, open the event's Advanced settings and disable guest cancellation/rescheduling — customers must then contact you, and your policy (Step 2) decides what happens. The agent handles this gracefully: it explains the business handles changes personally and shares your contact details.

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.

  1. 1Create your account at cal.com.
  2. 2Create one event type per service with duration, price (requires a payment app), and availability — exactly as with Cal ID.
  3. 3Group classes: Event → Advanced → “Offer Seats” → set the number of seats.
  4. 4Connect Stripe or PayPal from the Cal.com App Store. Paid bookings are charged at checkout; cancellations refund automatically.
  5. 5Copy your booking link — https://cal.com/your-username.
  6. 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.
  7. 7Paste both into the wizard’s Step 3 and Test Connection.
Image placeholderCal.com — event type editor with price and availability

Cal.com — event type editor with price and availability

Image placeholderCal.com — Settings → Developer → API keys with a cal_live_ key

Cal.com — Settings → Developer → API keys with a cal_live_ key

Cal IDCal.com
Best forIndia + internationalInternational
PaymentsRazorpay, Stripe, PayPalStripe, PayPal (no Razorpay)
Group classes with seatsYesYes
APIapi.cal.id (current REST API)api.cal.com/v2 (current)
API key formatcalid_…cal_live_…
Free planYesYes

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.

Image placeholderWeb chat — the service picker cards with price, seats-left, and BOOKED badges

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.

Image placeholderWeb chat — the calendar card with the month grid and time-slot buttons

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?".

Image placeholderWeb chat — the in-chat payment window over the conversation, with the pre-filled checkout

Web chat — the in-chat payment window over the conversation, with the pre-filled checkout

Image placeholderWeb chat — the automatic confirmation card with the BK- reference after payment

Web chat — the automatic confirmation card with the BK- reference after payment

Real conversation — paid group class

CustomerDo you have a video editing masterclass? I want to join.
AgentYes! Our Video Editing Masterclass is a 2-hour live group session at ₹999 — 100 seats per batch, and it fills fast. Shall I set up your seat?
CustomerYes, this Saturday please
AgentHere are our upcoming batches — tap one to grab your seat: 🎬 Video Editing Masterclass — ₹999 (Only 14 seats left) [calendar opens]
Customer[picks Saturday 5 PM, fills details]
Agent✅ Your booking is confirmed! 📋 Video Editing Masterclass 📅 Saturday at 5:00 PM 💵 ₹999 — paid. Reference: BK-7KD2M4XA. You can ask me here anytime to check, reschedule, or cancel — just quote the reference.

Real conversation — status by reference

CustomerIs my booking BK-7KD2M4XA confirmed?
AgentYes — Video Editing Masterclass, this Saturday at 5:00 PM, payment received (₹999, paid). A confirmation email has also been sent to the address you booked with.

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.

Charge the full amount or a deposit (per event, on the platform)
Checkout opens inside the chat with details pre-filled
Confirmation appears in chat automatically the second payment succeeds
Every booking gets a BK-XXXXXXX reference quoted in chat and email
Gateway transaction IDs captured for reconciliation
Cancelled paid bookings refund automatically through the gateway

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).

The honest bit about cancellation windows: your booking platform automatically refunds any cancelled paid booking — but it does not enforce time windows ("free up to 24 hours before") and cannot charge late-cancellation fees. Those parts are your policy, which the agent communicates exactly as you wrote it in the wizard; enforcing exceptions (like keeping a deposit) is handled by you when the customer contacts you. To prevent late self-service changes entirely, disable guest cancellation on the event — then customers must go through you.

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

CustomerI can't make my slot tomorrow, need to cancel
AgentNo problem — I found your booking (Tennis Court, tomorrow 5:00 PM, ref BK-2F9KQW4T). Everything about your booking is managed directly on our booking platform: tap the button below to open it and cancel it there — your ₹500 will be refunded automatically to your original payment method. [📅 Manage Booking]

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:

One slot admits many attendees, each with their own confirmation email
The chat shows "N seats" and "Only N seats left" as the class fills
When the class is full it stops being bookable — automatically
Each booking (and payment) is per seat, per attendee
One person reserving multiple seats in a single checkout isn't the platforms' model — each seat is booked with its own attendee name and email. For "I want 3 seats for me and my friends", the agent guides them to book each seat (or contact you for a group arrangement).

Omni-Channel Booking

The same agent books on every channel, shaped to what each channel can do:

ChannelHow booking works
Website chatFull experience — service cards, in-chat calendar, payment window, manage cards
WhatsAppNumbered service list in chat → prefilled booking link button → books & pays on the platform page → confirmation pushed back into the chat
Instagram / FacebookSame as WhatsApp, with the Manage Booking link for changes
TelegramSame 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.

Image placeholderWhatsApp — the numbered service list reply and the booking link button

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

CustomerWhat if I cancel last minute? Will I get my money back?
AgentCancelled paid bookings are refunded automatically to your original payment method, typically within 5–7 business days. If you know you can't make it, the earlier you cancel the better — want me to open your booking so you can do it now?

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:

Every booking auto-saves the customer — zero extra forms for them
Returning visitors recognized across chat, WhatsApp & Instagram by email/phone
"Find my booking" works because of this — by email, phone, or reference
See who booked but never paid, and follow up
DC CRM built in; HubSpot, Zoho, Freshworks routing available
Image placeholderWorkspace → CRM — the customer list auto-populated from bookings

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:

KPIs — total bookings, confirmed, revenue collected, awaiting payment (with at-risk value), refunded, cancellation rate
Bookings & revenue over time on one chart
Bookings by service and by channel (web, WhatsApp, Instagram…)
Payment mix — paid / awaiting / refunded / free at a glance
Peak booking hours — when to be online
Every transaction with reference, customer, status, and amount
One-click "Awaiting payment" view of abandoned checkouts
Resend payment link straight from a row (email + in-chat, once)
CSV export of any filtered view — your "who bought which" record
Image placeholderWorkspace → Analytics → Bookings tab — KPI row and charts

Workspace → Analytics → Bookings tab — KPI row and charts

Image placeholderBookings tab — the transactions table with the Awaiting payment filter active and amber rows

Bookings tab — the transactions table with the Awaiting payment filter active and amber rows

Reminders & Follow-Ups

WhatWhenWhere
Booking confirmationInstantly on booking/paymentChat + email (from your platform)
Payment recovery nudgeOnce, ~30 min after an abandoned checkoutEmail always; chat when inside the 24h window
Booking reminder~24h before the eventChat 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/username or https://cal.com/username).
  • Invalid API key — re-copy from Settings → Developer → API keys; keys start with calid_ (Cal ID) or cal_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.

Best Practices

One event type per bookable service — the chat list mirrors your platform
Name events with the customer in mind: “Tennis Court — 60 min” beats “TC1”
Set prices on the platform so the chat shows them and payment works
Use Offer Seats for every group class — never manual seat counting
Keep availability current on the platform — the chat only shows real slots
Fill all three policy answers — customers ask about cancellations constantly
Check the Awaiting payment filter weekly and resend links to recover revenue
Feed knowledge: schedules, facility rules, and FAQs make the agent sharper