Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Schnittstelle (API)

Schnittstelle: Gespräche und Verwaltung

Sitzungswege der App für Gespräche, Besuchersperren, Team, Weiterleitung, Katalog, Shop, Auswertung, Vorgänge und Protokoll: Felder, Grenzen, Rollen und Fehler.

In einfacher Sprache

Über diese Wege liest und ändert die Anwendung ihre Daten. Dazu gehören Gespräche und gesperrte Besucher. Auch das Team gehört dazu. Andere Wege gelten für Regeln, wohin ein Fall geht. Weitere Wege gelten für den Katalog, den Shop und die Zahlen. Auch Fälle und das Protokoll sind dabei. Sie brauchen die Marke aus der Anmeldung. Eigene Systeme mit Schlüssel nutzen andere Wege.

Stand

Alle Themen der Dokumentation

Diese Seite beschreibt die Wege, über die die App selbst Gespräche, Besuchersperren, das Team, Weiterleitungsregeln, Katalog und Shopanbindung, die Auswertung, Vorgänge und das Aktivitätsprotokoll liest und ändert. Alle Wege liegen unter https://app.xicbot.de/api/v1/ und verlangen eine Sitzungsmarke im Kopf Authorization: Bearer …, wie unter Anmeldung beschrieben. Angebundene Systeme mit API-Schlüssel nutzen eigene Wege, siehe Integration.

Zugang, Rollen und Drosseln

Jede Anfrage durchläuft drei Stufen. Zuerst prüft der Server die Sitzungsmarke und ob das Konto aktiv ist. Danach muss die E-Mail-Adresse der angemeldeten Person bestätigt sein; bis dahin antwortet jeder Weg dieser Seite mit 403 und email_unverified, und die App zeigt „Dieser Bereich bleibt gesperrt, bis die E-Mail-Adresse bestätigt ist.“ Zuletzt prüft jeder Weg seine Mindestrolle, manche zusätzlich ein Paketmerkmal und eine benannte Drossel.

Rollen

Rollen sind gestuft: eine höhere Rolle darf, was eine niedrigere darf. Wie Sie Rollen vergeben, steht unter Team und Rollen.

Rolle im CodeBezeichnung in der AppWege auf dieser Seite
viewerLesenlesende Wege außer dem Aktivitätsprotokoll, eigene Bereitschaft, Einladung annehmen
editorBearbeitenGespräche bearbeiten, anlegen und beschreiben, Weiterleitungsregeln, Katalog, Status von Vorgängen
adminVerwaltungGespräche löschen, Aufbewahrungsfristen, Besuchersperren, Team, Shopanbindung, Aktivitätsprotokoll
ownerInhaberKlartext eines Gesprächs, Ausfuhr im Klartext, Wochenbericht bestellen

Gemeinsame Ablehnungen

Diese Antworten kann fast jeder Weg geben. Der Körper ist JSON mit dem Feld error; das allgemeine Format und die Prüffehler mit 422 beschreibt Grundlagen.

StatuserrorBedeutung
401–Sitzungsmarke fehlt oder gilt nicht mehr, siehe Anmeldung.
403no_tenantDie Person gehört zu keinem Konto.
403tenant_<Status>Das Konto ist nicht aktiv. message lautet „Das Konto ist derzeit nicht aktiv.“
403email_unverifiedDie E-Mail-Adresse ist nicht bestätigt.
403role_too_lowDie Rolle reicht nicht; required nennt die verlangte Rolle.
402plan_feature_missingDem Paket fehlt das Merkmal; dazu feature, plan, plan_name und available_in.
402plan_limit_reachedEine Zahlgrenze des Pakets ist erreicht; dazu limit, allowed, used, plan und plan_name.
503plan_limit_unmeasuredDer Zähler für eine Zahlgrenze ließ sich nicht lesen; dazu limit und reason. Der Weg lässt die Anfrage dann nicht durch.
429–Eine benannte Drossel ist überschritten, siehe Grenzen.
500not_loggedDer Eintrag ins Aktivitätsprotokoll kam nicht zustande; die Änderung ist nicht gespeichert. Die App zeigt „Nicht gespeichert: Der Eintrag ins Protokoll kam nicht zustande. Bitte versuchen Sie es erneut.“

Welche Merkmale und Zahlgrenzen Ihr Paket hat, steht unter Pakete und Kontingente und auf der Seite Preise; wie die Paketsperre antwortet, unter Grenzen.

Drosseln

Einige Wege tragen eine benannte Drossel. Gezählt wird je angemeldeter Person, ersatzweise je Herkunft der Anfrage, in einem Fenster von einer Minute.

DrosselAnfragen je MinuteWege
conversations30Ausfuhr als CSV, Gespräch anlegen, Bewertung, Klartext, Anhänge, Bericht der Auswertung
conversation-send20Nachricht in ein Gespräch senden
catalog20Artikel anlegen, ändern und einführen; Shopanbindung speichern, prüfen und abgleichen
invitations5Einladung senden

Gespräche

In der App liegen diese Wege hinter Gespräche und Postfach; was dort zu sehen ist, beschreiben Gespräche und Postfach. Lesen darf jede Rolle, jede Arbeitsaktion an einem Gespräch verlangt mindestens Bearbeiten.

Liste

GET /api/v1/conversations

Liefert eine Seite von Gesprächen, maskiert, gefiltert und sortiert.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
ParameterWerteStandardWirkung
page1 bis 100001Seite
per_page1 bis 20050Einträge je Seite
sortcreated_at, message_count, frustration_score, status, escalated_atcreated_atSortierspalte; bei Gleichstand entscheidet die Kennung
dirasc, descdescRichtung
assistantKennung, höchstens 64 Zeichen–nur Gespräche dieses Assistenten
channeltest, widget, api–Herkunft des Gesprächs
statusopen, closed, escalated–Zustand
languageunknown oder Sprachkürzel wie de oder de-at–unknown findet Gespräche, deren Sprache nicht erkannt wurde
mailbox0, 1–1: übergeben und noch nicht erledigt, die Liste im Postfach
assignednone, me oder Kennung einer Person, höchstens 64 Zeichen–Zuständigkeit; none findet Gespräche ohne zuständige Person
queueName einer Stelle, höchstens 80 Zeichen, oder none–Stelle aus der Weiterleitung; none findet Gespräche ohne Stelle
unverified0, 1–1: Gespräche mit mindestens einer Antwort, deren Aussage als unbelegt markiert ist
qSuchbegriff, höchstens 120 Zeichen–Suche in Titel und Nachrichtentext
from, toDatum oder Zeitpunkt–Zeitraum nach Anlagezeit; ein Wert ohne Versatz gilt in zone; ein bloßes Datum in to schließt den ganzen Tag ein
zoneZeitzonenname, höchstens 64 ZeichenEurope/BerlinZone, in der from und to gelesen werden; Tagesgrenzen und der Folgetag eines bloßen Datums werden dort gerechnet. Unbekannt und mit from oder to: 422 mit unknown_timezone

