Sales & channels

Appointment booking

With appointment booking, your AI agent lets customers schedule appointments on their own – in the web widget, via WhatsApp, SMS, email and phone. You set up your services, your staff or rooms and their working hours just once; the agent handles the rest (finding free slots, confirming, sending reminders). This area is ideal for hairdressers, practices, beauty salons, consultancies, workshops – anywhere that books by time slots.

You can find the area in the left-hand sidebar of an agent under the group "Channels""Appointment booking" (calendar icon). Working hours are maintained per resource directly here – the separate "Opening hours" page (group "General") only refers back here for booking.

Important note on order: The tabs only appear after activation. As long as a service, resource or working hours are still missing, the agent cannot offer any slots – there is a yellow checklist at the top that shows exactly what is still missing.


Step 1: Activate appointment booking

When you first open it, you will only see a brief note and a button. Click "Activate" (internally booking_enabled).

  • What it does: Unlocks the booking tools for the AI and shows the tabs. The public booking endpoint only accepts requests after this.
  • Default: Off.
  • Recommendation: Activate as soon as you want to create at least one service and one resource.

After activation, a tab bar appears:

  • "Calendar" – weekly view of all appointments.
  • "Appointments" – list of all bookings with filters and actions.
  • "Reports" – utilisation, revenue and booking sources.
  • "Services" – your bookable offerings (duration, price, capacity …).
  • "Resources" – staff/rooms incl. working hours and blocked times.
  • "Intake" (only visible in expert mode) – the conversation playbook for the AI.

Expert mode: Some fields and the Intake tab only appear when advanced mode is active in the top right. In normal mode you see a deliberately reduced selection.


Step 2: Create services (tab "Services")

A service is what gets booked (e.g. "Men's haircut", "Initial consultation"). Fill in the fields in the "Add" block and click "Add".

  • "Name" (required) – name of the service. 1–255 characters. Without a name, the button is disabled.
  • "Description" – optional additional text.
  • "Duration" (minutes) – appointment length.
  • Allowed: 5–600 minutes. Default: 30.
  • Recommendation: Set it realistically – the duration determines how tightly the calendar is scheduled.
  • "Capacity" – how many people can book the same slot (group/course places).
  • Allowed: 1–200. Default: 1 (individual appointment).
  • For a value > 1, a badge with the number of places appears; the AI then offers the slot multiple times.
  • "Price" – price in the smallest currency unit (e.g. cents). The field label states the unit of your currency. Empty = no price set.
  • Example: 5000 = £50.00.

Only in expert mode, additionally when creating:

  • "Buffer before" / "Buffer after" (in minutes) – preparation/follow-up time kept free after each appointment. 0–240 minutes each, Default: 0.
  • "Cancellation/no-show fee" – fee (in cents) for a (late) cancellation. Empty = none.
  • "Deposit %" – percentage of the price required as a deposit. 0–100, Default: 0 (no deposit). Only takes effect when Stripe is connected and charge-ready (see Step 5).
  • "Tax rate" (VAT in %) – e.g. 19 for Germany. 0–100, pre-filled with your company's country-specific default.
  • "Minimum lead time" – overrides the agent's lead time for this service (in minutes, 0–10080 = up to 7 days). Empty = agent default.

Editing a service

Each service appears as a card. The name can be changed directly in the field. On the right:

  • Pencil icon opens the detail dialog with all fields.
  • Toggle – service active/inactive (is_active, default: active). Inactive services cannot be booked but are retained.
  • Bin – delete. This is blocked with a message if there are existing bookings.
  • "Intake form" (expert mode) – individual pre-booking questions per service (see Step 6).

