Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Schnittstelle (API)

Schnittstelle: Integration

Mit einem API-Schlüssel Gespräche, Anfragen, Termine und Kennzahlen lesen, Anfragen und Wissensquellen anlegen und den Chat als Ereignisstrom nutzen.

In einfacher Sprache

Über diese Wege verbinden Sie Ihre eigenen Systeme mit dem Dienst. Sie brauchen dafür einen Schlüssel. Damit lesen Sie Gespräche, Anfragen, Termine und Kennzahlen. Sie legen auch Anfragen und Quellen für das Wissen an. Sie können einem Assistenten Fragen stellen. Die Antwort kommt dann Stück für Stück zurück. Jeder Weg prüft, ob der Schlüssel ihn nutzen darf.

Stand

Alle Themen der Dokumentation

Die Integrationsschnittstelle verbindet Ihre eigenen Systeme mit XICBOT. Mit einem API-Schlüssel lesen Sie Gespräche, Anfragen, Termine und Kennzahlen, legen Anfragen und Wissensquellen an und stellen einem Assistenten Fragen, deren Antwort als Ereignisstrom zurückkommt. Jeder Weg liegt unter /api/v1/integration/ und prüft den Bereich des Schlüssels für sich.

Überblick

Die Schnittstelle erreichen Sie unter https://app.xicbot.de/api/v1/integration/. Jede Anfrage trägt den Schlüssel im Kopf X-Api-Key; ein Schlüssel beginnt mit xbot_. Wie Sie einen Schlüssel anlegen, seine Bereiche wählen und ihn ablaufen lassen, steht unter Schlüssel und Webhooks, das Anmeldeverfahren unter Anmeldung. Die Integrationswege liegen außerhalb der Sitzungsanmeldung der App: ein Sitzungstoken öffnet sie nicht.

WegBereichBezeichnung in der App
GET /statuskeiner–
GET /conversations, GET /conversations/{id}conversationsGespräche lesen
GET /leadsleadsAnfragen lesen
POST /leadsleads.writeAnfragen anlegen
GET /appointmentsappointmentsTermine lesen
GET /analyticsanalyticsAuswertung lesen
POST /knowledge/sourcesknowledge.writeWissensquellen anlegen
POST /chatchatChat verwenden

Schreiben ist ein eigener Bereich: ein Schlüssel mit leads liest Anfragen, legt aber keine an. In der App steht dazu unter Bereiche der Satz *Schreiben ist ein eigener Bereich. Ohne ihn liest ein Schlüssel nur.*

Fehler, die jeder Weg kennt

Bevor ein Weg seine eigentliche Arbeit beginnt, prüft die Schnittstelle Schlüssel, Konto, Paket, Drossel und Bereich. Fehler kommen als JSON mit dem Feld error.

StatuserrorBedeutung
400key_in_urlDer Schlüssel stand als api_key oder key in der Adresse. Die Anfrage wird abgewiesen, bevor der Schlüssel nachgeschlagen wird; das Feld note sagt, wohin er gehört.
401key_missingDer Kopf X-Api-Key fehlt, ist leer oder beginnt nicht mit xbot_.
401invalid_keySchlüssel unbekannt, zurückgezogen oder abgelaufen. Die drei Fälle antworten gleich.
403tenant_suspendedDas Konto des Schlüssels ist nicht aktiv.
402plan_feature_missingDas Paket des Kontos enthält die Funktion für Schlüssel und Webhooks nicht, etwa nach einem Tarifwechsel. feature, plan, plan_name und available_in nennen das Merkmal, das Paket und die Pakete, die es enthalten. Der Schlüssel bleibt gültig und arbeitet wieder, sobald das Paket die Funktion enthält; die Anfrage zählt auf keinem Deckel.
429too_many_requestsMinuten- oder Tagesdeckel des Schlüssels erreicht, siehe Drosselung.
403scope_missingDem Schlüssel fehlt der Bereich, den der Weg verlangt, etwa leads oder chat. Das Feld required nennt ihn.
403read_onlyDer Weg schreibt, und dem Schlüssel fehlt der schreibende Bereich (leads.write oder knowledge.write). Das Feld required nennt ihn.
422–Eine Eingabe hat die Feldprüfung nicht bestanden. Die Antwort trägt message und unter errors die Fehler je Feld.
500–Serverfehler. message lautet dann Serverfehler; Klassenname, Datei, Zeile und Aufrufweg stehen nicht in der Antwort.