Ein Wert im falschen Typ wird abgelehnt und nicht übergangen; die Antwort ist dann 422. Die Suche findet Teilzeichenfolgen, % und _ gelten wörtlich. Mit der Rolle Inhaber wird im Klartext gesucht, mit jeder anderen Rolle in der maskierten Fassung: gefunden wird nur, was die Rolle auch sehen kann. Findet die Suche in der maskierten Fassung mehr als 20000 Gespräche, antwortet der Weg mit 422, search_too_broad und limit, statt die Liste zu kürzen; grenzen Sie dann Zeitraum oder Filter ein. Wo der Filter protokolliert wird, steht für die Suche nur "q": true, nicht der Suchbegriff.

FeldInhalt
conversationsGespräche der Seite, Felder siehe Felder eines Gesprächs
totalZahl aller Treffer
page, per_pageSeite und Seitengröße
sort, dirangewandte Sortierung
languagegesetzter Sprachfilter
languagesbis zu 50 erkannte Sprachen der Gespräche, alphabetisch
maskedtrue: die Liste ist maskiert

Felder eines Gesprächs

FeldInhalt
idKennung
assistant_id, assistantKennung und Name des Assistenten
channelwidget, test oder api
hostHerkunft beim Widget; bei Test- und Schnittstellengesprächen der Hostname aus Origin oder Referer der Anfrage, ohne beides null
languageerkannte Sprache
titleTitel, maskiert außer im Klartext
statusopen, closed oder escalated
message_countZahl der Nachrichten
created, updatedZeitpunkte nach ISO 8601
frustration_scoreFrustrationswert des Gesprächs
escalation_reason, escalated_atÜbergabegrund, maskiert, und Zeitpunkt der Übergabe
assigned_user_id, assigned_to, assigned_atzuständige Person; assigned_to ist ihr Name, ersatzweise ihre E-Mail-Adresse
taken_over_atBeginn einer laufenden Übernahme, sonst null
queueStelle aus der Weiterleitung
resolved_atZeitpunkt der Erledigung
flagged_atZeitpunkt der Markierung, sonst null
tagsSchlagworte, ohne Eintrag []
internal_noteinterne Notiz
maskedtrue, solange das Gespräch nicht im Klartext gelesen wird

Einzelansicht, Klartext und Anhänge

GET /api/v1/conversations/{id}

Liefert ein Gespräch mit seinem Verlauf, maskiert. Eine unbekannte Kennung ergibt 404 mit not_found.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
FeldInhalt
conversationFelder wie unter Felder eines Gesprächs
messagesVerlauf aus den jüngsten 500 Nachrichten und den jüngsten 500 Werkzeugaufrufen, ältere fallen am Anfang weg; Texte maskiert; Antworten des Assistenten mit rating (1, 0 oder null)
maskedtrue in dieser Ansicht
masked_kindsArten personenbezogener Angaben, die im Verlauf maskiert wurden
access_logdie letzten 20 Klartextzugriffe auf dieses Gespräch (conversation.revealed) mit id, time, action, who und reason
attachmentsAnhänge mit id, name, mime, bytes, sha256, lead_id und time

Bei Werkzeugaufrufen im Verlauf bleiben die Strukturfelder unmaskiert: id, key, kind, state, duration_ms, approval_path, needs_confirmation, chain_capped und created_at; die übrigen Felder laufen durch die Maskierung. Auch die Werte unbelegter Aussagen sind maskiert. Die App sagt dazu „Personenbezogenes ist maskiert: E-Mail, Telefon, IBAN und Anschrift.“

POST /api/v1/conversations/{id}/reveal

Liefert dasselbe Gespräch im Klartext, mit masked: false. Jeder Zugriff wird als conversation.revealed mit Grund protokolliert und erscheint danach in access_log.

Anmeldung
Sitzungsmarke, nur Inhaber
Begrenzung
conversations, 30 je Minute
FeldPflichtRegelBedeutung
reasonja5 bis 200 ZeichenGrund für den Zugriff; in der App Grund für den Zugriff
StatuserrorBedeutung
403role_too_lowRolle ist nicht Inhaber; required ist owner.
422–Grund fehlt oder ist zu kurz; die App meldet „Bitte einen Grund mit mindestens fünf Zeichen angeben.“
404not_foundGespräch unbekannt.
500not_loggedKein Protokolleintrag, darum kein Klartext.

GET /api/v1/attachments/{id}

Lädt einen Anhang als Datei herunter. Jeder Abruf wird als attachment.read protokolliert.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
conversations, 30 je Minute
Antwort oder KopfInhalt
200Datei mit Content-Disposition: attachment; eine nicht zugelassene Dateiart kommt als application/octet-stream
Content-Security-Policydefault-src 'none'; sandbox
X-Content-Type-Optionsnosniff
Cache-Controlprivate, no-store, max-age=0
Referrer-Policyno-referrer
404 not_foundAnhang unbekannt
410 file_missingDer Eintrag besteht, die Datei fehlt; dazu measured: false

Ausfuhr als CSV

Beide Ausfuhren setzen das Paketmerkmal für den Gesprächsexport voraus und tragen die Drossel conversations. Fehlt das Merkmal in Ihrem Paket, antworten sie mit 402 plan_feature_missing; feature ist dann conversation_export. Ohne reveal=1 sind die Inhalte maskiert. Mit reveal=1 braucht es die Rolle Inhaber und einen Grund. Jede Ausfuhr wird als conversation.exported protokolliert, mit Klartextangabe, Grund, Zeilenzahl und Filter; kommt der Eintrag nicht zustande, bricht nur die Ausfuhr im Klartext mit 500 und not_logged ab; die maskierte Ausfuhr läuft ohne Eintrag weiter.

GET /api/v1/conversations/export

Führt die gefilterten Gespräche als CSV aus, eine Zeile je Gespräch mit den Spalten id, created_at, assistant, channel, language, status, messages, title und escalation. Es gelten die Filter der Liste. In der App heißt das Gefilterte Gespräche als CSV.

Anmeldung
Sitzungsmarke, jede Rolle; Klartext nur Inhaber
Begrenzung
conversations, 30 je Minute
ParameterWerteBedeutung
Filter der Listewie obengrenzen die Ausfuhr ein
reveal0, 11 fordert Klartext an
reasonhöchstens 200 Zeichen, mit reveal=1 mindestens 5Grund der Klartext-Ausfuhr
AntwortInhalt
content-typetext/csv; charset=utf-8
content-dispositionDownload mit dem Namen conversations.csv
x-rowsZahl der Zeilen
x-masked1 maskiert, 0 Klartext
KörperSpalten durch Semikolon getrennt, Zeilenende CRLF
422 too_manymehr als 5000 Treffer; dazu total und limit. Die App meldet „Zu viele Gespräche für einen Export. Bitte den Zeitraum eingrenzen.“
422 reason_requiredreveal=1 ohne Grund von mindestens 5 Zeichen; dazu min
403 role_too_lowreveal=1 ohne die Rolle Inhaber
402 plan_feature_missingIhr Paket enthält den Gesprächsexport nicht; dazu feature, plan, plan_name und available_in

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

Führt den Verlauf eines Gesprächs als CSV aus, eine Zeile je Nachricht oder Werkzeugaufruf, mit den Spalten time, role, text, state, rating, tool_key und tool_state. Der Dateiname ist gespraech-<Kennung>.csv.