In the detail dialog you will additionally find:

  • "Flexible duration" – the displayed duration is then only a default value; the actual length can vary. Default: off.
  • "Price incl./excl. tax" – whether the price is understood as gross (incl.) or net (excl.). Default: inclusive.
  • "Payment mode" (payment_mode), only takes effect with payments enabled:
  • "Deposit" (default) – charge the deposit immediately.
  • "Reservation only" (auth_only) – the amount is only held/blocked on the card (Stripe hold), but not yet charged.
  • "Split" – deposit now, remaining amount later.
  • "Full" – the full price immediately.
  • "Allow tips" – shows tip suggestions in the payment step. Default: off.

Note: "Follow-up interval" (re-engagement after X days) and "special-category data" (GDPR Art. 9, e.g. health data) are further fields that exist technically. If they are not visible in your view, they are not enabled – ask support if in doubt.


Step 3: Create resources (tab "Resources")

A resource is anything that can only be scheduled once at a time: a staff member, a chair, a treatment room. Each resource has its own working hours and blocked times – one place, one configuration.

Quick create: Just enter the "Name" in the top field (e.g. "Anna" or "Room 1") and click "Add" (or press Enter). You set everything else in the card. Without at least one resource, nothing can be booked.

Each resource appears as an expandable card:

  • Round photo on the left – click on it to upload an image (PNG, JPG or WebP). The photo appears later e.g. in the booking widget. In the "Details" tab you can remove it again.
  • Name – editable directly in the field.
  • Toggle – resource active/inactive (default: active). Inactive resources are not scheduled.
  • Down arrow – expands the configuration.
  • Bin – delete (blocked if there are existing bookings).

The expanded area has three tabs:

"Details" tab - "Time zone" – time zone name of the resource (e.g. Europe/Berlin). Empty = the agent's default time zone applies. Up to 64 characters. - "Slot grid" (expert mode) – the minute intervals in which start times are offered. 5–120 minutes, Default: 15. Smaller values = more choice, a denser calendar.

"Working hours" tab → see Step 4 "Blocked times" tab → see Step 4


Step 4: Maintain working hours and blocked times

Working hours (weekly, per resource) – "Working hours" tab in the resource card:

  • Step a: Click "Add window". A row appears with weekday, start time and end time (pre-filled Monday, 09:00–17:00).
  • Step b: Choose the weekday and adjust the times. Multiple windows per day are allowed – e.g. 09:00–12:00 and 14:00–18:00 for a lunch break.
  • Step c: Click "Save". Important: Saving replaces the entire weekly schedule of this resource. Whatever is in the list applies – deleted rows are gone afterwards.
  • The end time must be after the start time, otherwise saving is rejected.

Blocked times (one-off time off) – "Blocked times" tab:

  • "Reason" – optional (e.g. "Holiday", "Training"). Up to 255 characters.
  • "Start" / "End" – date and time (required; the end must be after the start).
  • "Add" creates the block; it appears in the list below and can be removed again via the bin.
  • During this period the agent does not offer any slots for this resource.

If you have only one resource, there is no selection switcher – you edit it directly. With multiple resources you select the desired one at the top.


Step 5: Deposits, Stripe holds and refunds (area "Payments")

For deposits, pre-authorisations (holds) or full payments to actually be collected, you need Stripe. You don't set this up in the booking area but in the sidebar under "Payments".

  • Step a: Turn on the "Enable payments" toggle (payments_enabled). On its own, this does not trigger any charge yet.
  • Step b: Click "Connect Stripe" and go through the Stripe onboarding. Only when Stripe reports "charge-ready" (green status badge) is a payment step shown in the booking widget – and only for services with a deposit % > 0.
  • As long as Stripe is not connected/ready, booking simply continues without payment – so nothing breaks if you flip the toggle in advance.
  • Holds: With the "Reservation only" payment mode, the amount is only held on the customer's card, not charged – useful for protecting against no-shows without collecting payment immediately.
  • Refunds: On the payments page you see the most recent payments and can refund individual ones via "Refund". The automatic refund for customer cancellations follows a time window (internally default 24 hours before the appointment); a 0 window means no automatic refund – the deposit then always forfeits.