Drosselung

Jeder Schlüssel hat einen Minutendeckel, den Sie beim Anlegen unter Anfragen pro Minute eintragen, und einen Tagesdeckel aus den Einstellungen Ihres Kontos; beide zählen je Schlüssel. Ist einer erreicht, antwortet der Weg mit 429 und too_many_requests. Werte, Zeitfenster und die Felder der Antwort stehen unter Paketsperren und Drosseln.

Seitenweise lesen

Die Listen für Gespräche, Anfragen und Termine liefern 50 Einträge je Seite. Gespräche und Anfragen stehen nach Anlage geordnet, die jüngsten zuerst; Termine nach Beginn, die spätesten zuerst. Die Seite wählen Sie mit page, gezählt ab 1; ein fehlender oder kleinerer Wert gilt als 1, ein Wert, der keine ganze Zahl ist, wird mit 422 abgewiesen. Die Antwort wiederholt die Seite im Feld page und nennt keine Gesamtzahl. Lesen Sie weiter, bis eine Seite weniger als 50 Einträge hat.

Status

GET /api/v1/integration/status

Sagt, was der Schlüssel darf, und liest keine Daten. Damit prüfen Sie eine Anbindung, ohne einen Bereich zu brauchen.

Anmeldung
Kopf X-Api-Key, kein Bereich
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
FeldInhalt
alivetrue, sobald die Anfrage die Prüfung bestanden hat
tenantKennung Ihres Kontos
scopesBereiche des Schlüssels als Liste
limit_per_minMinutendeckel des Schlüssels

Befehl in der Schale bash

curl -s https://app.xicbot.de/api/v1/integration/status \
  -H "X-Api-Key: $XICBOT_KEY"

# {"alive":true,"tenant":"…","scopes":["leads","leads.write"],"limit_per_min":120}

Gespräche

GET /api/v1/integration/conversations

Listet die Gespräche Ihres Kontos aus allen Kanälen, 50 je Seite, die jüngsten zuerst. Was ein Gespräch in der App ausmacht, beschreibt Gespräche.

Anmeldung
Kopf X-Api-Key, Bereich conversations
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
ParameterPflichtInhalt
pageneinGanze Zahl, Seite ab 1, Vorgabe 1
Feld in conversations[]Inhalt
idKennung des Gesprächs
assistant_idKennung des Assistenten
channelwidget (Chatfenster auf einer Website), api (über POST /chat begonnen) oder test (Test in der App)
titleaus der ersten Frage gebildet, höchstens 120 Zeichen, bei Kürzung mit … am Ende
statusopen, closed oder escalated
message_countZahl der Nachrichten
createdBeginn als ISO-8601-Zeitpunkt

GET /api/v1/integration/conversations/{id}

Liefert ein Gespräch mit seinem Verlauf: höchstens 200 Nachrichten in zeitlicher Reihenfolge. Eine Kennung aus einem anderen Konto findet nichts und antwortet wie eine unbekannte.

Anmeldung
Kopf X-Api-Key, Bereich conversations
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
FeldInhalt
conversationdieselben Felder wie in der Liste
messages[].roleuser (Frage von Besucher oder Aufrufer), assistant (Antwort des Assistenten) oder operator (Nachricht eines Menschen aus Ihrem Team)
messages[].textText der Nachricht im Klartext
messages[].timeZeitpunkt als ISO-8601
StatuserrorBedeutung
404not_foundKein Gespräch mit dieser Kennung in Ihrem Konto.

Anfragen

Anfragen sind Kontaktwünsche. Sie entstehen im Gespräch mit einem Assistenten oder über diese Schnittstelle. Legt ein Assistent eine Anfrage über ein Werkzeug an, löst das ebenfalls den Webhook lead.created aus, mit anderer Nutzlast als hier, siehe Ausgelöste Webhooks. In der App bearbeiten Sie Anfragen unter Termine und Vorgänge.

GET /api/v1/integration/leads

Listet die Anfragen Ihres Kontos, 50 je Seite, die jüngsten zuerst. Die Seite wählen Sie mit page.

