Expert Guide: Ticketsysteme & GraphQL-Schnittstellen anbinden
Komplexe API-Abfragen für Live-Verfügbarkeiten, Termine und Preise im Chatbot konfigurieren
Dieser Artikel beschreibt einen fortgeschrittenen Anwendungsfall für komplexe Ticketsysteme und GraphQL-POST-Requests. Für Grundlagenwissen zur allgemeinen Funktionsweise und einfachen Einrichtung von REST-Abfragen empfiehlt sich zunächst ein Blick in den Artikel Webhooks anwenden und konfigurieren.
Die automatische Abfrage von freien Plätzen, Startzeiten und Preisen gehört zu den anspruchsvollsten Service-Anwendungsfällen bei Ticket- und Event-Plattformen. Während einfache Schnittstellen häufig über standardisierte REST-GET-Requests funktionieren, setzen viele moderne Ticketsysteme auf GraphQL-Schnittstellen per POST-Methode mit komplexen URL-Abfragen.
Durch die Verknüpfung von Webhooks, einem spezialisierten KI-Agenten und maßgeschneiderten KI-Aktionen (AI Actions) können Live-Anfragen präzise im KI-Chatbot beantwortet werden. Dies umfasst die automatische Umrechnung von Preisangaben (z. B. Cent in Euro), die Auswertung von Zeitzonen, die Filterung von Gruppengrößen sowie die Abfrage in flexiblen Zeitfenstern.
Das Beispiel in diesem Artikel: Stadtmuseum Moiniburg 🏛️🎟️ (zum Ausklappen klicken)
🏛️ Das Szenario
Als durchgehendes Beispiel dient in diesem Artikel das Stadtmuseum Moiniburg. Es verkauft über sein Ticketsystem drei öffentlich buchbare Formate: die tägliche Highlight-Führung durch die Dauerausstellung, die monatliche Taschenlampen-Führung am Abend und die Museums-Rallye für Kinder. Schulklassen, Kindergartengruppen und private Sonderöffnungen laufen dagegen über Anfrage und Angebot, nicht über den Chat. Fragt eine Lehrkraft dennoch im Chat nach Plätzen, behandelt der KI-Chatbot das als Anfrage nach Einzelplätzen in einer öffentlichen Führung.
💬 Das Ergebnis
Frage im Chat: „Habt ihr am Samstag noch Plätze für die Highlight-Führung?"
Antwort des KI-Chatbots: „Am Samstag, 15. August, sind noch Plätze frei: 11:00 Uhr mit 8 freien Plätzen, 14:00 Uhr mit 3 freien Plätzen und 16:00 Uhr mit 12 freien Plätzen. Der Eintritt kostet 12,00 €."
Die Uhrzeiten, die freien Plätze und der Preis stammen dabei live aus dem Ticketsystem. Gepflegt wird im moinAI Hub nichts davon.
🎬 Das Ganze im Video
- Voraussetzungen und System-Bausteine
- Webhook anlegen (GraphQL)
- KI-Agenten konfigurieren
- Event-Katalog als Wissensquelle verknüpfen
- KI-Aktion „Verfügbarkeit“ (Tagesabfrage) anlegen
- KI-Aktion „Nächster Termin“ (weites Zeitfenster) anlegen
- Instruktionen und Systemregeln definieren
- Tests im KI-Playground durchführen
- Veröffentlichung und fortlaufende Wartung
- Optionales Hintergrundwissen: Warum die Vorgaben so lauten
1. Voraussetzungen und System-Bausteine
Für die technische Umsetzung einer Echtzeit-Verfügbarkeitsabfrage werden folgende Komponenten im moinAI Hub erstellt:
- 1x Webhook: Die technische Schnittstelle zum externen Ticketsystem.
- 1x KI-Agent: Die fachliche Zuständigkeit für das Thema „Ticketverfügbarkeit“.
- 1-2x Wissensquellen: Die Webseiten oder Dokumente mit Beschreibungen des Event-Katalogs (im Beispiel die Seiten zu den Führungen des Museums) sowie optional die FAQ-Seite zu Buchungs- und Stornierungsbedingungen.
- 2x KI-Aktionen: Die logischen Verknüpfungen zwischen KI-Agent, Webhook und Regelwerk (eine Aktion für konkrete Tagesabfragen und eine Aktion für die Suche nach dem nächsten freien Termin).
- 1x Instruktionen: Das Regelwerk für das Antwortverhalten des KI-Agenten.
Zusätzliche Rahmenbedingungen:
- Mandantenkennung: Die Domain des Ticketshops (im Beispiel
ticket.stadtmuseum-moiniburg.de). Diese wird als Header-Wert bei Webhook-Aufrufen mitgesendet, damit das externe Ticketsystem die Anfrage zuordnen kann.
Für die in dieser Anleitung beschriebene Lese-Abfrage ist kein API-Schlüssel erforderlich, da die öffentliche Lesesicht des Ticketsystems genutzt wird. Bei geschützten APIs, die eine Schreibberechtigung oder Authentifizierung erfordern, kann ein API-Key oder Bearer-Token im Header hinterlegt werden, wie im Anwendungsbeispiel „Bestellstatus“ des Hauptartikels Webhooks anwenden und konfigurieren gezeigt.
Auch wenn technisch kein Schlüssel erforderlich ist, sollte vor dem Start die Nutzung kurz mit dem Betreiber der Schnittstelle abgestimmt werden. So ist auf beiden Seiten bekannt, dass der KI-Chatbot regelmäßig Termine abfragt.
Die folgenden Schritte sind auf das Schema eines bestimmten Ticketsystems zugeschnitten. Für ein anderes System werden dieselben Angaben gebraucht, die sich in einer einzigen Anfrage beim Anbieter der Schnittstelle sammeln lassen:
- Endpunkt-URL der Schnittstelle, im Beispiel
https://api.ticketsystem-beispiel.de/graphql - Eine funktionierende Beispiel-Abfrage, die die Termine eines Zeitraums zurückliefert
- Die Feldnamen für Startzeit, freie Plätze und Preis, im Beispiel
spanBeginStr,remainingQuotaundcurrentPriceValue - Die Einheit des Preisfelds und die Zeitzone der Startzeit, im Beispiel Cent und Ortszeit
- Die Art der Authentifizierung, sofern eine erforderlich ist
- Die Liste der Event-IDs aller öffentlich buchbaren Formate
Besondere Aufmerksamkeit verdienen die Einheit des Preisfelds und die Zeitzone der Startzeit. Eine Verwechslung bleibt dort im Betrieb am längsten unentdeckt, weil die Antwort auch mit falschen Werten plausibel klingt.
2. Webhook anlegen (GraphQL)
Die technische Anbindung an das Ticketsystem erfolgt über einen zentralen Webhook.
- Der Zugriff erfolgt im moinAI Hub über den Pfad Integrationen > API-Connectors.
- Ein Klick auf Webhook erstellen öffnet eine leere Konfigurationsmaske.
- Die folgenden Feldwerte werden übernommen:
|
Feld |
Wert |
|---|---|
|
Name |
|
|
Methode |
|
|
Ziel-URL |
Vollständiger GraphQL-String, z. B. https://api.ticketsystem-beispiel.de/graphql?query=query%28%24d%3A%5BDateRange%21%5D%2C%24t%3A%5BIdOrNumber%21%5D%2C%24p%3AID%21%29%7BeventTemplatePotentialEvents%28posId%3A%24p%2Cdates%3A%24d%2CeventTemplates%3A%24t%2CincludeQuota%3Atrue%2Cquantity%3A1%2Cfirst%3A100%29%7Bedges%7Bnode%7BspanBeginStr%20name%20remainingQuota%20maxQuota%20currentPriceValue%20defaultPriceValue%7D%7D%7D%7D&variables=%7B%22p%22%3A%22auto%22,%22d%22%3A%5B%22%5B{{von}},{{bis}}%29%22%5D,%22t%22%3A%5B{{#if tourtyp}}{{tourtyp}}{{else}}1001,1002,1003{{/if}}%5D%7D |
|
Body / Payload |
Standard (Default) |
|
Authentifizierung |
Keine |
|
Header 1 |
|
|
Header 2 |
|
|
Cookies verwenden |
Nein |
Die Abfrage in lesbarer Form (zum Ausklappen klicken)
Diese Darstellung dient ausschließlich dem Verständnis und zeigt, was die kodierte Ziel-URL aus der Tabelle tatsächlich abfragt. Eingetragen wird im Webhook die kodierte Fassung.
query($d: [DateRange!], $t: [IdOrNumber!], $p: ID!) {
eventTemplatePotentialEvents(
posId: $p
dates: $d
eventTemplates: $t
includeQuota: true
quantity: 1
first: 100
) {
edges { node {
spanBeginStr # Startzeit als Text in Ortszeit -> für Antworten
name # Name des Events / der Preisvariante
remainingQuota # freie Plätze (0 = ausgebucht)
maxQuota # Gesamtkapazität, nur zur Einordnung
currentPriceValue # aktueller Preis in Cent
defaultPriceValue # Normalpreis in Cent
} }
}
}
Variablen
{ "p": "auto",
"d": ["[2026-08-15,2026-08-16)"], # Tag, Ende exklusiv
"t": [1001,1002,1003] } # IDs der Highlight-Führung