Anmeldung
Sitzungsmarke, jede Rolle; Klartext nur Inhaber
Begrenzung
conversations, 30 je Minute
AntwortInhalt
x-rowsZahl der Zeilen
x-capped1, wenn der Verlauf bei 500 Nachrichten oder 500 Werkzeugaufrufen abgeschnitten wurde, sonst 0
404 not_foundGespräch unbekannt
weitere402 plan_feature_missing, reveal, reason und ihre Fehler wie bei der Ausfuhr der Liste

Gespräche bearbeiten

Alle Wege dieses Abschnitts verlangen mindestens Bearbeiten. Eine unbekannte Gesprächskennung ergibt 404 mit not_found. Wenn nicht anders genannt, antworten sie mit dem Gespräch in den Feldern eines Gesprächs.

POST /api/v1/conversations/{id}/escalate

Übergibt ein Gespräch von Hand an das Team: status wird escalated, escalated_at wird gesetzt, eine frühere Erledigung wird aufgehoben. Der Grund wird an einen vorhandenen Übergabegrund angehängt, zusammen höchstens 300 Zeichen; ohne Grund steht dort „Von Hand übergeben“. Auch diese Übergabe durchläuft die Weiterleitungsregeln. Ist das Gespräch schon übergeben, bleibt es unverändert, auch sein Grund, und die Regeln laufen nicht erneut. Die Antwort enthält in beiden Fällen conversation und unchanged (true, wenn nichts geändert wurde).

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
reasonneinhöchstens 200 ZeichenÜbergabegrund

POST /api/v1/conversations/{id}/assign

Setzt die zuständige Person. user_id: null oder eine leere Zeichenkette hebt die Zuständigkeit auf. Eine Kennung, die nicht zum Konto gehört, ergibt 422 mit unknown_user. In der App heißen die Schaltflächen Übernehmen und Freigeben.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
user_idneinKennung, höchstens 64 Zeichen, oder nullzuständige Person

POST /api/v1/conversations/{id}/takeover

Übernimmt ein Widget-Gespräch und macht Sie zur zuständigen Person; ein schon gesetztes assigned_at bleibt. Solange die Übernahme läuft, antwortet der Assistent nicht; Ihre Nachrichten gehen als Nachrichten des Teams an den Besucher. Die App nennt das Gespräch übernehmen und zeigt danach „Sie führen dieses Gespräch. Der Assistent antwortet nicht.“ Ein wiederholter Aufruf ändert die Zeitpunkte nicht. 409 kommt nur, solange eine andere Person aus dem Konto die Übernahme führt; eine Zuständigkeit ohne Übernahme geht auf Sie über. Die Übernahme einer Person, die nicht mehr zum Konto gehört, gilt als frei und geht mit neuem Zeitpunkt auf Sie über.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
StatuserrorBedeutung
422not_liveDas Gespräch kommt nicht aus dem Widget.
403consent_revokedDer Besucher hat seine Einwilligung zurückgezogen, siehe Einwilligung und Besucherrechte.
409taken_over_by_otherEine andere Person führt die Übernahme; assigned_to nennt sie.

POST /api/v1/conversations/{id}/release

Beendet die Übernahme; taken_over_at wird null, die Zuständigkeit bleibt. In der App heißt das Übernahme beenden. Ein Gespräch ohne Übernahme zurückzugeben ist kein Fehler. Führt eine andere Person aus dem Konto die Übernahme, antwortet der Weg mit 409 und taken_over_by_other; die Übernahme einer Person, die nicht mehr zum Konto gehört, lässt sich beenden.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

POST /api/v1/conversations/{id}/resolve

Markiert das Gespräch als erledigt: status wird closed, resolved_at wird gesetzt, eine eigene Übernahme endet (taken_over_at wird null), und der Webhook conversation.ended wird ausgelöst. Ein schon geschlossenes Gespräch bleibt unverändert, samt erstem resolved_at, und löst kein zweites Ereignis aus; die Antwort trägt dann unchanged: true. Führt eine andere Person aus dem Konto das Gespräch, folgt 409 mit taken_over_by_other und assigned_to. In der App heißt das Als erledigt markieren.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

POST /api/v1/conversations/{id}/mark

Setzt Markierung, Schlagworte und interne Notiz. Geändert wird nur, was im Körper steht. In der App heißen die Felder Markieren, Schlagworte und Interne Notiz.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
flaggedneinwahr oder falschtrue setzt flagged_at, eine vorhandene Markierung behält ihren Zeitpunkt; false löscht ihn
tagsneinListe mit höchstens 10 Einträgen zu je höchstens 40 ZeichenLeerzeichen am Rand und doppelte Einträge fallen weg; eine leere Liste entfernt alle Schlagworte
noteneinhöchstens 2000 Zeicheninterne Notiz; leer entfernt sie

POST /api/v1/conversations/{id}/messages/{message}/rating

Bewertet eine Antwort des Assistenten: 1 Hilfreich, 0 Nicht hilfreich, null hebt die Bewertung auf (Noch nicht bewertet). Die Antwort enthält message mit id und rating.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
conversations, 30 je Minute
StatuserrorBedeutung
422–rating fehlt im Körper oder ist nicht 0, 1 oder null.
404not_foundNachricht gehört nicht zu diesem Gespräch.
422not_rateableDie Nachricht stammt nicht vom Assistenten.

POST /api/v1/conversations/{id}/tool/{call}/confirm

Bestätigt einen vorgeschlagenen Werkzeugaufruf, der auf Freigabe wartet. Die Antwort enthält call und duplicate. Ist der Aufruf nicht mehr im Zustand proposed oder kam ein zweiter Klick zuvor, kommt derselbe Stand mit duplicate: true zurück statt eines Fehlers. Ein unbekannter Aufruf ergibt 404 mit not_found. Werkzeuge beschreibt Werkzeuge.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

POST /api/v1/conversations/{id}/tool/{call}/reject

Verwirft einen vorgeschlagenen Werkzeugaufruf. Antwort und Verhalten bei einem zweiten Klick wie beim Bestätigen; ein unbekannter Aufruf ergibt 404 mit not_found.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

Anlegen, schreiben und löschen

POST /api/v1/conversations

Legt ein Testgespräch an, mit channel test und status open. Die Antwort 201 enthält conversation und greeting, die Begrüßung der aktiven Version. Wozu Testgespräche dienen, steht unter Probieren und abnehmen.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
conversations, 30 je Minute
FeldPflichtRegelBedeutung
assistant_idjaKennung, höchstens 64 ZeichenAssistent des Gesprächs
StatuserrorBedeutung
404not_foundAssistent unbekannt.
422no_versionDer Assistent hat keine aktive Version.

POST /api/v1/conversations/{id}/send