Anmeldung
Kopf X-Api-Key, Bereich leads
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
Feld in leads[]Inhalt
idKennung der Anfrage
name, email, phoneKontaktangaben, jeweils auch leer
subjectdas Anliegen
sourceHerkunft; über die Schnittstelle angelegte Anfragen tragen api, wenn Sie nichts anderes angeben
statusnew (neu), seen (gesehen) oder done (erledigt)
createdZeitpunkt der Anlage als ISO-8601

POST /api/v1/integration/leads

Legt eine Anfrage an. Sie beginnt mit dem Status new und löst den Webhook lead.created aus.

Anmeldung
Kopf X-Api-Key, Bereich leads.write
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
FeldPflichtRegel
subjectjaText, höchstens 1000 Zeichen
nameneinText, höchstens 120 Zeichen
emailneingültige E-Mail-Adresse, höchstens 190 Zeichen
phoneneinText, höchstens 60 Zeichen
sourceneinText, höchstens 60 Zeichen; Vorgabe api
external_idneinIhre eigene Kennung, höchstens 100 Zeichen; verhindert Doppeleinträge
StatusAntwortBedeutung
201lead, duplicate_prevented: falseAnfrage neu angelegt, Webhook ausgelöst.
200lead, duplicate_prevented: trueEine Anfrage mit derselben external_id gab es schon. Zurück kommt die vorhandene; es entsteht keine zweite, und kein Webhook wird ausgelöst.
422message, errorssubject fehlt oder eine Feldregel ist verletzt.

Termine

GET /api/v1/integration/appointments

Listet die Termine Ihres Kontos, 50 je Seite, nach Beginn geordnet, die spätesten zuerst. Wie Termine entstehen, beschreibt Termine und Vorgänge.

Anmeldung
Kopf X-Api-Key, Bereich appointments
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
Feld in appointments[]Inhalt
idKennung des Termins
typeBezeichnung der Terminart
starts_atBeginn als ISO-8601
duration_minDauer in Minuten
name, emailKontaktangaben
statusrequested (angefragt), confirmed (bestätigt) oder cancelled (abgesagt)

Kennzahlen

GET /api/v1/integration/analytics

Liefert die Kennzahlen eines Zeitraums für alle Assistenten zusammen. Gespräche aus dem Probierdialog und Prüfgespräche zählen darin nicht mit, wie in der Auswertung. Was die einzelnen Kennzahlen bedeuten, erklärt Auswertung.

Anmeldung
Kopf X-Api-Key, Bereich analytics
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
ParameterPflichtInhalt
periodnein7d, 30d oder 90d; Vorgabe 30d
zoneneinZeitzone nach IANA, etwa Europe/Berlin (Vorgabe) oder America/New_York. Ältere Namen, die Browser noch melden, etwa Asia/Calcutta oder Europe/Kiev, werden angenommen und unter dem heutigen Namen gerechnet (Asia/Kolkata, Europe/Kyiv). Groß- und Kleinschreibung spielen keine Rolle; gerechnet und gemeldet wird unter der üblichen Schreibung, für europe/berlin also Europe/Berlin. Die festen Versätze Etc/GMT+1 bis Etc/GMT+12 und Etc/GMT-1 bis Etc/GMT-14 gelten mit dem Vorzeichen der Zeitzonendatenbank: Etc/GMT+1 liegt eine Stunde hinter UTC. Ein Versatz wie +01:00 gilt nicht als Zone.

Das Fenster schließt den laufenden Tag ein und endet an der nächsten Mitternacht der angegebenen Zone: 7d umfasst heute und die sechs Tage davor.

