## Overview

The **public booking page** is the link you send so customers can book time themselves, with no
back-and-forth. It shows only the **free slots** of the chosen event type — computed from your
availability, your busy times (native and Google), and the buffers. The customer picks a slot, answers
the intake questions, and confirms.

On confirmation, ConversaLabs can automatically **open a conversation**, **create a task** with a
reminder, **link to a CRM deal**, and **send a confirmation email** with a **Google Meet** link and an
**.ics** file — each side-effect can be turned on or off per event type.

## Prerequisites

- The **Calendar** module enabled, with at least one **event type** and **availability** configured.
- For the automatic Meet link, an active **Google connection**.
- For paid bookings (optional), the **Payments** module enabled — in that case the slot is held and is
  only confirmed after payment.

## Step by step

1. In the **Calendar**, open the **event type** you want to publish and copy the **public link**.
2. Share the link with the customer (message, email, website, social bio, etc.).
3. The customer opens the page and picks a **date and time** from the free options.
4. If the event type offers more than one option, they choose the **location** of the meeting — for
   example Google Meet, phone, in person, or a custom location. The choice is required and no option
   comes pre-selected.
5. They fill in their contact details: **email is required and must have a valid format**; the **phone
   number is optional** unless the event type requires it. They then answer the **intake questions**, if
   any.
6. (If the event type requires payment) the customer completes the payment to confirm.
7. The customer confirms and receives the **email confirmation** with the details and the invite.
8. You see the new booking in the **Calendar** and inside the contact's conversation.

## Settings & options

- **Link per event type**: each event type has its own link, with its own rules.
- **Intake questions**: custom fields the customer answers when booking. Each question has a **type** —
  short text, long text, **dropdown**, **multiple choice**, checkboxes, number, email, phone or date — and
  the public form renders exactly that control (lists and choices use the **options** you configure).
  Email and phone questions respect the required setting and validate their format when supplied. In the
  editor you can **rename, change the type, reorder and delete** any question.
- **Location / Google Meet**: in person, a manual link, or an automatically generated Meet link.
- **Address / location instructions**: for in-person, phone or custom locations, fill in the address (or
  the link/instructions). It goes into the invite, the confirmation message, the **.ics** file and the
  Google event. Meet needs none — the link is generated on its own.
- **Customer picks the location**: when the event type offers **two or more** location options, the
  page shows a picker to whoever is booking. No option comes selected: the customer has to pick one
  to confirm, and the page tells them if they try to continue without choosing. If the customer picks
  **Google Meet**, the video-call link is generated automatically. With a single option there is no
  question: the event type's fixed location applies. The rule also applies to anyone calling the
  public API directly: without a valid option the booking is refused with a message explaining why.
  Bookings made by an agent or by Maestro use the event type's default location when nobody chooses,
  and that location is not recorded as the customer's choice.
- **Phone / WhatsApp**: the public form offers a country and calling-code picker. A national number is
  interpreted only with the country explicitly chosen; a number pasted with `+` or `00` is treated as
  international. A valid direct number is stored in international E.164 form and can be used as a
  WhatsApp destination for confirmations and reminders. When left blank, email remains the confirmation
  channel. You can tick **"require phone"** on the event type.
- **An invalid phone number is not silently dropped**: when a phone number is supplied, it must be a valid
  direct international number. A countryless number, extension, or invalid format blocks confirmation
  with a correction message; it is not removed or reinterpreted. An empty value is accepted only when the
  phone number is not required, including for direct callers of the public API.
- **A valid number on the contact**: a valid WhatsApp number can be recorded even when the contact
  **already exists**. If the contact already has a different number, the old one remains the identity and
  the new one is recorded on the profile.
- **Email**: the primary email is required. The platform trims surrounding whitespace and normalizes the
  value for validation; blank, whitespace-only, and malformed values block confirmation. This checks
  format only — it does not establish that a mailbox exists or belongs to the visitor, nor DNS/MX or
  message delivery.
- **Extra guests**: enable it to let the customer add other people to the appointment. You set the
  **guest limit**; each guest becomes an attendee and receives the Google invite.
- **Booking side-effects**: conversation, task, CRM deal and confirmation email — per event type.
- **Distribution across agents**: round-robin or collective when there's more than one host.
- **Payment (optional)**: require payment to confirm, or just hold the slot until payment (depends on
  the **Payments** module).

## Use cases

- Put the booking link in your Instagram bio or email signature.
- Drop the link mid-conversation on WhatsApp so the customer can book a demo.
- Take paid bookings (consultations, mentoring) confirmed only after payment.
- Automatically distribute bookings across the agents of a team.

## Tips, limits & best practices

- The page is **unauthenticated** and safe: it shows only free slots, **never** the details of other
  bookings.
- Keep **intake questions** short to reduce drop-off.
- The **phone number** is optional, but worth it: with it the customer gets the confirmation and
  reminders over WhatsApp, which cuts no-shows. Choose the country before entering a national number; for
  an international number, enter `+` or `00`. Without it, email remains the confirmation channel.
- Email validation checks format, not whether a mailbox exists or will receive a message.
- Only offer a **location choice** with options you can genuinely honour: everything ticked on the
  event type shows up for the customer.
- Check the **time zone** — the page shows times in the correct zone for the customer.
- Every confirmed booking becomes a complete record: use the side-effects (conversation, task, deal) so
  you don't lose the follow-up.

## Troubleshooting

- **The Bookings list shows "Google Meet unavailable"**: Google could not create the video call,
  usually because the calendar lost its Google connection. Reconnect the Google account, then agree on
  another location with the customer or edit the event's location.
- **The page shows no slots**: confirm availability, notice rules and buffers on the event type — there
  may be no free windows in the period.
- **The form will not confirm because of email or phone**: enter an email in a valid format. For a phone
  number, choose the country before entering a national number or use `+`/`00` for an international one;
  remove any extension.
- **The customer didn't get the confirmation**: check the email entered and whether the confirmation
  email is on for that event type.
- **The booking didn't create a conversation/task/deal**: check that those side-effects are enabled on
  the event type.
- **Payment didn't confirm the slot**: confirm the **Payments** module is active and the payment was
  completed — the slot is held until confirmation.

## See also

- [Calendar & Scheduling overview](/hc/ajuda/articles/calendar-scheduling-overview-en)
- [Event types, availability and buffers](/hc/ajuda/articles/calendar-scheduling-tipos-de-evento-disponibilidade-buffers-en)
- [Connect Google Calendar (OAuth) and sync](/hc/ajuda/articles/calendar-scheduling-conectar-google-calendar-en)
- [Reschedule, cancel, Google Meet and the .ics file](/hc/ajuda/articles/calendar-scheduling-reagendar-cancelar-meet-ics-en)