Octibiz
Demo

Durchsucht Website und Dokumentation gemeinsam. Enter zeigt alle Treffer, Esc schließt.

Scheduling & booking pages

Scheduling & booking pages screen in Octibiz

Overview

Scheduling lets other people book time with you — without back and forth. It has four parts: event types (what can be booked), availability (when), booking pages (where booking happens) and connections (which external calendars count).

The key sentence about busy time: a known appointment takes the slot — even without an external calendar. What is in the system counts. A connected calendar adds to that, it does not replace it.

Core tasks

Create an event type. Duration, buffer, notice, location or video link, and who is invited.

Set availability. A schedule describes the regular hours; overrides for individual days take precedence.

Drag availability in the weekly grid. In the schedule dialog a grid shows the week in half hours. Drag across free cells with the mouse to make the time available; start on an available cell to remove the time again — across several days at once. The grid writes the same time windows as the list below; enter finer times (09:15) there. By keyboard: arrow keys move, the space bar toggles a cell, shift + arrow marks a range that is applied when you release shift. Overnight windows (22:00–02:00) appear lighter on the following day.

See the bookable slots in advance. Next to the grid, Preview of bookable slots lists the start times per weekday for the chosen meeting length, calculated like the booking page — before saving, without busy times and exceptions.

Publish a booking page. The page is publicly reachable and shows only genuinely free times.

Route enquiries. A routing form asks questions and then directs to the matching event type or person.

Book resources along. Where a room or device belongs to an appointment, it is booked with it and blocked for others.

Connect calendars. A connection brings external appointments in as busy time.

Book on behalf of a customer. Under Appointments → Book on behalf choose the event type, day and free time, optionally the host (round robin), plus the channel (phone, walk-in, email) and — for "ask the booker" — the location. The guest receives the same confirmation as for a self-booking.

Embed on your own website. Under Embed on a booking page you find the octibiz-booking element — it encapsulates the booking completely; language and colour are set via attributes.

Automate appointment follow-ups. The central automations know the actions Book appointment, Reschedule appointment and Cancel appointment; the AI assistant finds free times and books after confirmation.

Booked appointments block the host's time in time tracking and workload as well — without an external calendar. A day on which project planning has used up the entire capacity cannot be booked.

Fields in detail

The What it does column answers what changes in the system — not what the field is called. The grey name behind the label is the API field: the same thing runs under that name through automation, import and AI tools.

Event type

