Terminplanung & Buchungsseiten

Überblick
Die Terminplanung lässt andere Menschen Zeit bei Ihnen buchen — ohne Hin und Her. Sie besteht aus vier Teilen: Termintypen (was gebucht werden kann), Verfügbarkeit (wann), Buchungsseiten (wo gebucht wird) und Verbindungen (welche Fremdkalender mitzählen).
Der wichtigste Satz zur Belegtzeit: Ein bekannter Termin nimmt den Slot — auch ohne Fremdkalender. Was im System steht, gilt. Ein verbundener Kalender ergänzt das, er ersetzt es nicht.
Kernaufgaben
Einen Termintyp anlegen. Dauer, Puffer, Vorlauf, Ort oder Videolink, und wer eingeladen wird.
Verfügbarkeit festlegen. Ein Zeitplan beschreibt die Regelzeiten; Ausnahmen für einzelne Tage gehen vor.
Verfügbarkeit im Wochenraster ziehen. Im Zeitplan-Dialog zeigt ein Raster die Woche in halben Stunden. Ziehen Sie mit der Maus über freie Felder, wird die Zeit verfügbar; beginnen Sie auf einem belegten Feld, nehmen Sie die Zeit wieder weg — über mehrere Tage auf einmal. Das Raster schreibt dieselben Zeitfenster wie die Liste darunter; feinere Zeiten (09:15) tragen Sie dort ein. Mit der Tastatur: Pfeiltasten bewegen, die Leertaste schaltet ein Feld, Umschalt + Pfeil markiert einen Bereich, der beim Loslassen der Umschalttaste übernommen wird. Übernacht-Fenster (22:00–02:00) erscheinen am Folgetag heller.
Die buchbaren Termine vorab sehen. Neben dem Raster steht die Vorschau der Termine: für die gewählte Termindauer die Anfangszeiten je Wochentag, gerechnet wie auf der Buchungsseite — noch vor dem Speichern, ohne Belegungen und Ausnahmen.
Eine Buchungsseite veröffentlichen. Die Seite ist öffentlich erreichbar und zeigt nur wirklich freie Zeiten.
Anfragen verteilen. Ein Routing-Formular stellt Fragen und leitet daraufhin auf den passenden Termintyp oder die passende Person.
Ressourcen mitbuchen. Wo ein Raum oder ein Gerät zum Termin gehört, wird es mitgebucht und ist für andere blockiert.
Kalender verbinden. Eine Verbindung bringt Fremdtermine als Belegtzeit ein.
Im Namen eines Kunden buchen. Unter Termine → Im Namen buchen wählen Sie Termintyp, Tag und freie Zeit, auf Wunsch den Gastgeber (bei Round-Robin), dazu den Kanal (Telefon, vor Ort, E-Mail) und bei „Bucher fragen" den Ort. Der Gast bekommt dieselbe Bestätigung wie bei einer Selbstbuchung.
Auf der eigenen Website einbetten. In der Buchungsseite unter Einbetten steht das Element octibiz-booking — es kapselt die Buchung vollständig, Sprache und Farbe stellen Sie per Attribut ein.
Terminfolgen automatisieren. Die zentralen Automationen kennen die Aktionen Termin buchen, Termin verschieben und Termin absagen; die KI-Unterstützung findet freie Zeiten und bucht auf Bestätigung.
Gebuchte Termine belegen die Zeit des Gastgebers auch in der Zeiterfassung und der Auslastung — ohne Fremdkalender. Ein Tag, an dem die Projektplanung die ganze Kapazität verplant hat, ist nicht buchbar.
Felder im Detail
Die Spalte Was es bewirkt beantwortet, was sich im System ändert — nicht, wie das Feld heißt. Der graue Name dahinter ist das Feld der API: unter ihm läuft dasselbe über Automation, Import und KI-Werkzeuge.
Termintyp
| Feld | Pflicht | Werte / Format | Was es bewirkt | |
|---|---|---|---|---|
Name name | ja | Text | Wofür gebucht werden kann. Der Bucher liest diesen Namen. | |
URL-Kürzel slug | ja | Kleinbuchstaben, Ziffern, Bindestriche | Der Teil der öffentlichen Buchungs-URL. Nach dem ersten Teilen nicht mehr ändern — jeder verschickte Link läuft sonst ins Leere. | |
Beschreibung description | nein | Text | Was der Bucher vor der Auswahl liest. | |
Farbe color | nein | Farbwert | Farbe der Marke in Liste und Kalender. | |
Dauer durationMinutes | nein | Minuten, größer als 0 | Wie lange der Termin dauert. Er belegt genau diese Zeit — Puffer kommen zusätzlich obendrauf. | |
Wählbare Dauern durationOptions | nein | Liste von Minutenwerten | Lässt den Besucher zwischen mehreren Längen wählen, etwa 15, 30 und 60 Minuten. Die Vorgabe-Dauer ist immer dabei, auch wenn sie hier nicht steht. | |
Art kind | nein | one_on_one, group, collective, round_robin, managed | Wer den Termin wahrnimmt und wie viele buchen dürfen. 1:1 ist ein Gastgeber je Buchung, Gruppe mehrere Bucher auf einen Termin, Gemeinsam alle Gastgeber gleichzeitig, Round-Robin reihum verteilt, Verwaltet nur durch das Team gesetzt. Das Feld entscheidet, welche der folgenden Angaben überhaupt greifen. | |
Sitzplätze capacity | nein | Zahl, größer als 0 | Nur bei Gruppe: wie viele Bucher denselben Termin belegen dürfen. Unter 2 ist es kein Gruppentermin. | |
Ort locationKind | nein | video_meet, video_teams, video_zoom, video_custom, in_person, phone, ask_invitee, custom | Wo der Termin stattfindet. Bei den Video-Arten entsteht der Link automatisch, bei Bucher fragen gibt ihn der Gast an. | |
Ort-Angaben locationConfig | nein | Adresse, Rufnummer, Link oder Freitext — je nach Ort | Die Ergänzung zum Ort: bei Vor Ort die Adresse, bei Telefon Ihre Nummer (leer = Sie rufen die Nummer des Gastes an), bei eigenem Video- oder Zoom-Link die Adresse, bei Individuell ein Freitext. Die Angabe steht in der Bestätigung, in der Kalender-Einladung und im Kalender des Gastgebers. Bei Zoom schaltet Zoom-Meeting je Termin (autoCreate) ein eigenes Meeting pro Termin ein — braucht die Integration „zoom“ (Server-to-Server-App); der Link steht dann in Bestätigung, Einladung und Kalender. | |
Fahrzeit-Puffer travelTime | nein | `{mode: fixed \ | routed, minutes: 1–480}`; leer = aus | Nur bei Vor Ort und Bucher fragen: vor und nach anderen Vor-Ort-Terminen des Gastgebers bleibt die Zeit für die Anfahrt frei. Gerechnet prüft beim Buchen zusätzlich die echte Fahrzeit zwischen den Adressen (Dienste unter Modul-Einstellungen). |
Puffer davor bufferBeforeMinutes | nein | Minuten, 0 oder größer | Zeit, die vor dem Termin zusätzlich blockiert wird — Anfahrt, Vorbereitung. | |
Puffer danach bufferAfterMinutes | nein | Minuten, 0 oder größer | Dasselbe danach. Ohne Puffer stehen Termine auf Kante, und die erste Verspätung kippt den Tag. | |
Mindest-Vorlauf minNoticeMinutes | nein | Minuten, 0 oder größer | Wie kurzfristig gebucht werden darf. Die Angabe ist in Minuten, nicht in Stunden — ein Tag Vorlauf ist 1440, nicht 24. | |
Buchbar bis horizonDays | nein | Tage, größer als 0 | Wie weit im Voraus gebucht werden darf. | |
Art des Buchungshorizonts horizonKind | nein | rollend (Vorgabe), fester Zeitraum oder unbegrenzt | Woran sich „buchbar bis" bemisst: rollend zählt Tage ab heute, „fester Zeitraum" öffnet genau eine Spanne, „unbegrenzt" lässt jeden Termin zu. | |
Fester Buchungszeitraum dateRange | bei festem Zeitraum | Von-Datum und Bis-Datum, beide einschließlich | Die eine Spanne, in der gebucht werden kann — für eine Messe, eine Aktionswoche oder ein Sprechstunden-Fenster. Ein leerer Wert räumt die Spanne wieder weg. | |
Zeitfenster-Takt slotIncrementMinutes | nein | Minuten, größer als 0 | In welchem Raster die freien Zeiten angeboten werden. Bei 15 beginnt ein 60-Minuten-Termin auch um 9:15 — bei 60 nur zur vollen Stunde. Das Feld entscheidet, wie dicht der Tag wird. | |
Tageslimit dailyLimit | nein | Zahl; 0 oder leer = kein Limit | Wie viele Termine dieser Art an einem Tag höchstens zustande kommen. Ist es erreicht, verschwindet der Tag aus dem Angebot. | |
Sichtbarkeit visibility | nein | public, secret | Öffentlich erscheint auf Buchungsseiten, Nur per Link nicht — buchbar bleibt es über den direkten Link trotzdem. Das ist kein Zugriffsschutz, sondern Zurückhaltung. | |
Zahlung verlangt requiresPayment | nein | Ja/Nein | Ob vor der Bestätigung gezahlt wird. | |
Preis priceAmount | nein | Betrag in Cent, 0 oder größer | Was der Termin kostet. In Cent geführt: 4500 sind 45,00 EUR. | |
Formularfragen questions | nein | Liste von Fragen | Was der Bucher zusätzlich angeben muss. Jede Pflichtfrage kostet Buchungen — fragen Sie, was Sie wirklich brauchen. | |
Bestätigungsseite confirmationConfig | nein | eigener Text oder Weiterleitung | Was der Besucher nach dem Buchen sieht: einen eigenen Dankestext oder eine Weiterleitung auf eine Adresse Ihrer Wahl, etwa auf eine Seite, die den Abschluss zählt. | |
Verfügbarkeit scheduleId | nein | ein Zeitplan | Welcher Zeitplan die buchbaren Zeiten vorgibt. Leer heißt: der Standard-Zeitplan des Gastgebers. | |
Gastgeber hostEmployeeIds | nein | Mitarbeiter | Wer den Termin wahrnimmt. Angeboten wird nur, wo die Person wirklich frei ist. Round-Robin und Gemeinsam brauchen mindestens zwei. | |
Ressourcen resourceIds | nein | Ressourcen | Pflicht-Räume und -Geräte. Das Zeitfenster ist nur frei, wenn Gastgeber und alle Ressourcen frei sind. | |
Serie recurrenceRule | nein | {freq: daily/weekly/monthly, interval, count}; leer = Einzeltermin | Der Bucher bucht alle Vorkommen in einem Zug. Es kommt nur zustande, wenn jedes Vorkommen frei ist — sonst gar keines. | |
Folge-Teile additionalParts | nein | Liste {offsetMinutes, durationMinutes}, höchstens 10; leer = einteilig | Mehrteiliger Termin, z. B. Erstgespräch 60 Minuten und Nachbesprechung 30 Minuten zwei Wochen später. Der Versatz zählt ab Beginn des ersten Teils, an der Uhrzeit des Gastgebers (auch über die Zeitumstellung). Angeboten wird ein Zeitfenster nur, wenn alle Teile frei sind; gebucht werden alle in einem Zug. Nicht zusammen mit einer Serie. | |
Interessent anlegen createLead | nein | Ja/Nein | Ob die Buchung eines unbekannten Besuchers einen Interessenten im CRM anlegt. Ohne den Schalter bleibt ein Termin ein Termin, und der Kontakt geht verloren. | |
Interessent sofort umwandeln convertLead | nein | Ja/Nein (Vorgabe Nein) | Die Buchung gilt als Qualifizierung: aus dem Interessenten werden gleich Kunde (ohne Firma Privatkunde), Kontakt und Geschäft in der ersten offenen Stufe der Standard-Pipeline; der Termin hängt daran. Ohne Standard-Pipeline bleibt es beim Interessenten. | |
Vorgang je Buchung workItemKind | nein | Aufgabe, Ticket oder nichts | Ob jede Buchung zusätzlich einen Vorgang erzeugt — eine Aufgabe zur Vorbereitung oder ein Ticket zur Bearbeitung. Leer = kein Vorgang. | |
Verteilung im Team roundRobinStrategy | nein | rotation (Vorgabe), load | Nur bei Round-Robin: Reihum gibt die Buchung dem, der am längsten keine bekam; Nach Auslastung dem, der in den sieben Tagen vor und nach dem Termin die wenigste gebuchte Terminzeit hat. | |
Angebot anstoßen createQuote | nein | Ja/Nein | Legt zu einem verknüpften Geschäft einen Angebots-Entwurf an. Braucht das Angebots-Modul; ohne Geschäft passiert nichts. | |
Rechnung bei Bezahlung invoiceOnPayment | nein | Ja/Nein (Vorgabe Ja) | Bei bezahlpflichtigen Terminen: der Zahlungseingang erzeugt eine festgeschriebene, als bezahlt verbuchte Rechnung über den kassierten Betrag. Ist der Bucher noch kein Kunde, wird er als Privatkunde angelegt. Braucht das Faktura-Modul. | |
Aktiv active | nein | Ja/Nein | Aus heißt: nicht mehr buchbar. Bereits gebuchte Termine bleiben bestehen. | |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke der Termintyp geführt und angeboten wird. | |
Vorlage (zentral verwaltet) managedTemplate | nein | Ja/Nein | Macht den Termintyp zur Vorlage: selbst nie buchbar, wird an Mitarbeiter verteilt, die je eine eigene Kopie mit sich als Gastgeber bekommen. Eine Kopie kann keine Vorlage werden. | |
Gesperrte Felder lockedFields | nein | Liste von Feldern (Name, Dauer, Ort, Puffer, Vorlauf, Horizont, Fragen, Preis, Folgen …) | Nur an Vorlagen: diese Felder folgen jeder Änderung der Vorlage in alle Kopien und lassen sich an einer Kopie nicht ändern. Slug, Gastgeber, Zeitplan und „Aktiv“ gehören immer der Kopie. |
Vorlage verteilen. In der Liste der Termintypen öffnet An Mitarbeiter verteilen die Auswahl:
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Mitarbeiter employees | ja | ein oder mehrere Mitarbeiter | Jeder bekommt eine Kopie (1:1, er selbst als Gastgeber, Adresse <vorlage>-<name>). Wer schon eine hat, bekommt keine zweite. Wird die Vorlage gelöscht, bleiben die Kopien als eigenständige Termintypen. |
Terminarten
Die Arten selbst (1:1, Gruppe, Gemeinsam, Round-Robin, Verwaltet) sind fest, weil die Buchung nach ihnen rechnet — anlegen oder löschen lässt sich keine. Termintypen → Terminarten pflegt, was dir gehört: wie eine Art heißt, in welcher Farbe und Reihenfolge sie erscheint, ob der Termintyp-Editor sie anbietet und welche beim Anlegen vorausgewählt ist. Recht zum Ändern: scheduling.event_type.manage.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Schlüssel key | – | one_on_one, group, collective, round_robin, managed | Fest — die Buchung verzweigt darauf; deshalb nur lesbar. |
Bezeichnung label | ja | Text | Der Name der Art in Liste und Editor. |
Farbe color | nein | Farbwert | Kennfarbe der Art. |
Reihenfolge sortOrder | nein | Zahl | Reihenfolge im Auswahlfeld des Editors. |
Vorauswahl isDefault | nein | ja/nein | Diese Art ist beim Anlegen eines Termintyps vorausgewählt. |
Angeboten active | nein | ja/nein | Nur angebotene Arten stehen im Editor zur Wahl; bestehende Termintypen behalten ihre Art. |
Buchungsseite
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Name title | ja | Text | Die Überschrift der öffentlichen Seite. |
URL-Kürzel slug | ja | Kleinbuchstaben, Ziffern, Bindestriche | Der Teil der öffentlichen Adresse /public/booking/…. Nach dem Teilen nicht mehr ändern. |
Inhaber-Art ownerType | nein | employee, resource | Ob die Seite einer Person oder einer Ressource gehört. |
Inhaber ownerId | nein | Mitarbeiter bzw. Ressource | Wessen Zeiten die Seite anbietet. |
Begrüßungstext welcomeText | nein | Text | Was oben auf der Seite steht. Der Satz, der erklärt, worauf sich der Gast einlässt. |
Bild avatarFileId | nein | Datei | Das Foto oder Logo der Seite. |
Gestaltung branding | nein | Objekt | Farben und Logo für den White-Label-Auftritt. |
Eigene Domain customDomain | nein | Domain, z. B. termine.ihre-marke.de | Liefert die Seite unter Ihrer eigenen Adresse aus. Gespeichert wird nur der Rechnername; eine Domain gehört genau einer Seite. DNS, Zertifikat und die Weiterleitung der Wurzeladresse sind ein Betriebsschritt — ohne ihn zeigt die Domain ins Leere. |
Termintypen eventTypeIds | nein | Termintypen | Was auf der Seite gebucht werden kann. Angezeigt wird nur, was aktiv und öffentlich ist. |
Sichtbarkeit visibility | nein | public, secret | Nur per Link nimmt die Seite aus Übersichten und Suchmaschinen, erreichbar bleibt sie. |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke die Seite geführt wird. |
Verfügbarkeits-Zeitplan
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Name name | ja | Text | Wie der Zeitplan in der Auswahl heißt, z. B. „Geschäftszeiten". |
Inhaber-Art ownerType | nein | employee, resource | Ob der Plan zu einer Person oder zu einer Ressource gehört. |
Inhaber ownerId | nein | Mitarbeiter bzw. Ressource | Wessen Zeiten er beschreibt. |
Zeitzone timezone | nein | Zeitzone (z. B. Europe/Berlin) | In welcher Zone die Uhrzeiten gemeint sind. Falsch gesetzt, verschiebt sich jeder angebotene Slot — der häufigste Grund für „die Zeiten stimmen nicht". |
Wochenverfügbarkeit weekly | nein | je Wochentag Zeitfenster „HH:MM"–„HH:MM" | Die Regelzeiten. Ein Tag ohne Fenster ist geschlossen. Liegt das Ende vor dem Beginn (22:00–02:00) oder steht es auf „24:00", läuft das Fenster über Mitternacht in den Folgetag. Beginn gleich Ende wird abgewiesen. |
Standard-Zeitplan isDefault | nein | Ja/Nein | Der Plan, den ein Termintyp ohne eigene Angabe verwendet. |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke der Zeitplan geführt wird. |
Slot-Vorschau
Die Vorschau rechnet einen (auch ungespeicherten) Wochenplan in buchbare Anfangszeiten um. Sie schreibt nichts; dieselbe Abfrage steht Automationen und KI-Werkzeugen zur Verfügung.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Wochenverfügbarkeit weekly | nein | je Wochentag Zeitfenster „HH:MM"–„HH:MM" | Der Plan, für den die Termine gerechnet werden — dieselbe Schreibweise wie am Zeitplan. Ein Fenster ohne Länge oder in falscher Form wird abgewiesen. |
Zeitzone timezone | nein | Zeitzone; leer = Europe/Berlin | In welcher Zone die Uhrzeiten gemeint sind; die Anfangszeiten kommen in derselben Zone zurück. |
Termindauer durationMinutes | nein | 5–1440 Minuten, Vorgabe 30 | Wie lang ein Termin ist. Ein Fenster bietet nur Termine an, die ganz hineinpassen. |
Takt incrementMinutes | nein | 5–1440 Minuten, Vorgabe = Dauer | In welchem Abstand Termine beginnen dürfen, z. B. alle 15 Minuten bei 30 Minuten Dauer. |
Datums-Ausnahme
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Zeitplan scheduleUlid | ja | ein Zeitplan | Für welchen Zeitplan die Ausnahme gilt. |
Datum date | ja | JJJJ-MM-TT | Der eine Tag, der von der Wochenregel abweicht. Ausnahmen gehen der Regel immer vor. |
Zeitfenster intervals | nein | Paare „HH:MM"–„HH:MM"; leer = ganztägig gesperrt | Die abweichenden Zeiten dieses Tages. Leer lassen heißt sperren, nicht „wie immer". |
Grund reason | nein | Text | Warum der Tag abweicht. Der Satz, der in einem halben Jahr die Frage „warum war da zu?" beantwortet. |
Routing-Formular
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Name name | ja | Text | Wie das Formular in der Verwaltung heißt. |
URL-Kürzel slug | ja | Kleinbuchstaben, Ziffern, Bindestriche | Der Teil der öffentlichen Formular-Adresse. |
Beschreibung description | nein | Text | Was der Besucher über dem Formular liest. |
Felder fields | nein | Liste aus Schlüssel, Beschriftung, Art, Pflicht | Die Fragen. Auf ihre Schlüssel beziehen sich die Regeln — wird ein Schlüssel umbenannt, greift die Regel nicht mehr. |
Regeln rules | nein | Liste aus Bedingungen und Ziel-Termintyp | Wohin geleitet wird. Die erste Regel, deren Bedingungen alle zutreffen, gewinnt; die Reihenfolge ist damit Teil der Logik. |
Ersatz-Termintyp fallbackEventTypeSlug | nein | URL-Kürzel eines Termintyps | Wohin geleitet wird, wenn keine Regel greift. Ohne Ersatz endet der Besucher in einer Sackgasse. |
Aktiv active | nein | Ja/Nein | Ob das Formular öffentlich beantwortet werden kann. |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke das Formular geführt wird. |
Ressource (Raum oder Gerät)
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Name name | ja | Text | Wie der Raum oder das Gerät heißt. |
Art kind | nein | room, equipment, other | Raum, Gerät oder Sonstiges — nur zur Gliederung der Liste. |
Kapazität capacity | nein | Zahl, größer als 0 | Wie viele Personen hineinpassen. |
Verfügbarkeit scheduleUlid | nein | ein Zeitplan | Wann die Ressource überhaupt buchbar ist. Leer heißt: rund um die Uhr. |
Ort location | nein | Text | Wo die Ressource steht. |
Aktiv active | nein | Ja/Nein | Aus heißt: nicht mehr mitbuchbar. |
Marke brandId | nein | eine Ihrer Marken | Unter welcher Marke die Ressource geführt wird. |
Kalender-Verbindung
Google und Microsoft werden über den jeweiligen Anmelde-Dialog verbunden und haben keine Eingabefelder. Die folgenden Felder gelten für CalDAV (iCloud, Nextcloud, Fastmail …) und für abonnierte iCal-/ICS-Feeds.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Kalender-URL url | ja | Adresse der Kalender-Kollektion bzw. des ICS-Feeds | Woher die Fremdtermine kommen. Bei CalDAV die direkte Kollektions-URL, nicht die Server-Wurzel. |
Benutzername username | ja (CalDAV) | Text | Die Anmeldung am CalDAV-Server. |
App-Passwort password | ja (CalDAV) | Text | Das anwendungsspezifische Passwort — bei iCloud und Fastmail zwingend, das Konto-Passwort funktioniert dort nicht. Es wird verschlüsselt abgelegt und nie wieder angezeigt. |
Bezeichnung label | nein | Text | Wie die Verbindung in der Liste heißt. |
Raum/Gerät ownerResource | nein | Ressource | Mit dem Recht „Ressourcen verwalten“: die Verbindung gehört dem Raum bzw. Gerät. Seine Termine nehmen jedem Termintyp mit dieser Ressource die Zeit — keinem Mitarbeiter. |
Mitarbeiter ownerEmployee | nein | Mitarbeiter | Nur mit dem Recht „Kalender-Verbindungen aller Mitarbeiter verwalten“: die ICS-/CalDAV-Verbindung entsteht für diesen Mitarbeiter statt für Sie. Google und Microsoft verbindet jeder selbst (die Anmeldung gehört dem Konto-Inhaber). |
Nach dem Verbinden wird ausgewählt, welche Kalender mitzählen:
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Ziel-Kalender targetCalendarId | nein | ein Kalender der Verbindung | Wohin bestätigte Termine geschrieben werden. Leer heißt: der Standardkalender des Kontos. |
Belegtzeit-Kalender conflictCalendarIds | nein | Kalender der Verbindung | Welche Kalender zusätzlich Zeitfenster sperren. Leer heißt: nur der Ziel-Kalender. |
Termine hereinholen syncInbound | nein | Ja/Nein | Ob Fremdtermine als Belegtzeit gelten. |
Termine hinausschreiben syncOutbound | nein | Ja/Nein | Ob gebuchte Termine im Fremdkalender eingetragen werden. |
Kalenderdatei (.ics) einlesen
Für Kalender ohne Anbindung — etwa den Export einer Praxissoftware oder einen Raumplan. Die Termine von gestern bis ein Jahr voraus belegen die Zeit des Inhabers; gespeichert werden nur Anfang und Ende. Eine neue Datei ersetzt die alte nicht — alte Dateien entfernen Sie in der Liste.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Datei content | ja | Inhalt einer .ics-Datei, höchstens 2 MB, höchstens 5000 Termine | Die Termine, die belegen. Serien werden aufgelöst. |
Dateiname fileName | nein | Text | Wie die Datei in der Liste heißt. |
Mitarbeiter ownerEmployee | nein | Mitarbeiter | Wie bei den Verbindungen: ohne Angabe Sie selbst, mit „Kalender-Verbindungen aller Mitarbeiter verwalten“ ein anderer. |
Raum/Gerät ownerResource | nein | Ressource | Mit „Ressourcen verwalten“ für einen Raum oder ein Gerät. |
Belegte Zeit hat eine Quelle. Ein bekannter Termin nimmt den Slot auch dann, wenn kein Fremdkalender angebunden ist — und ein Termin aus einem verbundenen Kalender ebenso. Deshalb kann keine Doppelbuchung entstehen, solange die Verbindung steht.
Gruppen-Terminfinder
Unter CRM → Terminfinder: mehrere Zeiten vorschlagen, per Link abstimmen lassen und den passenden Termin mit einem Klick für alle buchen. Die Abstimmung braucht kein Konto; andere Teilnehmer sehen nur die Zahl der Stimmen, nie Namen oder Adressen. Über den persönlichen Link nach dem Abstimmen lässt sich die eigene Stimme ändern.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Termintyp eventType | ja | ein Termintyp | Liefert Ort, Marke und Bestätigungs-Mails; beim Buchen gelten seine Folgen (Interessent, Vorgang …). |
Titel title | ja | Text, bis 150 Zeichen | Überschrift der Abstimmung. |
Beschreibung description | nein | Text | Steht auf der Abstimmungsseite. |
Dauer durationMinutes | nein | Minuten, 5–1440 | Leer = Dauer des Termintyps. |
Gastgeber hostEmployeeIds | nein | Mitarbeiter | Leer = Gastgeber des Termintyps. Belegte Gastgeber werden je Vorschlag angezeigt. |
Vorschläge options | ja | 1–30 Zeitpunkte in der Zukunft | Zwischen diesen Zeiten wird abgestimmt (ja, vielleicht, nein). |
Zeitzone timezone | nein | Zeitzone | Für Mails und Anzeige; die Abstimmungsseite zeigt die Zeiten in der Zeitzone des Besuchers. |
Abstimmung bis closesAt | nein | Zeitpunkt in der Zukunft | Danach nimmt die Seite keine Stimmen mehr an. |
Vorschlag buchen optionId | ja (beim Abschluss) | ein Vorschlag | Bucht den Termin für alle, die „ja“ oder „vielleicht“ gestimmt haben — sie bekommen die Bestätigung per Mail. Ist die Zeit inzwischen belegt, bleibt die Abstimmung offen. |
Übernahme aus Calendly
Unter Einstellungen → Terminplanung → Einstellungen der Terminplanung (Recht platform.import.run). Übernommen werden Termintypen und alle künftigen Termine samt Gästen — ohne Mail an die Gäste und ohne neuen Kalender-Eintrag (er steht schon im Kalender des Gastgebers). Gastgeber werden über ihre E-Mail-Adresse zugeordnet. Ein zweiter Lauf überspringt, was schon übernommen ist. Zugang: Integration „calendly“ mit dem persönlichen Zugriffsschlüssel calendly_token.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Übernehmen execute | nein | Ja/Nein (Vorgabe Nein) | Nein = Probelauf: zählt nur, was übernommen würde, und nennt Übersprungenes mit Grund. Ja = schreibt. |
Marke brandId | bei mehreren Marken | eine Ihrer Marken | In diese Marke wird übernommen. |
Einstellungen & Rechte
- Termintypen:
scheduling.event_type.view/.manage - Verfügbarkeit:
scheduling.schedule.view/.manage - Buchungsseiten:
scheduling.booking_page.view/.manage - Termine:
scheduling.appointment.view_own/.view_team/.view_any/.manage/.reschedule—view_teamzeigt die Termine, bei denen ein Kollege aus Ihrem Team Gastgeber ist - Kalender-Verbindungen:
scheduling.connection.manage_own(eigene) /.manage_any(aller Mitarbeiter, geschnitten nach deren Marken) - Modul-Einstellungen:
scheduling.settings.manage— ändern nur markenübergreifend, weil sie für alle Marken gelten - Gruppen-Terminfinder:
scheduling.poll.view/.manage - Calendly-Übernahme:
platform.import.runin der Ziel-Marke
Modul-Einstellungen
Unter Einstellungen → Terminplanung → Einstellungen der Terminplanung.
| Feld | Pflicht | Werte / Format | Was es bewirkt |
|---|---|---|---|
Öffentliche Buchung publicBookingEnabled | nein | Ja/Nein | Aus: Buchungslinks und Einbettungen antworten nicht mehr; gebuchte Termine bleiben über ihren Link verwaltbar. |
Erinnerung vor dem Termin reminderLeadMinutes | nein | Minuten, 0–43200 | Wann die Erinnerungsmail an den Gast geht. |
Frist für die Bezahlung holdTtlSeconds | nein | Sekunden, 0–86400 | Bleibt die Zahlung aus, wird der Termin danach abgesagt. 0 = nie. |
Zeit während der Eingabe reservieren slotHoldSeconds | nein | Sekunden, 0–86400 | Solange ein Besucher das Formular ausfüllt, sehen andere die gewählte Zeit nicht. 0 schaltet ab. |
Freie Zeiten zwischenspeichern slotCacheSeconds | nein | Sekunden, 0–86400 | Entlastet den Server bei vielen Besuchern; jede Buchung leert sofort. 0 schaltet ab. |
Freie Zeiten live aktualisieren liveUpdatesEnabled | nein | Ja/Nein | Meldet Änderungen sofort an offene Buchungsseiten; braucht einen Mercure-Hub (Betrieb). |
Voll verplante Projekttage sperren blockFullyPlannedDays | nein | Ja/Nein | Tage, an denen die Projektplanung die Kapazität ausschöpft, sind nicht buchbar. |
Fremdkalender live prüfen liveBusyCheck | nein | Ja/Nein (Vorgabe Ja) | Fragt Google, Microsoft und CalDAV im Moment der Buchung ab — ein eben eingetragener Termin wird nicht überbucht. Ist der Anbieter nicht erreichbar, gilt der synchronisierte Stand. |
Zahlungsanbieter paymentProvider | nein | stripe, paypal | Für bezahlpflichtige Termintypen. Zugangsdaten als Integration „stripe“ (secret_key, webhook_secret) bzw. „paypal“ (client_id, client_secret, webhook_id, optional sandbox); Geheimnisse landen verschlüsselt. |
Geocoder travelGeocoderUrl | nein | http(s)-Adresse mit Nominatim-Schnittstelle; leer = aus | Für den gerechneten Fahrzeit-Puffer: wandelt Adressen in Koordinaten. Adressen gehen an diesen Dienst — am besten selbst betrieben. |
Routing-Dienst travelRouterUrl | nein | http(s)-Adresse mit OSRM-Schnittstelle; leer = aus | Rechnet die Fahrzeit zwischen zwei Koordinaten. Ohne beide Dienste gilt der feste Puffer. |
E-Mail an den Gastgeber hostMailEnabled | nein | Ja/Nein | Der Gastgeber erhält bei Buchung, Verschiebung und Absage eine Mail (Vorlage „Termin für Gastgeber“) mit Kalender-Einladung — die Einladung entfällt, wenn sein Kalender ausgehend verbunden ist. |
Sicherheitsprüfung beim Buchen captchaMode | nein | off, pow, turnstile | pow löst unsichtbar eine Rechenaufgabe im Browser, ganz ohne Fremddienst. turnstile nutzt Cloudflare Turnstile (braucht das Modul OctiConnect; sonst gilt die Rechenaufgabe). |
Turnstile-Websiteschlüssel turnstileSiteKey | bei Turnstile | Text | Aus dem Cloudflare-Konto. |
Turnstile-Geheimnis turnstileSecret | bei Turnstile | Text | Aus dem Cloudflare-Konto; wird verschlüsselt gespeichert und nie wieder angezeigt. |
Modul-Flag: module.scheduling. Die Einrichtung führt Sie unter Einrichtung durch die Reihenfolge.
FAQ & Fehlerbilder
Es werden keine freien Zeiten angezeigt. Prüfen Sie Zeitplan, Vorlauf und Puffer — oft ist der Vorlauf länger als der angezeigte Zeitraum.
Ein Termin aus dem Fremdkalender fehlt. Prüfen Sie die Verbindung. Fällt sie aus, gilt weiterhin, was im System steht — Sie sind also nicht ungeschützt, aber die Fremdtermine fehlen.
Zwei Buchungen auf denselben Slot. Kommt nicht vor: die Buchung sperrt Gastgeber und Zeit, bis sie geschrieben ist — wer eine Sekunde später bestätigt, bekommt „Zeit bereits vergeben" und wählt neu.
Ein Besucher füllt gerade das Formular aus. Sobald er eine Zeit wählt, ist sie für ihn reserviert (Vorgabe fünf Minuten, Einstellung scheduling.slot_hold_seconds, 0 schaltet ab) — andere sehen sie so lange nicht. Geht er zurück oder läuft die Frist ab, ist die Zeit sofort wieder frei.
Die freien Zeiten aktualisieren sich von selbst. Die Buchungsseite fragt jede Minute nach. Mit scheduling.live_updates_enabled und einem eingerichteten Mercure-Hub meldet der Server jede Änderung sofort; ohne Hub bleibt es beim Nachfragen. Die Liste der freien Zeiten wird kurz zwischengespeichert (scheduling.slot_cache_seconds, Vorgabe 60 Sekunden) und bei jeder Buchung, Absage und Änderung sofort geleert — gebucht wird immer gegen den aktuellen Stand.
Ein CRM-Termin ohne Inhaber. Er belegt die Zeit dessen, der ihn eingetragen hat.
Der Gastgeber bekommt die Buchung doppelt in den Kalender. Kommt nicht vor: ist sein Kalender ausgehend verbunden, trägt die Terminplanung den Termin dort ein, und die Gastgeber-Mail kommt ohne Einladung. Die Glocke im Backend meldet die Buchung zusätzlich.
Buchungen scheitern mit „Sicherheitsprüfung fehlgeschlagen“. Bei Turnstile muss der Browser Cloudflare erreichen dürfen (Betrieb: Content-Security-Policy). Die eigene Rechenaufgabe (pow) braucht keinen Fremddienst.