Schreibt eine Nachricht in ein Gespräch. Läuft eine Übernahme, wird der Text als Nachricht des Teams gespeichert (role operator) und die Antwort ist 201 mit message (id, role, text, author, state, time). Sonst antwortet der Assistent, und die Antwort kommt als Ereignisstrom wie unter Integration beschrieben.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
conversation-send, 20 je Minute
FeldPflichtRegelBedeutung
textja1 bis 4000 ZeichenNachricht
StatuserrorBedeutung
409taken_over_by_otherEine andere Person führt die Übernahme; assigned_to nennt sie.
409not_taken_overWidget-Gespräch ohne Übernahme: in ein laufendes Besuchergespräch schreibt nur, wer es übernommen hat.
422no_versionAssistent oder Version des Gesprächs gibt es nicht mehr.
409reply_in_progressZu diesem Gespräch läuft schon eine Antwort.

DELETE /api/v1/conversations/{id}

Löscht ein Gespräch und protokolliert das als conversation.deleted. Die Antwort ist {"deleted": true}. Ohne Protokolleintrag bleibt das Gespräch bestehen; dann kommt 500 mit not_logged. Fristen und Löschwege beschreibt Aufbewahrung und Löschung.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel

Aufbewahrungsfristen

GET /api/v1/conversations/retention

Liefert die Fristen in Tagen: retention mit general, test und api sowie default_general, den Startwert für neue Konten (90).

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

PUT /api/v1/conversations/retention

Setzt die drei Fristen und antwortet in derselben Form wie der lesende Weg. Die Änderung wird als retention.updated protokolliert. In der App heißen die Felder Alle Gespräche, Testgespräche und Über die Schnittstelle; dort steht auch „Die Fristen ändern kann, wer die Rolle Verwaltung oder Inhaber hat.“

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
generalja, darf null sein1 bis 3650Frist für alle Gespräche; null heißt: keine Frist gesetzt
testja, darf null sein1 bis 3650Testgespräche; null folgt der allgemeinen Frist
apija, darf null sein1 bis 3650Gespräche über die Schnittstelle; null folgt der allgemeinen Frist

Besuchersperren

Eine Sperre weist künftige Widget-Gespräche eines Besuchers ab, entweder nach seiner Adresse (address) oder nach seiner Sitzung (session). Ausgangspunkt ist ein Gespräch; die Sperre speichert einen Streuwert der Adresse oder Sitzung aus diesem Gespräch. Wie Gespräche in der App gesperrt werden, steht unter Gespräche.

GET /api/v1/visitor-blocks

Liefert in data die letzten 200 Sperren, neueste zuerst.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

POST /api/v1/visitor-blocks

Legt eine Sperre an und protokolliert sie als visitor.blocked. Gibt es für dieselbe Art und denselben Streuwert schon eine Sperre, wird sie aktualisiert: Grund und Dauer werden überschrieben, der Trefferzähler bleibt. Die Antwort ist 201 mit der Sperre in data. Ohne Protokolleintrag wird die Sperre weder angelegt noch geändert; dann kommt 500 mit not_logged.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
conversation_idjaUUIDGespräch, aus dem gesperrt wird
kindjaaddress, sessionArt der Sperre
reasonja8 bis 200 ZeichenGrund
daysnein1 bis 3650Dauer in Tagen; ohne Angabe unbefristet
StatuserrorBedeutung
404not_foundGespräch unbekannt.
422no_addressZum Gespräch ist kein Wert für die gewählte Art gespeichert.
500not_loggedKein Protokolleintrag, keine Sperre.

DELETE /api/v1/visitor-blocks/{id}

Hebt eine Sperre auf, protokolliert als visitor.unblocked. Die Antwort ist {"ok": true}; eine unbekannte Sperre ergibt 404 mit not_found.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel
FeldInhalt
id, kind, reasonKennung, Art und Grund
expires_atEnde der Sperre oder null für unbefristet
activeob die Sperre gerade greift
hits, last_hit_atabgewiesene Versuche und der letzte davon
created_at, created_byAnlage und Name der Person, die gesperrt hat
conversation_id, hostAusgangsgespräch und seine Herkunft

Team

Diese Wege stehen in der App hinter Team. Rollen und Einladungen aus Sicht der Oberfläche beschreibt Team und Rollen.

GET /api/v1/team

Liefert Mitglieder, offene Einladungen und den Stand der Sitzplätze. Gezeigt werden höchstens 200 Personen, nach E-Mail-Adresse sortiert; ist die Liste abgeschnitten, zeigt die App „Es werden die ersten {n} Personen gezeigt.“

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
FeldInhalt
membersPersonen mit id, name, email, role, available und available_at
total, cappedZahl aller Personen und ob die Liste abgeschnitten ist
invitationsoffene Einladungen mit id, email, role, expires_at und created_at
seatsSitzplätze mit limit, used, measured, reason und exceeded; ist der Zähler nicht lesbar, steht measured: false mit reason: no_counter

POST /api/v1/availability

Schaltet die eigene Bereitschaft. available_at wird beim Einschalten gesetzt, wenn es noch leer ist, und beim Ausschalten gelöscht. Die Antwort enthält member. In der App heißt das Bereitschaft einschalten und Bereitschaft beenden, mit dem Hinweis „Wer bereit ist, erscheint im Postfach als verfügbar für eine Übergabe.“ Solange Ihre E-Mail-Adresse nicht bestätigt ist, steht dort statt der Schaltfläche „Die Bereitschaft lässt sich einschalten, sobald Ihre E-Mail-Adresse bestätigt ist.“

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
availablejawahr oder falschbereit oder nicht

POST /api/v1/team/invitations

Lädt eine Person ein. Die Einladung gilt 168 Stunden, also sieben Tage, und geht per E-Mail mit einem Link zur Seite Einladung annehmen in der Sprache der einladenden Person hinaus. Scheitert der Versand, bleibt die Einladung trotzdem angelegt. Protokolliert als team.invited; die Antwort ist 201 mit invitation. In der App: Person einladen, Schaltfläche Einladung senden.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
invitations, 5 je Minute
FeldPflichtRegelBedeutung
emailjagültige Adresse, höchstens 190 ZeichenAdresse der eingeladenen Person
rolejaviewer, editor, adminRolle nach dem Annehmen; Inhaber wird so nicht vergeben
StatuserrorBedeutung
422validationfields.email enthält validation.already_member (schon im Team) oder validation.invitation_open (Einladung läuft noch).
403role_too_lowDie eigene Rolle liegt unter der vergebenen.
402plan_limit_reachedAlle Sitzplätze sind belegt. Die App meldet „Alle Sitzplätze sind belegt. Nehmen Sie eine Einladung zurück oder erweitern Sie das Paket.“

DELETE /api/v1/team/invitations/{id}

Nimmt eine offene Einladung zurück; sie wird als zurückgenommen markiert, nicht gelöscht. Protokolliert als team.invitation_revoked, Antwort {"revoked": true}. Unbekannte oder nicht mehr offene Einladungen ergeben 404 mit not_found. In der App: Zurücknehmen.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel

PATCH /api/v1/team/members/{id}

Ändert die Rolle einer Person auf viewer, editor oder admin. Protokolliert als team.role_changed; die Antwort enthält member.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel
StatuserrorBedeutung
404not_foundPerson gehört nicht zum Konto.
422not_selfEigene Rolle; die App meldet „Die eigene Rolle lässt sich hier nicht ändern.“
422owner_protectedDer Inhaber; die App meldet „Der Inhaber lässt sich nicht ändern oder entfernen.“
403role_too_lowDie eigene Rolle reicht für diese Änderung nicht.

