# Appointment booked, rescheduled, cancelled

Start a workflow when someone books, moves or cancels an appointment, with the times ready to drop into a message.

Updated Oct 28, 2026. Source: https://smallbusinesschatbot.com/docs/workflows/triggers/appointment-events

## What this does

Small Business Chatbot has three appointment triggers. Each starts a run in every published workflow that uses it, once per appointment event.

- **Labels in the app:** Appointment booked, Appointment rescheduled, Appointment cancelled
- **Fires:** When an appointment is booked, moved or cancelled through your booking page or a website chat with the AI chatbot
- **Carries:** The fields below, as `{{trigger.…}}`
- **Settings:** **Booking source** on **Appointment booked**. The other two have none.

## When they fire

| Trigger | Fires when |
|---|---|
| **Appointment booked** | Someone books on your booking page, or the chatbot books for a visitor in a website chat |
| **Appointment rescheduled** | The booking is moved with the reschedule link, or by asking the chatbot in a website chat |
| **Appointment cancelled** | The booking is cancelled with the cancel link, or by asking the chatbot in a website chat |

They fire for changes made through your booking page, its links and website chats. Edits made straight in your calendar start no runs.

Two things happen on their own, before any workflow runs:

- **Cancelled:** runs of **Appointment booked** workflows for that appointment stop and show **Removed**.
- **Rescheduled:** runs of **Appointment booked** workflows for that appointment take the new time. A **Relative Wait** still waiting moves with it. Steps already done stay done.

## Booking source

On **Appointment booked** only. It decides which bookings start the workflow.

| Option | Starts the workflow for |
|---|---|
| **Any booking source** | Every booking. The default. |
| **Public booking page** | Bookings made on your booking page |
| **Chat calendar agent** | Bookings the chatbot makes in a website chat |

The rest of the list is provider-specific: one option for each type of calendar connection. Each matches every booking that went into that type of calendar, from the booking page or a chat.

![The Appointment booked trigger with Booking source set to Any booking source](https://smallbusinesschatbot.com/static/images/docs/workflows/appointment-events-booking-source-2026-10-28.webp)
*Workflows › Editor, October 2026*

## What they carry

All three carry the same fields. `trigger.trigger_type` says which event it was.

| Variable | Type | What it holds |
|---|---|---|
| `trigger.trigger_type` | text | `appointment_booked`, `appointment_rescheduled` or `appointment_cancelled` |
| `trigger.source` | text | `public_booking_page` or `chat_calendar_agent` |
| `trigger.provider` | text | The calendar connection the booking went into |
| `trigger.occurred_at` | date and time | When the event happened |
| `trigger.contact.*` | object | The person who booked. `first_name`, `last_name`, `full_name`, `email` and `phone` fall back to what they entered when booking. The other fields are listed in [Contact events](https://smallbusinesschatbot.com/docs/workflows/triggers/contact-events#contact-fields). |
| `trigger.appointment.title` | text | The appointment's title |
| `trigger.appointment.description` | text | Its description |
| `trigger.appointment.location` | text | Where it happens, or the meeting link |
| `trigger.appointment.conference_url` | text | The video meeting link, when there is one |
| `trigger.appointment.start_at_iso`, `end_at_iso` | date and time | Start and end, in UTC, as `2026-08-26T18:00:00Z` |
| `trigger.appointment.timezone` | text | Your calendar's time zone, as `America/Toronto` |
| `trigger.appointment.duration_minutes` | number | Length in minutes |
| `trigger.appointment.invitee_emails` | list | The guests' email addresses |
| `trigger.appointment.invitee_phone` | text | The phone number given when booking |
| `trigger.appointment.organizer_email` | text | Your calendar's email |
| `trigger.appointment.management.reschedule_url` | text | The guest's reschedule link, when guests may reschedule. Empty otherwise. |
| `trigger.appointment.management.cancel_url` | text | The guest's cancel link, when guests may cancel. Empty otherwise. |
| `trigger.appointment.previous.start_at_iso`, `end_at_iso` | date and time | The old times. On **Appointment rescheduled** only. |
| `trigger.appointment.event_id` | id | The calendar event's id |
| `trigger.booking_page.*` | object | `id`, `business_slug` and `meeting_slug` of the booking page. Booking page events only. |

## Times ready for messages

These are in `trigger.appointment.timezone`, so a text reads the time the way your customer expects it.

| Variable | Example |
|---|---|
| `trigger.appointment.start_at_local_display` | August 26, 2026 at 2 PM EDT |
| `trigger.appointment.start_at_local_phrase` | 2 PM EDT on August 26, 2026 |
| `trigger.appointment.start_date_local_display` | August 26, 2026 |
| `trigger.appointment.start_time_local_display` | 2 PM EDT, or 2:30 PM EDT when the minutes aren't zero |
| `trigger.appointment.end_at_local_display` | August 26, 2026 at 2:30 PM EDT |
| `trigger.appointment.time_range_local_display` | 2 PM EDT to 2:30 PM EDT on August 26, 2026 |
| `trigger.appointment.timezone_abbreviation` | EDT |
| `trigger.appointment.start_at_local_iso`, `end_at_local_iso` | 2026-08-26T14:00:00-04:00 |

> **Tip:** After an appointment trigger, a new **Send Text** step fills **Recipient phone** with `{{trigger.contact.phone}}`, and a new **Send Email** fills **To** with `{{trigger.contact.email}}`. A **Relative Wait** starts from the appointment's start time.

## Ready-made drafts

In the app, open **Chat Widget › Calendar Booking**. Under **Workflow Integrations**, four buttons create draft workflows on these triggers: **Create Booking confirmation**, **Create 24-hour reminder**, **Create Internal notification** and **Create Cancellation follow-up**. They send email only. Nothing sends until you publish them and switch on **Outbound automation** and **Emails** under **CRM › Contacts › Settings**.

## Used in

- [Calendar booking](https://smallbusinesschatbot.com/docs/user-guides/chat-widget/calendar-booking): the booking page and the ready-made drafts.
- [Wait](https://smallbusinesschatbot.com/docs/workflows/steps/wait): reminders before and after the appointment.
- [Triggers](https://smallbusinesschatbot.com/docs/user-guides/workflows/triggers): how to pick a trigger.