FieldRequiredValues / formatWhat it does
Name nameyestextWhat can be booked. The invitee reads this name.
URL slug slugyeslowercase letters, digits, hyphensThe part of the public booking URL. Do not change it once shared — every link sent out runs into nothing.
Description descriptionnotextWhat the invitee reads before choosing.
Colour colornocolour valueColour of the marker in list and calendar.
Duration durationMinutesnominutes, greater than 0How long the appointment lasts. It blocks exactly this time — buffers come on top.
Selectable durations durationOptionsnolist of minute valuesLets the visitor pick between several lengths, 15, 30 and 60 minutes for instance. The default duration is always included, even if it is not listed here.
Type kindnoone_on_one, group, collective, round_robin, managedWho takes the appointment and how many may book. 1:1 is one host per booking, group several invitees on one appointment, collective all hosts at once, round robin distributed in turn, managed set by the team only. This field decides which of the following settings apply at all.
Seats capacitynonumber, greater than 0Group only: how many invitees may take the same appointment. Below 2 it is not a group appointment.
Location locationKindnovideo_meet, video_teams, video_zoom, video_custom, in_person, phone, ask_invitee, customWhere the appointment takes place. The video kinds create the link automatically; with ask invitee the guest states it.
Location details locationConfignoaddress, phone number, link or free text — depending on the locationThe addition to the location: the address for On site, your number for Phone (empty = you call the guest's number), the address of your own video or Zoom link, free text for Custom. It appears in the confirmation, the calendar invitation and the host's calendar. With Zoom, Zoom meeting per appointment (autoCreate) creates a meeting of its own for each appointment — requires the integration “zoom” (server-to-server app); the link then appears in confirmation, invitation and calendar.
Travel buffer travelTimeno`{mode: fixed \routed, minutes: 1–480}`; empty = offOnly for On site and Ask invitee: time for travelling stays free before and after the host’s other on-site appointments. Routed additionally checks the real travel time between the addresses when booking (services under Module settings).
Buffer before bufferBeforeMinutesnominutes, 0 or moreTime blocked before the appointment — travel, preparation.
Buffer after bufferAfterMinutesnominutes, 0 or moreThe same afterwards. Without buffers appointments sit edge to edge and the first delay topples the day.
Minimum notice minNoticeMinutesnominutes, 0 or moreHow short-notice booking may be. The value is in minutes, not hours — one day of notice is 1440, not 24.
Bookable ahead horizonDaysnodays, greater than 0How far into the future booking is allowed.
Booking horizon type horizonKindnorolling (default), fixed range or unlimitedWhat "bookable until" is measured against: rolling counts days from today, "fixed range" opens exactly one span, "unlimited" allows any date.
Fixed booking range dateRangewith a fixed rangefrom date and to date, both inclusiveThe one span bookings are possible in — for a trade fair, a campaign week or an office-hours window. An empty value clears the span again.
Slot increment slotIncrementMinutesnominutes, greater than 0The grid the free times are offered on. At 15 a 60-minute appointment may also start at 9:15; at 60 only on the hour. This field decides how dense the day gets.
Daily limit dailyLimitnonumber; 0 or empty = no limitHow many appointments of this type may happen on one day. Once reached, the day disappears from the offer.
Visibility visibilitynopublic, secretPublic appears on booking pages, secret does not — it stays bookable through the direct link. This is restraint, not access control.
Payment required requiresPaymentnoyes/noWhether payment is taken before confirmation.
Price priceAmountnoamount in cents, 0 or moreWhat the appointment costs. Kept in cents: 4500 is 45.00 EUR.
Form questions questionsnolist of questionsWhat the invitee must state in addition. Every required question costs bookings — ask for what you really need.
Confirmation page confirmationConfignoyour own text or a redirectWhat the visitor sees after booking: your own thank-you text or a redirect to an address of your choice, a page that counts the conversion for instance.
Availability scheduleIdnoa scheduleWhich schedule provides the bookable hours. Empty means the host's default schedule.
Hosts hostEmployeeIdsnoemployeesWho takes the appointment. Only times the person is genuinely free are offered. Round robin and collective need at least two.
Resources resourceIdsnoresourcesRequired rooms and devices. A slot is free only if host and all resources are free.
Recurrence recurrenceRuleno{freq: daily/weekly/monthly, interval, count}; empty = single appointmentThe invitee books all occurrences in one go. It only happens if every occurrence is free — otherwise none.
Follow-up parts additionalPartsnolist of {offsetMinutes, durationMinutes}, at most 10; empty = single partMulti-part appointment, e.g. a 60-minute first meeting and a 30-minute follow-up two weeks later. The offset counts from the start of the first part, on the host's wall clock (also across daylight saving changes). A time is offered only if all parts are free; all are booked in one go. Not combinable with a recurrence.
Create lead createLeadnoyes/noWhether a booking by an unknown visitor creates a lead in the CRM. Without the switch an appointment stays an appointment and the contact is lost.
Convert lead right away convertLeadnoyes/no (default no)The booking counts as qualification: the lead immediately becomes customer (a private customer without a company), contact and deal in the first open stage of the default pipeline; the appointment is linked to them. Without a default pipeline it stays a lead.
Work item per booking workItemKindnotask, ticket or noneWhether every booking also creates a work item — a task to prepare or a ticket to work on. Empty = no work item.
Team distribution roundRobinStrategynorotation (default), loadRound robin only: Rotation gives the booking to whoever went longest without one; By workload to whoever has the least booked appointment time in the seven days before and after.
Trigger a quote createQuotenoyes/noCreates a draft quote for a linked deal. Requires the quotes module; without a deal nothing happens.
Invoice on payment invoiceOnPaymentnoyes/no (default yes)For paid event types: the incoming payment creates an issued invoice recorded as paid for the amount collected. A booker who is not yet a customer is created as a private customer. Requires the invoicing module.
Active activenoyes/noOff means no longer bookable. Existing bookings remain.
Brand brandIdnoone of your brandsUnder which brand the event type is kept and offered.
Template (centrally managed) managedTemplatenoyes/noTurns the event type into a template: never bookable itself, distributed to employees who each get their own copy with themselves as host. A copy cannot become a template.
Locked fields lockedFieldsnolist of fields (name, duration, location, buffers, notice, horizon, questions, price, follow-ups …)Templates only: these fields follow every change of the template into all copies and cannot be changed on a copy. Slug, hosts, schedule and “active” always belong to the copy.

Distribute a template. In the event type list, Distribute to employees opens the selection:

FieldRequiredValues / formatWhat it does
Employees employeesyesone or more employeesEach gets a copy (1:1, themselves as host, address <template>-<name>). Whoever already has one gets no second. If the template is deleted, the copies remain as independent event types.

Event kinds

The kinds themselves (1:1, group, collective, round robin, managed) are fixed because booking calculates by them — none can be created or deleted. Event types → Event kinds maintains what belongs to you: what a kind is called, its colour and order, whether the event type editor offers it and which one is preselected on creation. Permission to change: scheduling.event_type.manage.

FieldRequiredValues / formatWhat it does
Key key–one_on_one, group, collective, round_robin, managedFixed — booking branches on it; therefore read-only.
Label labelyestextThe name of the kind in list and editor.
Colour colornocolour valueMarker colour of the kind.
Order sortOrdernonumberOrder in the editor's selection field.
Preselected isDefaultnoyes/noThis kind is preselected when creating an event type.
Offered activenoyes/noOnly offered kinds can be chosen in the editor; existing event types keep their kind.

Booking page

FieldRequiredValues / formatWhat it does
Name titleyestextThe heading of the public page.
URL slug slugyeslowercase letters, digits, hyphensThe part of the public address /public/booking/…. Do not change it once shared.
Owner type ownerTypenoemployee, resourceWhether the page belongs to a person or to a resource.
Owner ownerIdnoemployee or resourceWhose times the page offers.
Welcome text welcomeTextnotextWhat stands at the top of the page. The sentence that explains what the guest is signing up for.
Image avatarFileIdnofileThe photo or logo of the page.
Styling brandingnoobjectColours and logo for the white-label appearance.
Custom domain customDomainnodomain, e.g. book.your-brand.comServes the page under your own address. Only the host name is stored; a domain belongs to exactly one page. DNS, certificate and redirecting the root address are an operations step — without it the domain points nowhere.
Event types eventTypeIdsnoevent typesWhat can be booked on the page. Only active, public types are shown.
Visibility visibilitynopublic, secretSecret takes the page out of overviews and search engines; it stays reachable.
Brand brandIdnoone of your brandsUnder which brand the page is kept.

Availability schedule

FieldRequiredValues / formatWhat it does
Name nameyestextHow the schedule is called in the selection, e.g. "Business hours".
Owner type ownerTypenoemployee, resourceWhether the schedule belongs to a person or to a resource.
Owner ownerIdnoemployee or resourceWhose times it describes.
Time zone timezonenotime zone (e.g. Europe/Berlin)Which zone the hours are meant in. Set wrongly, every offered slot shifts — the most common reason for "the times are wrong".
Weekly hours weeklynotime windows "HH:MM"–"HH:MM" per weekdayThe regular hours. A day without a window is closed. If the end lies before the start (22:00–02:00) or reads "24:00", the window runs past midnight into the next day. Start equal to end is rejected.
Default schedule isDefaultnoyes/noThe schedule an event type uses when it names none of its own.
Brand brandIdnoone of your brandsUnder which brand the schedule is kept.

Slot preview

The preview turns a (possibly unsaved) weekly plan into bookable start times. It writes nothing; automations and AI tools can use the same request.

FieldRequiredValues / formatWhat it does
Weekly availability weeklynotime windows "HH:MM"–"HH:MM" per weekdayThe plan the slots are calculated for — the same notation as on the schedule. A window without length or in the wrong form is rejected.
Time zone timezonenotime zone; empty = Europe/BerlinWhich zone the times refer to; start times come back in the same zone.
Meeting length durationMinutesno5–1440 minutes, default 30How long a meeting is. A window only offers meetings that fit completely.
Step incrementMinutesno5–1440 minutes, default = lengthHow far apart meetings may start, e.g. every 15 minutes for 30-minute meetings.

Date override

FieldRequiredValues / formatWhat it does
Schedule scheduleUlidyesa scheduleWhich schedule the override applies to.
Date dateyesYYYY-MM-DDThe one day that deviates from the weekly rule. Overrides always take precedence.
Time windows intervalsnopairs "HH:MM"–"HH:MM"; empty = blocked all dayThe deviating hours of that day. Leaving it empty means blocked, not "as usual".
Reason reasonnotextWhy the day deviates. The sentence that answers "why were we closed?" half a year later.

Routing form

FieldRequiredValues / formatWhat it does
Name nameyestextHow the form is called in administration.
URL slug slugyeslowercase letters, digits, hyphensThe part of the public form address.
Description descriptionnotextWhat the visitor reads above the form.
Fields fieldsnolist of key, label, type, requiredThe questions. The rules refer to their keys — rename a key and the rule stops matching.
Rules rulesnolist of conditions and target event typeWhere visitors are sent. The first rule whose conditions all match wins, so the order is part of the logic.
Fallback event type fallbackEventTypeSlugnoslug of an event typeWhere visitors go when no rule matches. Without a fallback they end in a dead end.
Active activenoyes/noWhether the form can be answered publicly.
Brand brandIdnoone of your brandsUnder which brand the form is kept.

Resource (room or device)

FieldRequiredValues / formatWhat it does
Name nameyestextWhat the room or device is called.
Type kindnoroom, equipment, otherRoom, device or other — for grouping the list only.
Capacity capacitynonumber, greater than 0How many people fit in.
Availability scheduleUlidnoa scheduleWhen the resource is bookable at all. Empty means around the clock.
Location locationnotextWhere the resource is.
Active activenoyes/noOff means no longer bookable alongside.
Brand brandIdnoone of your brandsUnder which brand the resource is kept.

Calendar connection

Google and Microsoft are connected through their own sign-in dialog and have no input fields. The following fields apply to CalDAV (iCloud, Nextcloud, Fastmail …) and to subscribed iCal/ICS feeds.

FieldRequiredValues / formatWhat it does
Calendar URL urlyesaddress of the calendar collection or ICS feedWhere the external appointments come from. For CalDAV the direct collection URL, not the server root.
User name usernameyes (CalDAV)textThe sign-in on the CalDAV server.
App password passwordyes (CalDAV)textThe application-specific password — mandatory for iCloud and Fastmail, where the account password does not work. It is stored encrypted and never shown again.
Label labelnotextHow the connection is called in the list.
Room/equipment ownerResourcenoresourceWith the permission “Manage resources”: the connection belongs to the room or equipment. Its appointments take the time from every event type using this resource — from no employee.
Employee ownerEmployeenoemployeeOnly with the permission “Manage calendar connections of all employees”: the ICS/CalDAV connection is created for this employee instead of you. Google and Microsoft are connected by each person themselves (the sign-in belongs to the account holder).

After connecting you choose which calendars count:

FieldRequiredValues / formatWhat it does
Target calendar targetCalendarIdnoa calendar of the connectionWhere confirmed appointments are written. Empty means the account's default calendar.
Busy calendars conflictCalendarIdsnocalendars of the connectionWhich calendars additionally block slots. Empty means the target calendar only.
Pull appointments in syncInboundnoyes/noWhether external appointments count as busy time.
Push appointments out syncOutboundnoyes/noWhether booked appointments are written into the external calendar.

Import a calendar file (.ics)

For calendars without a connection — say an export from practice software or a room plan. Appointments from yesterday to one year ahead block the owner’s time; only start and end are stored. A new file does not replace the old one — remove old files in the list.

FieldRequiredValues / formatWhat it does
File contentyescontent of an .ics file, at most 2 MB, at most 5000 appointmentsThe appointments that block. Recurrences are expanded.
File name fileNamenotextHow the file is called in the list.
Employee ownerEmployeenoemployeeAs for connections: without it yourself, with “Manage calendar connections of all employees” someone else.
Room/equipment ownerResourcenoresourceWith “Manage resources” for a room or equipment.

Blocked time has one source. A known appointment takes the slot even without a foreign calendar connected — and so does an appointment from a connected calendar. That is why no double booking can arise while the connection stands.

Meeting polls

Under CRM → Meeting polls: propose several times, let people vote via link and book the right time for everyone with one click. Voting needs no account; other participants only see the number of votes, never names or addresses. The personal link shown after voting lets people change their vote.

FieldRequiredValues / formatWhat it does
Event type eventTypeyesan event typeProvides location, brand and confirmation emails; booking applies its follow-ups (lead, work item …).
Title titleyestext, up to 150 charactersHeading of the poll.
Description descriptionnotextShown on the voting page.
Duration durationMinutesnominutes, 5–1440Empty = duration of the event type.
Hosts hostEmployeeIdsnoemployeesEmpty = hosts of the event type. Busy hosts are shown per proposal.
Proposals optionsyes1–30 points in time in the futurePeople vote on these times (yes, maybe, no).
Time zone timezonenotime zoneFor emails and display; the voting page shows times in the visitor’s time zone.
Voting until closesAtnopoint in time in the futureAfter it, the page accepts no more votes.
Book proposal optionIdyes (when concluding)a proposalBooks the appointment for everyone who voted “yes” or “maybe” — they receive the confirmation by email. If the time is taken meanwhile, the poll stays open.

Import from Calendly

Under Settings → Scheduling → Scheduling settings (permission platform.import.run). Imports event types and all future appointments including guests — without email to the guests and without a new calendar entry (it is already in the host’s calendar). Hosts are matched by their email address. A second run skips what was already imported. Access: integration “calendly” with the personal access token calendly_token.

FieldRequiredValues / formatWhat it does
Import executenoyes/no (default no)No = dry run: only counts what would be imported and names skipped items with a reason. Yes = writes.
Brand brandIdwith several brandsone of your brandsThe brand to import into.

Settings & permissions

  • Event types: scheduling.event_type.view / .manage
  • Availability: scheduling.schedule.view / .manage
  • Booking pages: scheduling.booking_page.view / .manage
  • Appointments: scheduling.appointment.view_own / .view_team / .view_any / .manage / .reschedule — view_team shows appointments hosted by a colleague from your team
  • Calendar connections: scheduling.connection.manage_own (own) / .manage_any (all employees, cut by their brands)
  • Module settings: scheduling.settings.manage — changing them requires the permission across all brands, since they apply to every brand
  • Meeting polls: scheduling.poll.view / .manage
  • Calendly import: platform.import.run in the target brand

Module settings

Under Settings → Scheduling → Scheduling settings.

FieldRequiredValues / formatWhat it does
Public booking publicBookingEnablednoyes/noOff: booking links and embeds stop answering; booked appointments stay manageable via their link.
Reminder before the appointment reminderLeadMinutesnominutes, 0–43200When the reminder email goes to the guest.
Payment deadline holdTtlSecondsnoseconds, 0–86400If payment does not arrive, the appointment is cancelled afterwards. 0 = never.
Reserve the time while typing slotHoldSecondsnoseconds, 0–86400While a visitor fills in the form, others do not see the chosen time. 0 turns it off.
Cache free times slotCacheSecondsnoseconds, 0–86400Relieves the server with many visitors; every booking clears it immediately. 0 turns it off.
Refresh free times live liveUpdatesEnablednoyes/noReports changes to open booking pages instantly; needs a Mercure hub (operations).
Block fully planned project days blockFullyPlannedDaysnoyes/noDays on which project planning uses up the capacity cannot be booked.
Check external calendars live liveBusyChecknoyes/no (default yes)Queries Google, Microsoft and CalDAV at the moment of booking — an appointment entered moments ago is not overbooked. If the provider is unreachable, the synchronised state applies.
Payment provider paymentProvidernostripe, paypalFor paid event types. Credentials as integration “stripe” (secret_key, webhook_secret) or “paypal” (client_id, client_secret, webhook_id, optional sandbox); secrets are stored encrypted.
Geocoder travelGeocoderUrlnohttp(s) address with a Nominatim interface; empty = offFor the routed travel buffer: turns addresses into coordinates. Addresses are sent to this service — ideally self-hosted.
Routing service travelRouterUrlnohttp(s) address with an OSRM interface; empty = offCalculates the travel time between two coordinates. Without both services the fixed buffer applies.
Email to the host hostMailEnablednoyes/noThe host receives an email (template “Appointment for host”) with a calendar invitation on booking, rescheduling and cancellation — without invitation if their calendar is connected outbound.
Security check when booking captchaModenooff, pow, turnstilepow invisibly solves a puzzle in the browser without any third-party service. turnstile uses Cloudflare Turnstile (needs the OctiConnect module; otherwise the puzzle applies).
Turnstile site key turnstileSiteKeywith TurnstiletextFrom the Cloudflare account.
Turnstile secret turnstileSecretwith TurnstiletextFrom the Cloudflare account; stored encrypted and never shown again.

Module flag: module.scheduling. Setup walks you through the order.

FAQ & troubleshooting

No free times are shown. Check schedule, notice and buffer — often the notice period is longer than the displayed range.

An appointment from the external calendar is missing. Check the connection. If it fails, what is in the system still counts — so you are not unprotected, but external appointments are missing.

Two bookings on the same slot. Does not happen: the booking locks host and time until it is written — whoever confirms a second later gets "time already taken" and picks again.

A visitor is filling in the form. As soon as they pick a time it is reserved for them (default five minutes, setting scheduling.slot_hold_seconds, 0 turns it off) — others do not see it meanwhile. If they go back or the hold expires, the time is free again immediately.

Free times refresh by themselves. The booking page asks again every minute. With scheduling.live_updates_enabled and a configured Mercure hub the server reports every change instantly; without a hub it keeps asking. The list of free times is cached briefly (scheduling.slot_cache_seconds, default 60 seconds) and cleared on every booking, cancellation and change — a booking always checks the current state.

A CRM appointment without an owner. It blocks the time of whoever entered it.

The host gets the booking twice in the calendar. Does not happen: if their calendar is connected outbound, scheduling enters the appointment there and the host email comes without an invitation. The bell in the back office reports the booking as well.

Bookings fail with “security check failed”. With Turnstile the browser must be allowed to reach Cloudflare (operations: Content Security Policy). The built-in puzzle (pow) needs no third-party service.

scheduling.scheduling · Available from version 0.5.6