DELETE /api/v1/team/members/{id}

Entfernt eine Person aus dem Team und protokolliert das als team.member_removed. Arbeitet sie gerade in diesem Konto, werden ihre Sitzungsmarken gelöscht; gehört sie dann zu keinem weiteren Konto, wird ihr Zugang gelöscht, sonst wechselt sie in das älteste verbleibende Konto, das nicht gelöscht ist. Arbeitet sie gerade in einem anderen Konto, bleiben ihre Sitzungen dort bestehen. Antwort {"removed": true}; not_self und owner_protected wie beim Ändern. In der App: Entfernen, mit der Rückfrage „Diese Person aus dem Team entfernen? Laufende Sitzungen enden sofort.“

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel

POST /api/v1/team/invitations/accept

Nimmt eine Einladung mit der angemeldeten Person an. Protokolliert als team.invitation_accepted; die Antwort enthält joined: true, tenant mit id und name sowie role. Die App zeigt danach „Sie gehören jetzt zum Team.“

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
tokenjahöchstens 120 ZeichenMarke aus dem Einladungslink
StatuserrorBedeutung
422invalid_tokenMarke unbekannt, abgelaufen oder zurückgenommen; die App meldet „Diese Einladung ist abgelaufen oder wurde zurückgenommen. Bitten Sie um eine neue.“
403wrong_accountDie angemeldete E-Mail-Adresse ist nicht die eingeladene. Verglichen wird die vereinheitlichte Form beider Adressen, etwa ohne Zusatz hinter einem Plus.

Weiterleitungsregeln

Bei jeder Übergabe, auch von Hand, prüft der Server die aktiven Regeln in ihrer Reihenfolge; es gewinnt die erste passende. Verglichen wird im Übergabegrund und im Gesprächstitel, in Kleinschreibung und ohne Wortgrenze: das Stichwort rechnung trifft auch „Rechnungsadresse“. Die Regel setzt die Stelle (queue) und, wenn noch niemand zuständig ist, ihre Person; gehört diese nicht mehr zum Konto, bleibt es bei der Stelle. Hat das Gespräch schon eine Stelle, bleibt sie. Passt keine Regel, bleibt die Stelle leer.

In der App heißt der Bereich Weiterleitung, die Felder Stelle und Stichwörter (mehrere mit Komma getrennt). Ohne Regel zeigt sie „Keine Regel. Ohne Regel bleibt jede Übergabe ohne Stelle.“ Wie Stellen im Postfach erscheinen, steht dort.

GET /api/v1/routing-rules

Liefert rules in ihrer Reihenfolge und max, die Höchstzahl von 50 Regeln.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

POST /api/v1/routing-rules

Legt eine Regel am Ende der Liste an; ohne is_active ist sie aktiv. Die Antwort ist 201 mit rule und der ganzen Liste in rules.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
queuejahöchstens 80 ZeichenName der Stelle
keywordsja1 bis 20 Einträge zu je höchstens 60 ZeichenStichwörter
assigned_user_idneinKennung, höchstens 64 ZeichenPerson, die zuständig wird
is_activeneinwahr oder falschob die Regel geprüft wird
StatuserrorBedeutung
422unknown_userDie Person gehört nicht zum Konto.
422too_many_rulesEs gibt schon 50 Regeln.

PUT /api/v1/routing-rules/{id}

Ändert Stelle, Stichwörter, Person und Aktivschalter einer Regel mit denselben Feldern wie beim Anlegen. Fehlt is_active, wird die Regel wieder aktiv. Die Position ändert sich dabei nicht. Die Antwort enthält rule und die Liste in rules. Eine unbekannte Regel ergibt hier wie beim Verschieben und Löschen 404 mit not_found.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

POST /api/v1/routing-rules/{id}/up

Schiebt eine Regel um eine Stelle nach oben. Die Position vergibt der Server. Die Antwort enthält moved, false bei der obersten Regel, und die Liste in rules.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

DELETE /api/v1/routing-rules/{id}

Löscht eine Regel. Die Antwort enthält deleted: true und die verbleibende Liste in rules.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel
FeldInhalt
id, positionKennung und Platz in der Reihenfolge
queue, keywordsStelle und Stichwörter
assigned_user_id, assigned_toPerson und ihr Name
is_activeaktiv oder nicht

Katalog und Shopanbindung

Alle Wege dieses Abschnitts setzen das Paketmerkmal für die Shopanbindung voraus; fehlt es, antworten sie mit 402 und plan_feature_missing. In der App liegt das unter Katalog, beschrieben unter Katalog und Shop.

Artikel

GET /api/v1/catalog

Liefert eine Seite von Artikeln, nach Titel sortiert, in products, dazu total, page und per_page. total zählt alle Artikel des Kontos, auch wenn search gesetzt ist.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
ParameterWerteStandardWirkung
searchhöchstens 120 Zeichen–Titel oder Shop-Kennung beginnt mit dem Begriff
pageab 11Seite
per_page1 bis 20050Einträge je Seite

POST /api/v1/catalog

Legt einen Artikel an. Die Antwort ist 201 mit product. Ist die Shop-Kennung schon vergeben, kommt 422 mit identifier_taken.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
catalog, 20 je Minute
FeldPflichtRegelBedeutung
external_idjahöchstens 100 ZeichenKennung im Shop
titlejahöchstens 200 ZeichenTitel
descriptionneinhöchstens 800 ZeichenBeschreibung
price_cents, list_price_centsneinganze Zahl, 0 bis 100000000Preis und Streichpreis in Cent; der Streichpreis wird nicht gegen den Preis geprüft
currencyneingenau drei ZeichenWährung, in Großbuchstaben gespeichert; ohne Angabe EUR
image_url, product_url, cart_urlneinAdresse, höchstens 500 ZeichenBild, Artikelseite und Warenkorb-Link
is_availableneinwahr oder falschlieferbar; ohne Angabe true
attributesneinObjektfreie Merkmale; ohne Angabe bleibt der bisherige Wert
rating_tenthsnein0 bis 50Bewertung in Zehnteln, 50 ist die volle Bewertung; ausgegeben wird zusätzlich rating als Zehntel geteilt durch zehn
rating_countnein0 bis 100000000Zahl der Bewertungen
delivery_daysnein0 bis 365Lieferzeit in Tagen
featuresneinhöchstens 6 Einträge zu je höchstens 60 ZeichenMerkmale für die Produktkarte
actionneinnone, product, cartSchaltfläche der Produktkarte; ohne Angabe product
accessories, also_boughtneinje höchstens 6 Shop-Kennungen zu höchstens 100 ZeichenZubehör und häufig zusammen gekaufte Artikel

Ein Artikel wird mit den Feldern der Produktkarte ausgegeben (id, external_id, title, description, price_cents, currency, price_text, list_price_cents, list_price_text, saving_cents, saving_percent, image_url, product_url, is_available, rating, rating_count, delivery_days, features, action, action_url), ergänzt um attributes, action_setting, rating_tenths, cart_url, accessories, also_bought und updated_at.

PUT /api/v1/catalog/{id}