FeldInhalt
period, zonewie angefragt; in zone steht die übliche Schreibung, für europe/berlin also Europe/Berlin, und bei einem älteren Zonennamen der heutige, für Asia/Calcutta also Asia/Kolkata
from, toGrenzen des Fensters als Zeitpunkt in UTC
daysZahl der Tage im Fenster
assistantnull: die Zahlen gelten für alle Assistenten
cardsdie Kennzahlen, je Schlüssel ein Objekt
Feld einer KennzahlInhalt
valueder Wert, Anteile in Prozent; null, wenn nicht gemessen
measuredtrue, wenn ein Wert vorliegt
reasonbei measured: false der Grund: no_conversation, no_reply, no_search, no_probe, no_enforcement_check, no_tool_call oder no_rating
counter, denominatorbei Anteilen der Zähler und der Nenner
GruppeSchlüssel in cards
Mengeconversations, messages, answered, escalations, abstentions, messages_per_conversation
Gesprächsverlaufescalation_rate, self_resolved, frustration_rate, unanswered, abandoned, abandon_rate
Antwortqualitätcitation_rate, coverage, retrieval_mrr, retrieval_hit_rate, enforcement_rate, hard_topic_rate, blocked_rate
Tempo und Verbrauchreply_ms_p50, reply_ms_p95, units
Werkzeugetool_calls, tool_executed, tool_rejected, tool_errors
Ergebnisseleads, appointments, carts
Bewertungen der Besuchervisitor_ratings, visitor_helpful_rate, visitor_rating_coverage
StatuserrorBedeutung
422unknown_timezoneDie Zone ist unbekannt. Die Schnittstelle fällt nicht still auf die Vorgabe zurück.
422–period hat einen anderen Wert als 7d, 30d oder 90d (message, errors).

Wissensquellen anlegen

POST /api/v1/integration/knowledge/sources

Legt eine Wissensquelle aus Text oder aus einer Website-Adresse an. Text wird sofort aufgenommen; eine Adresse ruft ein Hintergrundauftrag ab. Wie Quellen in Antworten eingehen, beschreibt Wissen.

Anmeldung
Kopf X-Api-Key, Bereich knowledge.write
Begrenzung
Minuten- und Tagesdeckel des Schlüssels, siehe Drosselung
FeldPflichtRegel
titlejaText, höchstens 200 Zeichen
textja, wenn url fehltText, höchstens 400000 Zeichen
urlja, wenn text fehltAdresse mit http oder https, höchstens 500 Zeichen. Stehen url und text in der Anfrage, gilt url.
draftneintrue legt den Text als Entwurf an, der in keine Antwort eingeht. Nicht zusammen mit url.
published_atneinDatum der Veröffentlichung. Liegt es in der Zukunft, geht der Text erst ab dann in Antworten ein. Nicht zusammen mit url.
StatusAntwortBedeutung
201source mit id, type: text, status, chunksText verarbeitet. status ist ready oder failed. Auch eine gescheiterte Aufnahme antwortet mit 201: die Quelle steht, nur ihre Aufnahme ist gescheitert.
202source mit id, type: website, status: newAdresse angenommen; der Abruf läuft im Hintergrund.
422error: url_unreadableAdresse nicht lesbar, etwa ohne Schema oder Host.
422error: scheme_not_allowedAnderes Schema als http oder https.
422error: name_unresolvableDer Hostname lässt sich nicht auflösen.
422error: target_not_allowedDas Ziel ist keine öffentliche Adresse.
422message, errorsFeldregel verletzt, etwa draft zusammen mit url.
402error: plan_limit_reachedEine Zahlgrenze Ihres Pakets ist erreicht; limit nennt sie (knowledge_sources, documents oder chunks), allowed und used die Zahlen. Angelegt wird nichts. Siehe Paketsperre und Paketgrenzen.
503error: plan_limit_unmeasuredDer Bestand ließ sich nicht zählen; angelegt wird nichts. Versuchen Sie es später erneut.

Ob ein Website-Abruf gelungen ist, melden die Webhooks knowledge.indexed und knowledge.failed. Im Fehlerfall nennt reason einen benannten Grund, etwa no_text_extracted, url_unreachable, website_too_large oder redirect_off_origin; andere Ursachen erscheinen als ingest_failed. Der Abruf bekommt bis zu drei Versuche, und jeder gescheiterte Versuch meldet knowledge.failed. Für dieselbe source_id können darum mehrere Ereignisse eintreffen, auch ein knowledge.indexed nach einem knowledge.failed; maßgeblich ist das jüngste.

Chat

POST /api/v1/integration/chat

Stellt einem Assistenten eine Frage. Ohne conversation_id entsteht ein neues Gespräch im Kanal api. Die Antwort kommt als Ereignisstrom (text/event-stream) auf demselben Weg wie in der App.

