> ## Documentation Index
> Fetch the complete documentation index at: https://docs.soneka.africa/llms.txt
> Use this file to discover all available pages before exploring further.

# Appointments

> Book, reschedule, and cancel Google Calendar appointments from WhatsApp conversations and flows.

Soneka's **Appointments** feature turns a WhatsApp conversation into a real booking on your Google Calendar. Set your availability once, drop an Appointment node into a flow (or share a booking link), and contacts pick a free slot, confirm, and receive a calendar invite — all without leaving WhatsApp.

<Info>
  Appointments require a connected **Google Calendar** on the workspace. Connect it under **Settings → Integrations → Google Calendar** before creating your first appointment type.
</Info>

## What you can do

* Publish one or many **appointment types** (30-min discovery call, 1-hour consult, etc.)
* Define **weekly availability windows** per type (e.g. Mon–Fri, 9:00–17:00 in your timezone)
* Enforce **booking rules** — minimum notice, maximum days ahead, buffer between meetings, and daily caps
* Auto-create a **Google Meet** link on every booking
* Let contacts **cancel or reschedule** from WhatsApp; the calendar event updates in real time
* Trigger **flows** on booked, rescheduled, cancelled, and reminder events

## The booking flow, end to end

<Steps>
  <Step title="Contact picks a date">
    Soneka sends an interactive list of the next available dates (filtered by your availability window and booking rules).
  </Step>

  <Step title="Contact picks a time slot">
    Free slots are calculated live against your Google Calendar — anything already busy is hidden.
  </Step>

  <Step title="Contact confirms details">
    The bot collects any extra fields you defined (name, email, topic) and shows a summary.
  </Step>

  <Step title="Booking is created">
    Soneka writes the event to your Google Calendar, generates a Meet link, and sends a WhatsApp confirmation with the details.
  </Step>

  <Step title="Reminders and follow-up">
    Optional reminder messages fire at the intervals you set (for example, 24 h and 1 h before). Contacts can reply to cancel or reschedule.
  </Step>
</Steps>

## Creating an appointment type

Go to **Automation → Appointments → New appointment type**.

| Setting                  | What it controls                                                                             |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| **Name**                 | Internal label and the title contacts see when booking.                                      |
| **Duration**             | Length of each slot (15, 30, 45, 60, 90, 120 minutes, or custom).                            |
| **Timezone**             | Your working timezone. Slots are shown to the contact in their own timezone when it's known. |
| **Availability windows** | One or more weekly windows, e.g. Mon–Fri 09:00–13:00 and 14:00–17:00.                        |
| **Buffer**               | Minutes of padding before/after each meeting to prevent back-to-back bookings.               |
| **Minimum notice**       | How far in advance a contact must book (e.g. 2 hours).                                       |
| **Booking horizon**      | Maximum days ahead a contact can book (e.g. 30 days).                                        |
| **Daily cap**            | Maximum bookings per day for this type.                                                      |
| **Google Meet**          | Auto-attach a Meet link to every event.                                                      |
| **Attendees**            | Which Google Calendar the event lands on.                                                    |

### Timezone precedence

When showing slots to a contact, Soneka picks the timezone in this order:

1. The **contact's** timezone attribute, if set.
2. The **workspace default** timezone.
3. The appointment type's timezone.

This keeps "3:00 PM" meaningful to your contact wherever they are.

## Using appointments in a flow

Inside the **Flow Builder**, drag in the **Appointment** node. Pick which appointment type it should book, and connect the success / cancelled / no-slot branches to the next steps.

```text theme={null}
[Trigger: keyword "book"] → [Message: "Let's find a time"] → [Appointment: Discovery Call]
                                                                    ├─ booked  → [Message: "See you then!"]
                                                                    ├─ cancelled → [Assign to Sales]
                                                                    └─ no slots → [Message: "No slots this week — try next week?"]
```

You can also **share a booking link** (Automation → Appointments → Share) that opens the same flow from any channel.

## Cancelling and rescheduling

Contacts can type **cancel** or **reschedule** in reply to a confirmation. Soneka matches the message to the most recent booking and:

* **Cancel** — deletes the Google Calendar event, sends a confirmation, and fires the `cancelled` branch of the flow.
* **Reschedule** — offers new slots, updates the same event (keeping the Meet link), and fires the `rescheduled` branch.

Agents can do the same from the **Team Inbox** — open the contact, click the pinned booking card, and choose **Cancel** or **Reschedule**.

## Statuses

| Status          | Meaning                                           |
| --------------- | ------------------------------------------------- |
| **Pending**     | Slot chosen, waiting for the contact to confirm.  |
| **Confirmed**   | Written to Google Calendar.                       |
| **Rescheduled** | Original event updated to a new time.             |
| **Cancelled**   | Removed from Google Calendar.                     |
| **Completed**   | Event's end time has passed with no cancellation. |
| **No-show**     | Manually marked by an agent after the fact.       |

## Troubleshooting

<Warning>
  **"No available slots" even though the calendar is free.** Check that the availability window covers the day you're testing, that the minimum notice hasn't excluded today, and that the workspace's Google Calendar connection hasn't expired (**Settings → Integrations**).
</Warning>

<Warning>
  **Meet link missing.** The connected Google account needs permission to create Meet conferences. Reconnect the calendar and re-grant scopes if needed.
</Warning>

## Related

* [Flow Builder](/features/flow-builder) — drop appointment nodes into any automation.
* [Team Inbox](/features/team-inbox) — manage bookings from the contact panel.
* [Attributes](/features/attributes) — store per-contact timezone to personalize slot times.