Ändert einen Artikel mit denselben Feldern wie beim Anlegen, außer external_id, die sich nicht ändern lässt. Der Weg schreibt den Artikel neu: ein weggelassenes Feld fällt auf seinen Standard oder null zurück, nur attributes bleibt ohne Angabe erhalten. Antwort mit product; ein unbekannter Artikel ergibt 404 mit not_found.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
catalog, 20 je Minute

DELETE /api/v1/catalog/{id}

Löscht einen Artikel. Die Antwort ist {"deleted": true}.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

POST /api/v1/catalog/import

Führt bis zu 500 Artikel in einem Aufruf ein, in einer Transaktion. Abgeglichen wird über external_id: ein zweiter Lauf mit denselben Kennungen legt keine Dubletten an, sondern ändert die vorhandenen Artikel. Die Antwort enthält new, changed und total.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
catalog, 20 je Minute
FeldPflichtRegelBedeutung
productsja1 bis 500 EinträgeArtikel mit den Feldern wie beim Anlegen

Shopanbindung

Die Anbindung liest nur: im Shop wird über sie nichts angelegt, geändert oder bestellt. Der Zugriffsschlüssel geht einmal hinein; jede Antwort zeigt von ihm nur die letzten vier Zeichen in access_key_masked. Lesen, Speichern und Abgleich antworten mit connection, einem Objekt mit den Feldern der folgenden Tabelle.

FeldInhalt
base_urlAdresse des Shops
access_key_maskedEndung des Schlüssels mit vorangestellter Auslassung
currency, is_activeWährung und ob die Anbindung aktiv ist
sync_pending, sync_started_at, sync_requested_atoffener Abgleich, sein Start und seine Anforderung
last_sync_at, last_sync_ok, last_sync_error, last_success_atletzter Abgleich, sein Ergebnis, sein Fehler und der letzte erfolgreiche
countsZahlen des letzten Abgleichs oder null

GET /api/v1/catalog/shop

Liefert die Anbindung des Kontos in connection; ist keine gespeichert, ist connection null.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

PUT /api/v1/catalog/shop

Speichert die Anbindung. Die Adresse wird geprüft, bevor sie eingetragen wird, denn der Server ruft sie später selbst mit dem Schlüssel ab. Zeigt eine geänderte Adresse auf einen anderen Shop, braucht es einen neuen Schlüssel. is_active ändert sich nur, wenn es mitgeschickt wird. Die Antwort enthält connection.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
catalog, 20 je Minute
FeldPflichtRegelBedeutung
base_urljahöchstens 300 Zeichen, httpsAdresse des Shops, zum Beispiel https://shop.example.com
access_keybeim ersten Speichern und bei neuem Shop12 bis 200 Zeichen aus Buchstaben, Ziffern, _ und -Zugriffsschlüssel
is_activeneinwahr oder falschAnbindung aktiv
StatuserrorBedeutung
422url_unreadableAdresse nicht lesbar.
422https_required, scheme_not_allowedDie Adresse nutzt kein https.
422name_unresolvableDer Name lässt sich nicht auflösen.
422target_not_allowedDie Adresse zeigt nicht ins öffentliche Netz.
422access_key_requiredNeuer Shop ohne neuen Schlüssel.

POST /api/v1/catalog/shop/test

Prüft die gespeicherte Anbindung mit einem Probeabruf. Erfolg: ok: true mit currency und has_products. Misserfolg: ok: false mit error, etwa key_unreadable oder einem Grund wie beim Speichern. Höchstens drei Prüfungen je Minute; danach 429 mit too_many_tests, retry_after und dem Kopf Retry-After. Ohne Anbindung: 404 mit connection_missing.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
catalog, 20 je Minute

POST /api/v1/catalog/shop/sync

Fordert einen Abgleich an, der als Hintergrundauftrag läuft (siehe Hintergrundaufträge). Die Antwort ist 202 mit job_id, already_pending und connection; ein zweiter Klick bekommt den offenen Auftrag zurück, mit already_pending: true. Ist kein Auftrag mehr offen, nimmt der Weg eine neue Anforderung frühestens 900 Sekunden nach der letzten an; davor kommt 429 mit sync_too_soon, retry_after, connection und dem Kopf Retry-After.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
catalog, 20 je Minute
StatuserrorBedeutung
404connection_missingKeine Anbindung gespeichert.
422connection_inactiveAnbindung ist abgeschaltet.

DELETE /api/v1/catalog/shop

Trennt die Anbindung. Die Artikel bleiben im Katalog. Die Antwort ist {"deleted": true}; ohne gespeicherte Anbindung kommt 404 mit connection_missing.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel

Auswertung

Die folgenden Wege bis einschließlich GET /api/v1/analytics/report setzen das Paketmerkmal für die Gesprächsauswertung voraus; fehlt es, antworten sie mit 402 und plan_feature_missing. Lesen darf dort jede Rolle. In der App ist das Auswertung, beschrieben unter Auswertung. Testgespräche mit channel test, also die aus dem Probierdialog und die Prüfgespräche der Abnahme, zählen in diesen Zahlen nicht mit, wie in der App.

ParameterWerteStandardWirkung
period7d, 30d, 90d30dZeitraum in Tagen; der laufende Tag zählt mit
zoneZeitzonenname, höchstens 64 ZeichenEurope/BerlinZone, in der Tage gerechnet werden. Ältere Namen, die Browser noch melden, etwa Asia/Calcutta oder Europe/Kiev, nimmt der Weg an und rechnet unter dem heutigen Namen (Asia/Kolkata, Europe/Kyiv); diesen Namen nennen auch Antworten mit zone. Groß- und Kleinschreibung spielen keine Rolle, zone nennt die übliche Schreibung. 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. Eine unbekannte Zone ergibt 422 mit unknown_timezone, ebenso ein Versatz wie +01:00. Die Seite Auswertung zeigt dann „Die Zeitzone dieses Geräts erkennt der Dienst nicht. Die Zahlen lassen sich darum keinem Tag zuordnen und werden nicht angezeigt.“
assistantUUID–nur dieser Assistent; ein unbekannter ergibt 404 mit unknown_assistant

GET /api/v1/analytics

Liefert die 32 Kennzahlenkarten des Zeitraums in einem Abruf: period, zone, from, to, days, assistant und cards.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

Jede Karte hat value, measured und reason. value ist null, wenn measured false ist; reason nennt dann den Grund. Anteile tragen value in Prozent mit einer Nachkommastelle und dazu counter und denominator. coverage ist ein Mittelwert in Prozent und trägt nur denominator; messages_per_conversation, reply_ms_p50 und reply_ms_p95 tragen keins von beiden.

GruppeKarten
Umfangconversations, messages, answered, messages_per_conversation
Übergabe und Frustescalations, escalation_rate, self_resolved, frustration_rate
Antwortgüteabstentions, unanswered, citation_rate, coverage
Wissenssuche, aus dem jüngsten Prüflauf im Zeitraum, für das ganze Konto unabhängig von assistantretrieval_mrr, retrieval_hit_rate
Regeln und Sperrenenforcement_rate, hard_topic_rate, blocked_rate
Tempo und Verbrauchreply_ms_p50, reply_ms_p95, units
Werkzeugetool_calls, tool_executed, tool_rejected, tool_errors
Vorgängeleads, appointments, carts, abandoned, abandon_rate
Besucherbewertung, gezählt nach Zeitpunkt der Bewertungvisitor_ratings, visitor_helpful_rate, visitor_rating_coverage
reasonBedeutung
no_conversationkein Gespräch im Zeitraum
no_replykeine Antwort, aus der sich der Wert rechnen ließe
no_searchkeine Wissenssuche
no_probekein Prüflauf im Zeitraum
no_enforcement_checkkeine Regelprüfung
no_tool_callkein Werkzeugaufruf
no_ratingkeine Bewertung