Step 6: Intake – pre-booking questions and AI conversation guide (expert mode)

Intake form per service ("Intake form" button on the service card): Here you define questions that are asked before confirmation (in the widget, via WhatsApp or by the AI).

  • "Add" creates a question. For each question you set:
  • "Label" (required) – the visible question. The technical "Key" is generated automatically from it.
  • "Type"text, textarea (multi-line), number, boolean (yes/no) or select (selection list).
  • "Required field" – toggle for whether the answer is mandatory.
  • For select: "Options" (one per line, at least one required).
  • Change the order using the arrow keys, and don't forget to click "Save".

Intake playbook (tab "Intake"): a free text (Markdown, up to 8,000 characters) that tells the agent how the booking conversation should run – greeting, order, tone, special cases, confirmation text. Using the buttons at the top (e.g. "Greeting", "Tone", "Confirmation") you insert ready-made building blocks. Empty = the agent uses its default guide.


Managing appointments (tabs "Calendar", "Appointments", "Reports")

  • "Calendar" shows the week at a glance.
  • "Appointments" lists all bookings. At the top you filter by status: confirmed, pending, cancelled, completed, no-show. For each appointment you see the service, time, resource and customer (with a link to the conversation, if available). Actions:
  • For past, confirmed appointments: mark as "Completed" or "No-show".
  • Send icon: resend the confirmation (shows which channels it went through or failed on).
  • X icon: cancel the appointment.
  • Add/edit an internal note (internal only, not visible to the customer).
  • "Reports" shows utilisation per resource, revenue per service and the distribution of booking sources.

Automatic functions in the background

These things run without your finding a UI field for them – good to know:

  • Reminders: By default 24 hours and 1 hour before the appointment (reminder_offsets_minutes = [1440, 60]), by email. Sending tries the configured channels in turn.
  • Lead time & advance booking: Appointments can be booked at the earliest 60 minutes beforehand and up to 60 days in advance (default values). The lead time can be overridden per service (field "Minimum lead time").
  • Double opt-in: Optionally, public bookings start as "pending" and only become "confirmed" after clicking the confirmation link in the email. The link is valid only briefly (approx. 30 minutes); if nobody clicks, the slot is automatically released again. This protects against spam with fake addresses.
  • Waiting list: If the system finds no free slot, the customer can be added to the waiting list with a preferred time range and is notified as soon as something becomes free (through a cancellation, a removed blocked time, etc.).
  • Self-cancellation/rescheduling: Via the link in the confirmation email, customers can cancel or rebook themselves (allowed by default), possibly only outside a cancellation time window.

Tips & pitfalls

  • Take the yellow checklist seriously: Only when a service + resource + working hours are in place can the agent offer slots. Before that, the customer only gets "no appointment available".
  • Working hours = full replacement: "Save" overwrites the resource's entire weekly schedule. Anyone who removes a row and saves has really deleted it.
  • One resource = one calendar: Working hours and blocked times belong in the respective resource card, not on the general "Opening hours" page (that one is for the ordering times).
  • Prices are in cents: 5000 means £50.00, not £5,000. The label states the unit – yet a common mistake.
  • Deposit without Stripe = no effect: A "deposit %" only takes effect if Stripe is connected and charge-ready under "Payments". Without that, the customer simply books without payment.
  • "Reservation only" is a hold, not a charge: The amount is held; it is only charged when you (or the logic) collect it. Avoid confusing it with "Full".
  • Cancellation refund window 0: means "no automatic refund", not "always refund". For "always refund", use a very large value.
  • Set time zones cleanly: Leaving it empty applies the agent's default time zone. For branches in different time zones, be sure to enter it per resource, otherwise the slots won't be correct.
  • Check capacity > 1: An accidentally high capacity value turns an individual appointment into a group slot with many places.
  • Expert mode: If you are missing fields such as buffers, deposit or the Intake tab, advanced mode is usually just disabled.