Technische Vorgaben für die Ziel-URL
- Platzhalter und Parameter gehören zusammen: Die Platzhalter
{{von}},{{bis}},{{tourtyp}}und{{sprache}}in der Ziel-URL werden zur Laufzeit durch die Werte der gleichnamigen Parameter der KI-Aktion ersetzt. Die Namen müssen exakt übereinstimmen. Wird ein Parameter in der KI-Aktion umbenannt, muss der Platzhalter in der Ziel-URL mit umbenannt werden. Andernfalls bleibt der Wert leer, und die Abfrage liefert ein falsches Ergebnis, ohne dass ein Fehler gemeldet wird. Angelegt werden die Parameter in den beiden KI-Aktionen. - HTTP-Methode POST: Auch für lesende Abfragen erwartet die GraphQL-Schnittstelle zwingend die Methode
POST. EinGET-Request führt zu einem Serverfehler. - URL-Kodierung beibehalten: Zeichen wie
%7Boder%7Ddürfen nicht in unkodierte geschweifte Klammern übersetzt werden, da diese sonst als eigene Hub-Platzhalter interpretiert werden. - Standard-Fallback im
tourtyp: Der Block{{#if tourtyp}}...{{else}}1001,1002,1003{{/if}}stellt sicher, dass bei einer Suchanfrage ohne explizite Event-Nennung automatisch die Standard-Events abgefragt werden (im Beispiel die drei Preisvarianten der Highlight-Führung). Ohne diesen Vorgabewert würde die Schnittstelle auch interne oder nicht öffentliche Gruppenformate zurückliefern.
Der Webhook sollte direkt nach dem Anlegen einmal über die Testfunktion des Hubs ausgeführt werden. Erwartet wird der Status 200 mit einem data-Block. Eine Antwort mit dem Schlüssel errors bedeutet in der Regel, dass die Ziel-URL nicht vollständig oder nicht unverändert übernommen wurde. Wie das Testen von Webhooks grundsätzlich funktioniert, beschreibt der Abschnitt Testen und Validierung im Hauptartikel.

💡 Häufigstes Fehlerbild
Die KI-Aktion wird im KI-Playground ausgelöst, liefert aber keine Verfügbarkeit. Die Ursache liegt dann fast immer in der Ziel-URL. Hier genügt ein abgeschnittenes Zeilenende oder eine beim Kopieren dekodierte geschweifte Klammer. In diesem Fall die URL erneut als einen einzigen String einfügen und den Webhook danach erneut testen.
3. KI-Agenten konfigurieren
Für das Thema „Ticketverfügbarkeit“ wird ein eigener, spezialisierter KI-Agent angelegt. Eine Vermischung mit allgemeinen FAQ-Agenten ist nicht zu empfehlen, da die spezifischen Verhaltensregeln ausschließlich für Verfügbarkeitsfragen gelten sollen.
Die Erstellung eines KI-Agenten ist im Hauptartikel KI-Agenten anlegen ausführlich beschrieben.
- Die Erstellung erfolgt im Menüpunkt Knowledge Base über das Plus-Symbol.
- Die Felder werden folgendermaßen definiert:
| Feld | Wert / Vorgabe |
|---|---|
| Name | Ticketverfügbarkeit |
| Zweck des Agenten | Der Agent soll alle Fragen zu freien Plätzen, buchbaren Uhrzeiten und Terminen von Führungen und Veranstaltungen im Museum beantworten, einschließlich der Verfügbarkeit für Gruppen einer bestimmten Personenzahl. |
| Beispielfragen |
Sind am Samstag noch Plätze für die Highlight-Führung frei? |

Die Beschreibung des KI-Agenten dient dem System als Entscheidungsgrundlage, ob eine Anforderung bei diesem Agenten verarbeitet wird. Sie sollte die gängigen Begriffe enthalten, die Nutzer:innen im Chat verwenden, im Beispiel also „Führung“ und „Rallye“ statt der internen Formatbezeichnungen des Ticketsystems.
Neu angelegte KI-Agenten sind zunächst deaktiviert. Für die Prüfung im KI-Playground wird der KI-Agent in der Testumgebung (Staging) aktiviert; die Freischaltung für den Live-Betrieb erfolgt erst im Kapitel zur Veröffentlichung.
4. Event-Katalog als Wissensquelle verknüpfen
Der Webhook liefert dynamische Zahlen wie Uhrzeiten, freie Plätze und Preise, enthält jedoch keine redaktionellen Erklärungen zu Event-Inhalten, Dauer oder Zielgruppen. Damit der KI-Agent auch inhaltliche Rückfragen beantworten kann (z. B. „Was ist der Unterschied zwischen der Highlight-Führung und der Taschenlampen-Führung?“), werden ihm in der Knowledge Base passende Wissensquellen zugeordnet:
- Die Übersichtsseite des Event-Katalogs, im Beispiel „Führungen und Termine" (https://stadtmuseum-moiniburg.de/fuehrungen), sowie die Detailseiten aller öffentlich buchbaren Angebote.
- Die FAQ-Seite zu Buchungs- und Stornierungsbedingungen, im Beispiel „Tickets, Buchung und Storno" (https://stadtmuseum-moiniburg.de/service/tickets-faq).
Das Einlesen läuft asynchron: Eine Wissensquelle ist erst nutzbar, sobald sie den Status „trainiert“ erreicht hat.

Gezielte Verlinkungen einzelner Unterseiten liefern präzisere Ergebnisse als das Einlesen der gesamten Webseite, da Navigations- und Footer-Texte die Antwortqualität verwässern können.
5. KI-Aktion „Verfügbarkeit“ (Tagesabfrage) anlegen
Die KI-Aktion verbindet den angelegten Webhook mit dem KI-Agenten. Diese erste Aktion verarbeitet Anfragen, die sich auf ein bestimmtes Datum beziehen (im Beispiel „Habt ihr am Samstag noch Plätze für die Highlight-Führung?“).
Allgemeine Details zu Funktionsweise und Typen finden sich im Artikel KI-Aktionen anlegen.
- Der Aufruf erfolgt im moinAI Hub über den Pfad Knowledge Base > RAG > Add Action in der Karte Actions & Follow-Up.
- Unter Tool auswählen wird der Webhook „Verfügbarkeit“ ausgewählt.
- Die folgenden Konfigurationen werden hinterlegt:
- Aktionsname: Verfügbarkeit
- Toolbeschreibung: Prüft freie Plätze, buchbare Startzeiten und Preise eines Events an EINEM Tag. Nutze das Tool, wenn der Nutzer wissen will, ob ein Event buchbar ist, wie viele Plätze frei sind oder welche Uhrzeiten es gibt. Frage immer genau einen Tag ab: bis = der Tag nach von. Bei Fragen über mehrere Tage prüfe den ersten Tag und biete weitere Tage einzeln an.
- Anweisungen danach: Uhrzeiten nur aus spanBeginStr, nie aus spanBegin (UTC). currentPriceValue.amount ist in Cent: 1200 = 12,00 EUR, durch 100 teilen. remainingQuota ist die Zahl freier Plätze, 0 heißt ausgebucht. Hat der Nutzer eine Personenzahl genannt, nenne nur Termine, deren remainingQuota diese Zahl erreicht oder übersteigt. Ein Termin mit weniger freien Plätzen darf nicht vorkommen, auch nicht als früheste oder späteste Zeit. Reicht kein Termin, sage das und nenne die größte verfügbare Platzzahl. Nenne bis zu fünf Startzeiten konkret, bei mehr die früheste und späteste. Erfinde keine Zwischenzeiten. Ist die Liste leer, wird das Event an diesem Tag nicht angeboten. Antworte dann: "Am [Datum] wird die [Event] nicht angeboten. Soll ich den nächsten Termin für dich suchen?" Verwende nicht "fällt aus", "entfällt" oder "ausgebucht". Enthält die Antwort errors oder kein data, nenne keine Termine und verweise auf die Buchungsseite. Diese Antwort ist abschließend, rufe danach kein weiteres Tool auf.
Es gibt ein Zeichenlimit im Feld „Anweisungen danach". Lässt sich der Text nicht vollständig speichern, sollte zuerst die Vorgabe zur Anzahl der genannten Startzeiten entfallen. Erhalten bleiben die Regeln zu Feldern und Einheiten, der Gruppenfilter und der vorgegebene Satzbau für Tage ohne Termin. Die ersten sichern die Richtigkeit der Zahlen, an den beiden anderen hängt je ein Testfall aus der Abnahmeliste.

Parameter für die Tagesabfrage
Über das Plus-Symbol im Abschnitt Parameter werden vier Parameter vom Typ Zeichenfolge angelegt:
| Parameter | Beschreibung |
|---|---|
von |
Startdatum des gewünschten Tages im Format YYYY-MM-DD. Relative Angaben wie heute, morgen oder nächsten Samstag in dieses Format umwandeln. Ohne Datumsangabe des Nutzers das heutige Datum verwenden. Das Format muss exakt stimmen. |
bis |
Enddatum im Format YYYY-MM-DD, exklusiv (nicht enthalten). Setze es IMMER auf den Tag NACH von, z. B. von=2026-08-15, bis=2026-08-16. Auch bei Fragen über mehrere Tage immer nur einen einzelnen Tag abfragen. |
tourtyp |
Kommagetrennte ID-Liste des Events (ein Event kann mehrere Preisvarianten mit jeweils eigener ID haben). Zuordnung: Highlight-Führung → 1001,1002,1003 ; Taschenlampen-Führung → 1004,1005 ; Museums-Rallye für Kinder → 1006. Nennt der Nutzer kein Format, den Parameter leer lassen, dann greift der Vorgabewert aus der Ziel-URL und es wird automatisch die Highlight-Führung geprüft. Nur IDs aus dieser Liste verwenden. |
sprache |
Sprachcode nach ISO 639-1 der Sprache, in der der Nutzer schreibt: de für Deutsch, en für Englisch. Nur der zweibuchstabige Code. |
Die drei IDs der Highlight-Führung stehen für Vollpreis, ermäßigten Eintritt und Familienticket. Ein Format kann im Ticketsystem also mehrere IDs haben, obwohl Gäste es als ein einziges Angebot wahrnehmen.
Die eigenen IDs stellt der Betreiber des Ticketsystems bereit. Sie gehören zu den Angaben, die in der Übersicht der benötigten Schnittstellen-Angaben aufgeführt sind und gemeinsam beim Anbieter angefragt werden. Die Liste sollte alle Preisvarianten eines Formats enthalten und keine internen oder nicht öffentlich buchbaren Formate.

Der Parameter sprache steuert das Format, in dem die Schnittstelle Datum und Uhrzeit zurückliefert: de ergibt „Sa, 15. Aug 09:00", en ergibt „Sat, 15 Aug 09:00 AM". Übergeben wird der Wert über den Header Accept-Language aus der Webhook-Einrichtung.
6. KI-Aktion „Nächster Termin“ (weites Zeitfenster) anlegen
Eine zweite KI-Aktion deckt Fragen ab, bei denen kein festes Datum genannt wird (z. B. „Wann ist die nächste Taschenlampen-Führung?"). Da seltene Events bei einer reinen Tagesabfrage nicht gefunden würden, arbeitet diese Aktion mit einem 90-Tage-Fenster. Die Taschenlampen-Führung findet nur einmal im Monat statt: Eine Abfrage für einen einzelnen Tag geht deshalb in den meisten Fällen leer aus, obwohl es einen nächsten Termin gibt. Die Grenze von 100 Terminen pro Abfrage stört dabei nicht: Die Trefferliste ist chronologisch sortiert, der früheste Termin steht also immer am Anfang, auch wenn das Ende der Liste abgeschnitten wird.
Diese Aktion verwendet denselben Webhook „Verfügbarkeit“.
- Aktionsname: Nächster Termin
- Toolbeschreibung: Findet den NÄCHSTEN stattfindenden Termin eines Events, wenn der Nutzer keinen konkreten Tag nennt: "Wann ist die nächste Taschenlampen-Führung?", "Wann findet das wieder statt?", "Wann kann ich frühestens kommen?". Nutze es NICHT, wenn der Nutzer einen konkreten Tag nennt, dafür ist das Tool Verfügbarkeit zuständig. Nutze pro Antwort nur eines der beiden Tools.
- Anweisungen danach: Die Liste ist chronologisch sortiert. Nenne den frühesten Termin mit Datum und Uhrzeit aus spanBeginStr, dazu bei Bedarf die nächsten ein bis zwei Termine, und die freien Plätze aus remainingQuota. Preis aus currentPriceValue.amount in Cent, durch 100 teilen. Ist die Liste leer, findet die Veranstaltung in den nächsten Monaten nicht statt: sage das und verweise auf die Buchungsseite. Nenne nie Termine, die nicht in der Liste stehen. Diese Antwort ist abschließend, rufe danach kein weiteres Tool auf.
Parameter-Abweichung für das weite Zeitfenster
Auch diese Aktion erhält vier Parameter vom Typ Zeichenfolge, ausdrücklich auch von und bis, obwohl sie ein Datum enthalten. Der Typ Zahl kann das Format YYYY-MM-DD nicht übergeben.
Die Parameter tourtyp und sprache entsprechen der Konfiguration aus der KI-Aktion „Verfügbarkeit“. Bei den Datumsparametern werden die Beschreibungen folgendermaßen angepasst:
| Parameter | Beschreibung |
|---|---|
von |
Das heutige Datum im Format YYYY-MM-DD. |
bis |
Datum 90 Tage nach heute im Format YYYY-MM-DD. |

7. Instruktionen und Systemregeln definieren
Im moinAI Hub ist eine strikte Aufteilung zwischen allgemeinen Agenten-Regeln (Instruktionen) und aktionsbezogenen Datenverarbeitungen vorgesehen:
- Instruktionen (im KI-Agenten): Globale Verhaltensregeln, Systemrolle und Tonalität.
- Anweisungen danach (in der KI-Aktion): Technische Feldauswertung, Einheitenumrechnung und Fehlerhandling der Schnittstelle.
Der folgende Textblock wird im moinAI Hub über den Pfad Knowledge Base > RAG in der Kachel Instruktionen des Agenten „Ticketverfügbarkeit“ hinterlegt:
Du gibst Auskunft über freie Plätze und Startzeiten der Führungen und Veranstaltungen des Museums. Prüfe erst, antworte dann nur mit den erhaltenen Werten. Erfinde nie Termine, Uhrzeiten, Plätze oder Preise. Prüfe pro Antwort genau einmal. Kündige keine weitere Prüfung an, sondern frage, ob du sie durchführen sollst. Bei Fragen über mehrere Tage einen Tag konkret beantworten und weitere einzeln anbieten, nie von einem Tag auf andere schließen. Ohne genanntes Event gilt die Highlight-Führung, ohne Datum heute, nenne die Annahme. Antworte in der Sprache des Nutzers. Sprich nie über Technik oder die Datenherkunft.
In die Instruktionen gehören keine Preise, keine Öffnungszeiten, keine Event-Namen, keine Daten. Alles, was sich ändern kann, gehört in die Wissensquellen oder kommt aus der Live-Abfrage. In den Instruktionen stehen ausschließlich Regeln. Andernfalls entsteht eine zweite, unsichtbare Datenkopie, die niemand pflegt und die still veraltet. Die Highlight-Führung darf hier als Vorgabe stehen, weil sie eine Regel für den Umgang mit fehlenden Angaben ist und kein Datenbestand.

Weiterführende Sicherheitsrichtlinien und Schutzmechanismen gegen Manipulationen (z. B. Versuche, Systemprompts auszulesen) sind in den Artikeln Guardrails und Schutz vor Prompt Injection detailliert beschrieben.
8. Tests im KI-Playground durchführen
Vor der Freigabe erfolgt die Funktionsprüfung im KI-Playground. Die folgende Testliste dient als Abnahmekriterium:
| # | Testfrage im KI-Playground | Erwartetes Verhalten / Validierung |
|---|---|---|
| 1 | Habt ihr am Samstag noch Plätze für die Highlight-Führung? | Konkrete Uhrzeiten mit freien Plätzen, Preis als Euro-Betrag (z. B. 12,00 €), keine ungeprüften Cent-Werte. |
| 2 | Habt ihr morgen noch irgendwas frei? | Antwort für die Highlight-Führung für den morgigen Tag unter Nennung der getroffenen Annahme. |
| 3 | Welche Termine habt ihr nächste Woche? | Genau ein Tag wird konkret beantwortet, weitere Tage werden zur Überprüfung angeboten. |
| 4 | Wir sind 25 Personen, geht das am Samstag? | Ausgabe von Terminen, deren freie Kapazität (remainingQuota) mindestens 25 beträgt. Termine mit 24 oder weniger Plätzen werden nicht angezeigt, auch nicht als „früheste Zeit". |
| 5 | Ist die Taschenlampen-Führung am [Tag ohne Termin] buchbar? | Meldung: „Am [Datum] wird die Taschenlampen-Führung nicht angeboten“ inklusive Angebot, den nächsten Termin zu suchen. Nicht „ausgebucht“, nicht „fällt aus“. |
| 6 | Wann findet die Taschenlampen-Führung das nächste Mal statt? | Ausführen der Aktion „Nächster Termin“ und Nennung des frühesten Eintrags aus dem 90-Tage-Fenster. |
Testfall 4 prüft zugleich den wichtigsten Sonderfall des Museums: Eine Gruppe, die im Chat nach Plätzen fragt, sucht keine buchbare Gruppenführung, sondern 25 Einzelplätze in einer öffentlichen Führung. Die internen Gruppenformate bleiben außen vor, weil ihre IDs nicht im Parameter tourtyp stehen.

Zahlen aus den Antworten sollten stichprobenartig im echten Ticketshop gegengeprüft werden. Ein Abgleich stellt sicher, dass Parameter und Zeitzonen korrekt verarbeitet werden. Eine flüssig formulierte Antwort mit falschen Zahlen ist der Fehler, der im Betrieb am längsten unentdeckt bleibt.
Zusätzlich sollte bei jedem Test geprüft werden, ob der richtige KI-Agent gewählt wurde. Landet eine Anfrage beim falschen KI-Agenten, wird die Zuordnung über die Feedback-Funktion korrigiert und die Beschreibung des KI-Agenten nachgeschärft.
Bietet der KI-Chatbot an, den nächsten Termin zu suchen, trägt ein bloßes „Ja gerne“ das Thema nicht weiter, eine reine Zustimmung wird als Smalltalk erkannt. „Ja bitte, wann ist die nächste Taschenlampen-Führung?“ führt zum Ergebnis. Angebote sollten deshalb so formuliert werden, dass die Antwort der Nutzer:innen das Thema mitnennt.
Jeder Test fragt das angebundene Ticketsystem tatsächlich ab. Das ist unkritisch, weil ausschließlich gelesen wird. Es handelt sich aber um echte Anfragen, nicht um eine Simulation.
9. Veröffentlichung und fortlaufende Wartung
Nach erfolgreicher Prüfung im KI-Playground werden die Einstellungen live geschaltet.
Vor der Freischaltung werden zwei Einstellungen geprüft, weil der KI-Chatbot ab diesem Zeitpunkt Preise und Kontingente nennt: Der Antwort-Guard (Schutz gegen Aussagen ohne Wissensgrundlage) sollte aktiv sein, und die Tonalität sollte auf die eigene Marke eingestellt sein.
- Den KI-Agenten
Ticketverfügbarkeitfür den gewünschten Kanal (z. B. das Chat-Widget der Webseite) auf Aktiv setzen. - Die Veröffentlichung im Hub über die zentrale Veröffentlichung durchführen. Erst nach dieser Bestätigung stehen die KI-Aktionen für echte Unterhaltungen im Chat-Widget zur Verfügung.
- Nach der Veröffentlichung eine Kontrollfrage im veröffentlichten Chat-Widget stellen.

Regelmäßige Wartung
Termine, Uhrzeiten, freie Plätze und Preise werden nicht gepflegt, sie kommen bei jeder Anfrage frisch aus dem Ticketsystem. Aufmerksamkeit braucht genau eine Stelle:
Sobald im externen Ticketsystem neue Event-Formate angelegt werden, müssen deren IDs im Parameter tourtyp beider KI-Aktionen (Verfügbarkeit und Nächster Termin) nachgetragen werden. Ohne diese IDs bleiben neue Angebote für den KI-Chatbot unsichtbar. Legt das Museum etwa eine Sonderführung zur Wechselausstellung an, bleibt sie im Chat unauffindbar, bis ihre ID in beiden Aktionen steht. Intern genutzte oder private Buchungs-IDs werden bewusst weggelassen, damit diese nicht im öffentlichen Chat angeboten werden, im Beispiel die Schulklassen-Führung, die Kindergarten-Gruppe und die private Sonderöffnung.
Zusätzlich empfiehlt es sich, einmal im Quartal die Testfälle 1, 4 und 5 aus der Abnahmeliste im veröffentlichten Chat-Widget zu wiederholen. So fallen Änderungen an der Schnittstelle auf, bevor sie im Betrieb sichtbar werden.
10. Optionales Hintergrundwissen: Warum die Vorgaben so lauten
Vier Eigenschaften solcher Schnittstellen erklären, warum die Vorgaben in dieser Anleitung so formuliert sind. Bei späteren Anpassungen sollten diese Punkte unberührt bleiben.
| Eigenschaft der Schnittstelle | Konsequenz für die Konfiguration |
|---|---|
| Pro Antwort läuft genau eine Abfrage | Zwei Prüfungen in einer Antwort sind nicht vorgesehen. Angekündigte Folgeprüfungen führen zu Wiederholungen; die zweite Prüfung fordern Nutzer:innen selbst an. |
| Der Gruppenfilter braucht eine harte Grenze | Erst die ausdrückliche Formulierung „erreicht oder übersteigt“ zusammen mit „auch nicht als früheste oder späteste Zeit“ hält zu kleine Termine zuverlässig draußen. |
| Vorgaben wirken stärker als Verbote | Bei Formulierungsregeln gehört der gewünschte Satz in die Anweisung, nicht nur das unerwünschte Wort. Daher der vorgegebene Satzbau für Tage ohne Termin. |
| Fehler kommen als Erfolg zurück | Viele GraphQL-Schnittstellen beantworten auch fehlerhafte Abfragen mit Status 200 und einem errors-Block. Für die KI sieht das wie Daten aus, daher die errors-Regel im Feld „Anweisungen danach". |