Anmeldung
Kopf X-Api-Key, Bereich chat
Begrenzung
Deckel des Schlüssels, dazu das Monatskontingent Ihres Kontos
FeldPflichtRegel
assistant_idjaKennung des Assistenten, höchstens 64 Zeichen. Geantwortet wird mit seiner jüngsten Fassung.
conversation_idneinGespräch fortsetzen, höchstens 64 Zeichen. Nur Gespräche, die derselbe Assistent über diese Schnittstelle begonnen hat.
textjaDie Frage, 1 bis 4000 Zeichen. Ist für Ihr Konto eine kleinere Höchstlänge hinterlegt, gilt diese.
StatuserrorBedeutung
404not_foundAssistent unbekannt, oder das Gespräch gehört nicht zu diesem Assistenten oder nicht zum Kanal api.
422no_versionDer Assistent hat noch keine Fassung.
409reply_in_progressIn diesem Gespräch läuft bereits eine Antwort.
413input_too_longDie Frage ist länger als die Höchstlänge Ihres Kontos; limit und length nennen beide Werte.
429quota_exhaustedDas Monatskontingent ist verbraucht. scope ist month, dazu kommen month, budget, used und retry_after: die Sekunden bis zum Monatsanfang, auch im Kopf Retry-After.
422–Feldregel verletzt (message, errors).

Das Kontingent erklärt Pakete und Kontingente. Ein Gespräch führt höchstens eine Antwort gleichzeitig; bricht ein Lauf ab, ist das Gespräch nach 180 Sekunden wieder frei. Auch ein Gespräch, das in der App als erledigt markiert ist, lässt sich fortsetzen, und die Frage öffnet es wieder: war es übergeben (escalated_at gesetzt), wird es escalated mit neuem escalated_at und liegt wieder im Postfach, sonst wird es open; resolved_at wird leer. Ein Ereignis geht dabei nicht hinaus, und eine abgewiesene Frage öffnet nichts. Als Herkunft eines neuen Gesprächs gilt der Host aus dem Kopf Origin oder Referer, falls Ihr Aufruf einen davon sendet; sonst bleibt sie leer.

Ereignisstrom

Die Antwort hat den Typ text/event-stream; charset=utf-8 und wird ohne Zwischenspeicher ausgeliefert (Cache-Control: no-cache, no-store). Jedes Ereignis besteht aus einer Zeile event: mit der Art und einer Zeile data: mit einem JSON-Objekt, gefolgt von einer Leerzeile. Die Kennung eines neuen Gesprächs steht im ersten Ereignis start; merken Sie sie sich für Folgefragen.

Befehl in der Schale bash

curl -N https://app.xicbot.de/api/v1/integration/chat \
  -H "X-Api-Key: $XICBOT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"assistant_id": "…", "text": "Welche Öffnungszeiten gelten?"}'

event: start
data: {"conversation_id":"…","question_id":null}

event: text
data: {"t":"Wir sind montags bis freitags "}

event: text
data: {"t":"für Sie da."}