GET /api/v1/analytics/timeseries

Zeitreihe je Tag in der gewählten Zone. days enthält je Tag day, conversations, messages und escalations sowie citation_rate, unanswered, escalation_rate, coverage und retrieval_mrr in der Form der Kennzahlkarten; dazu kommen period, zone und measured.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/topics

Die häufigsten Themen, höchstens 15. Jedes Thema trägt previous, seine Zahl im gleich langen Zeitraum unmittelbar davor, und direction (up, down oder flat); gab es davor kein Thema, nennt previous den Grund no_previous_question und direction ist null. Ohne Besucherfrage im Zeitraum ist measured false mit reason no_question, ohne erkennbares Thema mit no_topic.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/distribution

Verteilung der Gespräche nach Sprache (languages) und nach Fensterbreite (viewports: handy, tablet, desktop, breit), jede Gruppe mit eigenem measured. Jeder Eintrag in entries hat key, conversations und share; der Anteil bezieht sich auf basis, die Gespräche mit Angabe. Gespräche ohne Angabe zählen getrennt unter without. Ohne Gespräch im Zeitraum steht reason auf no_conversation; fehlt in einer Gruppe jede Angabe, auf no_language oder no_viewport.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/unanswered

Fragen, auf die der Assistent keine Antwort hatte: zu den jüngsten 50 Ausweichantworten (fallback) je die Besucherfrage davor, maskiert und auf 300 Zeichen gekürzt. questions enthält je Frage conversation_id, question und when, dazu kommt clusters.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/gaps

Erkannte Wissenslücken, höchstens 50. Anders als bei unanswered zählt hier auch eine ausdrückliche Ablehnung getrennt von einer Antwort ohne Beleg. Ist der Fragetext nicht mehr vorhanden, bleibt die Lücke gezählt, question ist dann null und question_available false. Jede Lücke hat kind (refused oder uncited); refused, uncited und total zählen alle Lücken des Zeitraums.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/blocks

Die Sperrfälle des Zeitraums, höchstens 50: was abgewiesen wurde und wo eine Grenze gegriffen hat, aufgeschlüsselt je Thema. Jeder Fall in cases hat kind (blocked oder enforced), topics, hard und when; topics zählt je Thema, dazu kommen checked, enforced, hard, blocked und total.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/dropoffs

Abbruchstellen und Zielereignisse mit ihrer Stelle im Gespräch; die Stelle ist die laufende Nummer der Nachricht, die erste Nachricht ist Stelle 1. Als Abbruch zählt ein offenes, nicht übergebenes Gespräch mit mindestens einer Besuchernachricht, in dem seit 30 Minuten (minutes) keine Nachricht mehr kam und zu dem es weder Anfrage noch Termin noch Warenkorb gibt. Die Antwort enthält dropoffs, positions, goals mit kind lead, appointment oder cart, total und goals_total. Die Verteilung geht über alle Fälle des Zeitraums, die Liste über die jüngsten 50; total nennt die volle Zahl.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/recommendations

Je Auffälligkeit des Zeitraums ein Vorschlag mit der Zahl und dem Bereich, den er betrifft. Eine Aussage über die Wirkung einer Änderung enthält er nicht. Jeder Eintrag in recommendations hat kind, count und target (wissen, assistenten oder werkzeuge); aufgeführt sind nur Arten mit mindestens einem Fall, die häufigste zuerst. kinds nennt die Zahl der möglichen Arten, total die der aufgeführten.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/versions

Die veröffentlichten Versionen eines Assistenten, höchste Nummer zuerst, höchstens 50. Die Antwort enthält assistant, versions mit id, number und published_at, dazu count und capped; Zeitraum und Zone wirken hier nicht. Ohne assistant antwortet der Weg mit 422 und assistant_required.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/comparison

Vergleicht ein Zeitfenster vor der Veröffentlichung einer Version mit einem ebenso langen danach, gerechnet über die Zeit und den Assistenten der Version. Das Fenster danach endet spätestens zum Zeitpunkt der Anfrage; ist es dadurch kürzer, steht in after partial: true. Die Antwort enthält version, comparable, before, after und delta; delta nennt je Karte die Differenz und direction (up, down oder flat), keine Wirkung. Fehlt einer Seite der Messwert, steht bei der Karte side_not_measured. Ist die Version nicht veröffentlicht, ist comparable false mit reason not_published; liegt die Veröffentlichung in der Zukunft, mit no_window. Der Parameter version (UUID) ist Pflicht; eine unbekannte Version ergibt 404 mit unknown_version.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/analytics/report

Stellt einen Bericht aus Kennzahlen, Zeitreihe, Themen, unbeantworteten Fragen, Lücken, Sperrfällen und Abbrüchen zusammen (metrics, timeseries, topics, unanswered, gaps, blocks, dropoffs) mit dem Zeitpunkt in created. Der Bericht wird frisch gerechnet, nicht aus dem Zwischenspeicher.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
conversations, 30 je Minute

GET /api/v1/analytics/subscription

Zeigt den Wochenbericht: weekly_report (ohne Einstellung true), period 7d, day monday und recipient, die E-Mail-Adresse des Inhabers, wenn sie bestätigt ist, sonst null.

Anmeldung
Sitzungsmarke
Begrenzung
keine benannte Drossel

PUT /api/v1/analytics/subscription

Bestellt den Wochenbericht oder bestellt ihn ab. Nur der Inhaber schaltet ihn, weil die Mail an ihn geht. Protokolliert als report.subscription.updated, Antwort in derselben Form wie der lesende Weg. Ohne Protokolleintrag bleibt die Einstellung unverändert; dann kommt 500 mit not_logged.

Anmeldung
Sitzungsmarke, nur Inhaber
Begrenzung
keine benannte Drossel
FeldPflichtRegelBedeutung
weekly_reportjawahr oder falschWochenbericht an oder aus

Vorgänge

Vorgänge sind Anfragen (leads), Termine (appointments) und Warenkörbe (carts). In der App liegen sie unter Vorgänge, beschrieben unter Termine und Vorgänge. Den Status von Terminen und Warenkörben ändern setzt das Paketmerkmal für Termine und Anfragen voraus; fehlt es, antwortet dieser Weg mit 402 und plan_feature_missing. Lesen und Löschen gehen in jedem Paket.

GET /api/v1/records

Zählt Vorgänge in zwei Gruppen: pending mit den offenen, also leads (neu), appointments (angefragt) und carts (offen), und total mit allen, gegliedert nach denselben drei Arten. plan_locked nennt die Arten ohne Paketmerkmal, deren Status sich nicht ändern lässt; gezählt werden auch sie. available_from nennt das Paket, ab dem alle gesperrten Arten enthalten sind, available_from_name seinen Namen; beide stehen auf null, wenn nichts gesperrt ist oder sich kein solches Paket nennen lässt.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel

GET /api/v1/records/{type}

Liefert eine Seite einer Art, neueste zuerst, mit entries, total, page und per_page. Eine unbekannte Art ergibt 404 mit unknown_kind.

Anmeldung
Sitzungsmarke, jede Rolle
Begrenzung
keine benannte Drossel
ParameterWerteStandardWirkung
typeleads, appointments, carts–Art im Pfad
statushöchstens 20 Zeichen–nur dieser Zustand
pageab 11Seite
per_page1 bis 20050Einträge je Seite

POST /api/v1/records/{type}/{id}/status

Setzt den Zustand eines Vorgangs. Die Antwort enthält entry. Wird ein Termin auf confirmed gesetzt, löst das den Webhook appointment.confirmed mit id und starts_at aus, und die Antwort enthält zusätzlich confirmation_mail. Ein unbekannter Vorgang ergibt 404 mit not_found. Wird ein abgesagter Termin auf requested oder confirmed gesetzt und ist sein Zeitpunkt inzwischen vergeben, ergibt das 409 mit appointment_slot_taken. Ist beim Setzen eines Termins auf requested oder confirmed die Terminsperre des Kontos belegt, ergibt das 503 mit appointment_lock_busy und Retry-After: 1. In beiden Fällen bleibt der Termin unverändert.

Anmeldung
Sitzungsmarke, ab Bearbeiten
Begrenzung
keine benannte Drossel

DELETE /api/v1/records/{type}/{id}

Löscht einen einzelnen Vorgang, etwa wenn ein Besucher die Löschung seiner Angaben verlangt, und protokolliert das vorher als record.deleted mit Art, Kennung und Zahlen, ohne Name, E-Mail-Adresse oder Telefon. Ohne Protokolleintrag bleibt der Vorgang bestehen; dann kommt 500 mit not_logged. Eine Paketschranke gibt es hier nicht: Termine und Warenkörbe lassen sich auch ohne die Termin-Funktionen löschen. Mit dem Vorgang gehen noch nicht zugestellte Meldungen an angeschlossene Systeme über ihn (lead.created, appointment.requested, appointment.confirmed) und bei einem Termin noch nicht versandte Erinnerungen und Bestätigungen; deren Zeile im Zustellprotokoll steht danach auf failed. Anhänge des Besuchers bleiben beim Gespräch. Mit with_conversation=1 geht das Gespräch, aus dem der Vorgang stammt, mit allen Nachrichten und Anhängen mit. Die Antwort enthält deleted, kind, id, conversation_deleted und counts. Eine unbekannte Art ergibt 404 mit unknown_kind, ein unbekannter Vorgang 404 mit not_found.

Anmeldung
Sitzungsmarke, ab Verwaltung, nicht aus einer Übernahme
Begrenzung
5 je Minute und Nutzer, gemeinsam für Export, Fristen, Widerspruch und Löschung
ArtZuständeFelder zusätzlich zu id, conversation_id, status, created_at
leadsnew, seen, donename, email, phone, subject, source, fields
appointmentsrequested, confirmed, cancelledtype, starts_at, duration_min, name, email, phone, subject
cartsopen, claimed, expireditems, subtotal_cents, discount_cents, coupon_code, shipping_cents, total_cents, currency, pickup_token_set (nur ob eine Abholmarke gesetzt ist, nicht die Marke)
confirmation_mailBedeutung
queuedBestätigung an den Besucher eingereiht
unchangedTermin war schon bestätigt, keine neue Mail
supersededTermin ist inzwischen nicht mehr bestätigt
no_emailkeine E-Mail-Adresse am Termin
pastTermin hat schon begonnen, es geht keine Zusage hinaus
duplicateBestätigung für diesen Beginn gibt es schon
failedEinreihen fehlgeschlagen

Aktivitätsprotokoll

GET /api/v1/activity

Liefert das Aktivitätsprotokoll, 25 Einträge je Seite, neueste zuerst. In der App ist das Protokoll; bei Einträgen mit who_kind api_key zeigt es unter Wer API-Schlüssel „{name}“ mit dem Namen aus who.

Anmeldung
Sitzungsmarke, ab Verwaltung
Begrenzung
keine benannte Drossel
ParameterWerteWirkung
actionhöchstens 80 Zeichennur diese Aktion
page1 bis 1000Seite
FeldInhalt
entriesEinträge mit id, time, action, who, who_kind, subject_type, subject_id und data. who ist die E-Mail-Adresse der Person, mit who_kind user. Hält ein Eintrag in data.api_key den auslösenden API-Schlüssel fest, etwa beim Anlegen einer Wissensquelle über die Schnittstelle, steht dort dessen Name zum Zeitpunkt der Handlung, ersatzweise sein prefix, mit who_kind api_key. Sonst sind beide null.
actionsdie Aktionen, die im Protokoll vorkommen, für einen Filter
total, page, pagesZahl der Einträge, Seite und Seitenzahl

Die Wege dieser Seite schreiben unter anderem conversation.revealed, conversation.exported, conversation.deleted, attachment.read, retention.updated, visitor.blocked, visitor.unblocked, team.invited, team.invitation_revoked, team.role_changed, team.member_removed, team.invitation_accepted, routing.rule_created, routing.rule_updated, routing.rule_moved, routing.rule_deleted und report.subscription.updated.

Häufige Fragen

Warum sind Texte in der Gesprächsliste maskiert?

Liste und Einzelansicht maskieren E-Mail-Adressen, Rufnummern, IBAN und Anschriften, die Ausfuhr ebenso, solange sie nicht mit reveal=1 angefordert wird. Den Klartext eines Gesprächs holt nur der Inhaber über POST /api/v1/conversations/{id}/reveal, mit einem Grund von mindestens fünf Zeichen; der Zugriff wird protokolliert.

Was bedeutet search_too_broad bei der Suche?

Ohne Klartextrecht wird in der maskierten Fassung gesucht. Findet die Suche dort mehr als 20000 Gespräche, bricht der Weg mit 422 ab. Setzen Sie from und to oder weitere Filter, dann suchen Sie erneut.

Warum zeigt die Auswertung nach einer Änderung noch den alten Stand?

Die Wege der Auswertung halten ihre Antwort 60 Sekunden vor. Nach Ablauf rechnet der nächste Abruf neu. Frisch gerechnet wird der Bericht unter GET /api/v1/analytics/report.

Warum kann ich nicht in ein Widget-Gespräch schreiben?

In ein laufendes Besuchergespräch schreibt nur, wer es übernommen hat. Rufen Sie zuerst POST /api/v1/conversations/{id}/takeover auf; ohne Übernahme antwortet der Sendeweg mit 409 und not_taken_over.

Was passiert mit den Artikeln, wenn ich die Shopanbindung trenne?

Sie bleiben im Katalog. DELETE /api/v1/catalog/shop entfernt nur die Anbindung; Artikel löschen Sie einzeln mit DELETE /api/v1/catalog/{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.