# Appointment and booking assistants

Build booking experiences for clinics, salons, spas, and gyms using conversation nodes and Google Calendar availability and event actions.

## Plan availability

| Feature | Free | Starter | Pro | Enterprise |
| --- | --- | --- | --- | --- |
| Active Lines | 2 | 5 | 15 | Unlimited |
| Active workflows | 3 | 10 | 45 | Unlimited |

Allowances follow the [published Chatigram pricing page](https://chatigram.com/pricing/). Your organization’s Billing & Plans screen confirms its subscription and current usage. Plans can change. Plan information reviewed 2026-11-10.


## Choose the right starting point

| Business | Start with | Important booking rule |
| --- | --- | --- |
| Clinic | [Clinic appointment request](/recipes/clinic-appointment-request/) | Collect scheduling information, not a medical history |
| Hair salon or spa | [Salon and spa intake](/recipes/salon-spa-booking/) | Match the service duration and staff or room resource |
| Gym or studio | [Gym session request](/recipes/gym-session-booking/) | Separate a one-to-one session from a class with limited capacity |
| Any appointment business | [Change or cancel a request](/recipes/appointment-change-request/) | Identify the existing booking before changing an event |

Each starter provides a copyable conversation workflow. It collects a request and explains the next step. Add the Google Calendar actions below in your workspace before promising an automatically confirmed appointment.

The intake starters in this guide rely on your team reviewing requests in Inbox. Use a team-supported Line with **Private AI mode** disabled for that process. A [private AI Line](/channels/private-ai/) cannot provide the same human-review path; design another appropriate follow-up before using it for booking requests.

## Connect Google Calendar

Connect the intended Google Calendar account in **App Connections**. Check that it can access the calendar used for appointments. Choose the same account and Calendar ID consistently in the availability and event nodes.

For one calendar per team member, choose the calendar that belongs to the requested person. For a shared calendar, make sure your resource identifiers and scheduling rules describe the intended staff member, room, or service.

## Find available time slots

Add **Find Available Time Slots**. Configure **Google Account**, **Calendar ID**, **Availability Profile**, **Start Date**, **Search Mode**, and **Time Zone**. The node also offers calendar-system and locale options for date formatting.

Use an IANA timezone such as `America/Toronto` or `Europe/Paris`. A timezone name handles local clock changes better than treating a fixed UTC offset as the business timezone.

Here is a sample profile for a single service resource. Replace its identifiers and working rules with your actual setup:

```text
resource-code: SERVICE-A
resource-title: Appointment team
appointment-duration: 30min
unavailable-days: saturday, sunday
available-hours: 09:00-17:00
blocked-times: daily 12:00-13:00
```

For conflict checking, the availability node’s contract asks for at least one resource identifier, such as resource code, title, email, or location. Keep the resource definition consistent with how events are created. A profile containing only working hours is not the same as a complete resource conflict setup.

## Let the customer choose

Present the returned availability in a clear, readable form. Collect the selected date/time and repeat the service, date, local time, and duration before creating an event. Validate the choice rather than treating arbitrary customer text as an already-accepted slot.

If no suitable slot is available, offer a different date or a team follow-up. Do not send a success message just because a search completed.

## Create the Calendar event

Add **Create Google Calendar Event** after the customer confirms the proposed appointment. Configure **Google Account**, **Calendar ID**, **Event Title**, **Start Time**, **End Time**, and **Time Zone**. Use the applicable **Availability Profile** to check the requested slot during creation.

Use a short event title with only the scheduling details your team needs. Optional fields include description, location, attendees, calendar system, and locale. The **Send Updates** choice controls notifications: `all`, `externalOnly`, or `none`. Decide whether invitations should be sent; do not assume an event will email everyone by default.

## Connect all creation outcomes

| Branch | What the assistant should say or do |
| --- | --- |
| **Created** | Confirm the appointment and provide the relevant details. The node exposes Event ID and Event Link for later use. |
| **Unavailable** | Explain that the requested time is unavailable and offer another choice or date. |
| **Error** | Explain that the booking could not be completed and provide a useful way to contact the team. |

Only the Created path should claim that an appointment was booked. Availability can change while a customer decides; handle Unavailable even after a successful slot search. Do not promise that a multi-step workflow provides an atomic reservation lock.

## Reschedule, cancel, and follow up

Use **Show Google Calendar Event** to inspect a known booking, **Update Google Calendar Event** for a reviewed change, and **Delete Google Calendar Event** only for an intended cancellation. Match the correct appointment and confirm the requested operation before changing it.

Retain the Event ID in a suitable authorized record if your process needs later changes. Built-in database availability depends on the plan; the intake starters do not require a database.

## Test before taking bookings

Use a test calendar and controlled recipients. Test an available time, an already-busy time, a request outside working hours, a missing field, a different timezone, and a failed connection. For group classes, also test the capacity rule; a calendar event by itself does not enforce the number of available seats.

Use the [AI prompt library](/ai/prompt-library/) to ask the Chatigram plugin to discover the actual available Calendar nodes and prepare the complete workflow for your organization.