event: end
data: {"state":"done","message_id":"…",…}
EreignisFelderBedeutung
startconversation_id, question_idBeginn der Antwort; nennt das Gespräch.
texttDas nächste Textstück der Antwort. Auch nachgereichte Hinweise und die Notfallantwort kommen als text.
citationscitations mit number, chunk_id, document, heading, excerptDie Belege, auf die eine fertige Antwort mit ihrer Nummer in eckigen Klammern verweist; excerpt trägt höchstens 300 Zeichen des Auszugs. Bei einer Antwort aus einem aktiven Frage-Antwort-Paar kommt genau ein Beleg: number 1, chunk_id aus qa: und der Kennung des Paares, die Frage des Paares als document und heading mit null; die Antwort selbst nennt diese Nummer nicht.
follow_upsquestions, dropped, checked, reasonVorgeschlagene Folgefragen nach einer fertigen Antwort, höchstens drei. Bei checked: true wurde jeder Vorschlag an Ihrem Wissen gemessen, und dropped zählt die verworfenen; bei checked: false nennt reason den Grund, etwa no_knowledge.
contact_offerofferedDer Assistent bietet eine Kontaktaufnahme an.
handoffhandoff, reasonDas Gespräch geht an einen Menschen. reason ist etwa assistant, conversation_limit oder enforcement, wenn die Prüfung gegen die Grenzen des Assistenten übergibt.
verificationstate, claims, totalErgebnis der Prüfung harter Angaben gegen die Belege, nach einer fertigen Antwort. state ist no_claims, verified, unverified, no_source (nichts lag vor, woran sich prüfen ließ) oder bei leerer Antwort skipped; claims nennt ungedeckte Stellen, total ihre Gesamtzahl. Nach einer Antwort aus einem Frage-Antwort-Paar entfällt das Ereignis, denn dort ist der Text die gepflegte Quelle selbst.
redactiontext, reason, count, partsDie Antwort wurde nachträglich berichtigt; text trägt den ganzen neuen Wortlaut. Bei reason: claims stehen an Stelle ungedeckter Angaben Platzhalter, [nicht belegt] bei deutscher oder unbestimmter Antwortsprache, sonst [not backed]; count nennt ihre Zahl. Hat eine Werkzeugkarte die Antwort unterbrochen, kommt parts hinzu: derselbe berichtigte Text in den Stücken zwischen den Karten, die zusammen genau text ergeben; lässt er sich so nicht teilen, fehlt parts. Bei reason: notice wurde der Pflichthinweis zu einer Grenze neu gesetzt, ohne count.
enforcementstate, topics, handoverErgebnis der Prüfung gegen die Grenzen des Assistenten, nach einer fertigen Antwort: state ist clear oder enforced, topics nennt berührte Themen, handover sagt, ob übergeben wird.
toolid, key, kind, state, preview, input, result, report, error, duration_ms, approval_path, needs_confirmation, chain_capped, created_atDer Assistent hat ein Werkzeug aufgerufen. needs_confirmation ist true, wenn state den Wert proposed hat.
model_switchfrom, to, reasonWechsel auf eine andere Stufe während der Antwort.
fallbackreason, transientDie Antwort ließ sich nicht erzeugen; transient sagt, ob der Fehler vorübergehend war. Danach folgt die Notfallantwort des Assistenten als text.
errorcode, limitSperre vor dem Aufruf, etwa conversation_limit, wenn die Höchstzahl an Fragen je Gespräch erreicht ist; limit nennt sie. Die Höchstzahl stellt der Betreiber im Bereich Betrieb für jedes Konto einzeln ein, siehe Mandanten und Grenzen. Danach folgen ein Hinweis als text, bei conversation_limit ein handoff und zum Schluss end mit state: blocked.
livelive, sinceEin Mensch aus Ihrem Team hat das Gespräch übernommen; der Assistent antwortet nicht. Danach folgt end mit state: live.
revokedreasonDie Einwilligung wurde während der Antwort widerrufen; reason ist consent_revoked. Der bis dahin erzeugte Text wird verworfen und nicht gespeichert.
endsiehe untenEnde des Stroms.
Feld in endInhalt
statedone, aborted, fallback, blocked, revoked oder live. Bei live folgt nur noch message_id mit null.
message_idKennung der gespeicherten Antwort; null, wenn keine gespeichert wurde
verification_state, enforcement_stateErgebnis der beiden Prüfungen mit den Werten aus verification und enforcement; skipped, wenn die Prüfung nicht lief, etwa nach einer Sperre oder einer Notfallantwort; verification_state ist skipped auch bei einer Antwort aus einem Frage-Antwort-Paar
refusedtrue, wenn eine fertige Antwort eine Ablehnung war
duration_ms, ttft_msDauer der Antwort und Zeit bis zum ersten Textstück in Millisekunden
tokens_in, tokens_outverbrauchte Einheiten für Eingabe und Ausgabe; bei einer Antwort aus einem Frage-Antwort-Paar beide 0, denn dort wird kein Modell gefragt
throttled, reply_limitob die Antwort wegen des Kontingents gedrosselt lief, und die Höchstlänge der Antwort in Einheiten
citationsdie Belege der Antwort

Ausgelöste Webhooks

Die Wege dieser Schnittstelle lösen die folgenden Webhooks aus, sofern Sie für das Ereignis einen Empfänger eingerichtet haben, siehe Schlüssel und Webhooks. Die Ereignisse mit allen Auslösern, auch denen außerhalb der Integration, listet Ereignisse.

EreignisBezeichnung in der AppAuslöserNutzlast
lead.createdAnfrage erstelltPOST /leads legt eine Anfrage neu anid, conversation_id mit null, source
knowledge.indexedWissensquelle aufgenommenText aufgenommen oder Website-Abruf gelungensource_id, documents, chunks; beim Text zusätzlich reason mit null
knowledge.failedWissensquelle fehlgeschlagenAufnahme gescheitertsource_id, reason; beim Text zusätzlich documents und chunks
lead.createdAnfrage erstelltPOST /chat: der Assistent legt über ein Werkzeug eine Anfrage anid, conversation_id
appointment.requestedTermin angefragtPOST /chat: der Assistent legt über ein Werkzeug einen Termin anid, conversation_id
handoff.triggeredÜbergabe ausgelöstPOST /chat: die Antwort übergibt ein noch nicht übergebenes Gespräch an einen Menschenconversation_id, reason, queue (null, wenn keine Zuordnungsregel gegriffen hat)
gap.detectedWissenslücke erkanntPOST /chat: eine fertige Antwort verweist auf keinen Beleg, und der Assistent hat dabei kein Werkzeug aufgerufen, auch wenn die Suche Auszüge in Ihrem Wissen fand; Antworten aus einem Frage-Antwort-Paar, Antworten mit einem Werkzeugaufruf, auch einem nur vorgeschlagenen, Fragen unter 12 Zeichen und Konten ohne Wissen melden nichtsconversation_id, assistant_id, question (höchstens 300 Zeichen), kind (refused oder uncited)
budget.exhaustedBudget erschöpftPOST /chat: der Verbrauch einer Antwort erreicht erstmals im Monat das Kontingentmonth, budget, used

Häufige Fragen

Warum antwortet die Schnittstelle mit 401, obwohl der Schlüssel stimmt?

Prüfen Sie, ob der Schlüssel im Kopf X-Api-Key steht und mit xbot_ beginnt. Ein zurückgezogener oder abgelaufener Schlüssel antwortet mit invalid_key, genau wie ein unbekannter. Steht der Schlüssel in der Adresse, kommt 400 mit key_in_url.

Wie verhindere ich doppelte Anfragen, wenn mein System erneut sendet?

Senden Sie bei POST /leads Ihre eigene Kennung in external_id. Eine Wiederholung mit derselben Kennung antwortet mit 200 und duplicate_prevented: true und liefert die vorhandene Anfrage.

Kann ich die Schnittstelle direkt aus dem Browser aufrufen?

Von einer fremden Domain aus nicht: die Integrationswege senden keine Freigabeköpfe für andere Ursprünge. Rufen Sie sie aus Ihrem Backend auf, wo auch der Schlüssel bleibt.

Wie setze ich ein Gespräch über die Schnittstelle fort?

Übernehmen Sie conversation_id aus dem Ereignis start der ersten Antwort und senden Sie sie mit der nächsten Frage an POST /chat. Fortsetzen lassen sich nur Gespräche desselben Assistenten aus dem Kanal api; läuft noch eine Antwort, kommt 409.

Wie erfahre ich, ob eine Website als Wissensquelle aufgenommen wurde?

POST /knowledge/sources mit url antwortet sofort mit 202 und dem Status new. Das Ergebnis des Abrufs melden die Webhooks knowledge.indexed oder knowledge.failed mit der Kennung der Quelle in source_id.

Eine Stelle ist unklar geblieben?

Schreiben Sie uns, welche Seite und welcher Schritt gemeint ist. Wir antworten persönlich.

Anfrage in drei Schritten

  1. 1. Anliegen
  2. 2. Ihr Fall
  3. 3. Kontakt

Worum geht es?

Ein Klick genügt, alles Weitere ist freiwillig.

Erzählen Sie kurz von Ihrem Fall

Alle Angaben in diesem Schritt sind freiwillig. Sie helfen uns, gleich mit etwas Konkretem zu antworten statt mit Rückfragen.

Anfragen im Monat, ungefähr (optional)
Wann soll es losgehen? (optional)
Wie erreichen wir Sie?

Name und E-Mail-Adresse genügen. Wir antworten persönlich.

Wir verwenden Ihre Angaben, um Ihre Anfrage zu bearbeiten. Mehr dazu in der Datenschutzerklärung.