Zum Inhalt springen
XICBOT

Einstellungen

English
Dokumentation · Widget auf der Website

Auslieferung und Sicherheit des Widgets

Wie XICBOT Lader und Chatfenster ausliefert: Fassungsnamen, Prüfsummen, Sicherheitsrichtlinie, Antwortköpfe, Schlüsselprüfung und Grenzen je Besucher.

In einfacher Sprache

Diese Seite erklärt, wie das Chatfenster zu Ihrer Website kommt. Das Widget hat zwei Teile. Ein kleiner Lader steht auf Ihrer Seite. Das Chatfenster läuft in einem eigenen Rahmen. So bleibt es von Ihrer Seite getrennt. Das Chatfenster prüft seine Dateien beim Laden. Für jeden Besucher gelten Grenzen. Die Seite erklärt auch, was bei Störungen geschieht.

Stand

Alle Themen der Dokumentation

Das Widget besteht aus einem kleinen Lader auf Ihrer Seite und einem Chatfenster, das in einem eigenen Rahmen läuft. Hier steht, wie beide ausgeliefert werden, welche Köpfe sie tragen, mit welchen Prüfsummen das Chatfenster seine Teile lädt, wie die Schnittstelle einen Widgetschlüssel prüft und welche Grenzen je Besucher gelten. Wie Sie das Widget einbauen, beschreibt Widget einbauen.

Die Dateien des Widgets

Die Auslieferung unter https://cdn.xicbot.de kennt genau vier Dateien. Liefern Sie das Widget über Ihre eigene Domain aus, stehen dieselben Dateien unter Ihrem Pfad, siehe Eigener Pfad auf Ihrer Domain.

DateiAufgabeInhaltstyp
einbetten.jsLader auf Ihrer Seite. Er liest die Angaben am Skript-Tag und baut Auslöser und Rahmen. Selbst stellt er keine Anfrage ans Netz.text/javascript; charset=utf-8
rahmen.htmlGerüst des Chatfensters mit dem Seitentitel Chat. Es trägt <meta name="robots" content="noindex, nofollow">.text/html; charset=utf-8
rahmen.cssGestaltung des Chatfensterstext/css; charset=utf-8
rahmen.jsAblauf im Chatfenster: Einstellungen laden, Gespräch führen, Meldungen zeigentext/javascript; charset=utf-8
version.jsonÜbersicht der geltenden Fassungen, siehe Übersicht der Fassungenapplication/json; charset=utf-8
  • Die Wurzel / liefert rahmen.html.
  • Eine Anfrage mit HEAD erhält dieselben Köpfe, aber keinen Inhalt.
  • Jeder andere Name, auch eine veraltete Fassung, erhält Status 404 mit dem Text nicht gefunden.

Fassungsnamen und Zwischenspeicher

Jede Datei ist unter zwei Namen erreichbar: unter ihrem Einstiegsnamen, etwa rahmen.js, und unter einem Fassungsnamen wie rahmen.1a2b3c4d5e.js. Die zehn Hexadezimalzeichen sind der Anfang der SHA-256-Summe des ausgelieferten Inhalts; ändert sich die Datei, ändert sich ihr Fassungsname. Bei rahmen.html wird die Summe erst gebildet, nachdem die Verweise auf die beiden anderen Teile eingesetzt sind. Eine neue Fassung von rahmen.css oder rahmen.js ergibt deshalb auch eine neue Fassung des Gerüsts.

AnfrageCache-ControlBedeutung
Einstiegsname, etwa einbetten.jspublic, max-age=300Browser und Zwischenspeicher halten die Datei bis zu fünf Minuten.
Fassungsname, etwa rahmen.1a2b3c4d5e.jspublic, max-age=31536000, immutableEin Jahr gültig, ohne erneute Nachfrage beim Server.
rahmen.html unter beiden Namenno-storeWird bei jedem Öffnen neu geholt, weil es die Sicherheitsrichtlinie trägt.
version.jsonno-storeZeigt den Stand zum Zeitpunkt der Anfrage.
  • Ausgeliefert wird nur die geltende Fassung. Passt die Kennung in einem Fassungsnamen nicht zum aktuellen Inhalt, antwortet die Auslieferung mit 404 nicht gefunden, statt unter dem alten Namen still einen neuen Inhalt zu liefern.
  • Jede Datei nennt ihre Fassung im Kopf X-Xicbot-Version.
  • Der Einbaucode verweist auf den Einstiegsnamen einbetten.js. Eine neue Widgetfassung erreicht Ihre Seite deshalb ohne Änderung am Einbaucode, sobald die fünf Minuten des Zwischenspeichers abgelaufen sind.

Prüfsummen im Chatfenster

Im Quelltext verweist rahmen.html auf die Einstiegsnamen rahmen.css und rahmen.js. Beim Ausliefern ersetzt die Auslieferung beide Verweise durch die Fassungsnamen und setzt die SHA-384-Summe des jeweiligen Inhalts als integrity dazu. Der Browser lädt die Teile damit aus dem Zwischenspeicher, solange die Fassung gilt, und verwirft eine Datei, deren Inhalt nicht zur Summe passt.

rahmen.html html

<link rel="stylesheet" href="rahmen.<fassung>.css" integrity="sha384-…" crossorigin="anonymous">
<script src="rahmen.<fassung>.js" integrity="sha384-…" crossorigin="anonymous"></script>

crossorigin="anonymous" ist dabei nötig. Das Chatfenster hat einen undurchsichtigen Ursprung, jede seiner Anfragen gilt als herkunftsfremd. Ohne das Attribut bliebe die Antwort für den Browser verschlossen und die Prüfung schlüge fehl. Damit die Teile trotzdem geladen werden, sendet die Auslieferung zu jeder Datei Access-Control-Allow-Origin: * und Cross-Origin-Resource-Policy: cross-origin.

Übersicht der Fassungen

/version.json listet die geltenden Fassungen aller vier Dateien. Die Antwort wird nicht zwischengespeichert (no-store) und darf von jeder Seite gelesen werden (Access-Control-Allow-Origin: *).

FeldInhalt
generatedZeitpunkt der jüngsten Änderung unter den vier Dateien, im Format ISO 8601
originAdresse, von der das Chatfenster geladen wird; beim eigenen Pfad Ihre Adresse
apiAdresse der Schnittstelle, mit der das Chatfenster spricht
files[].nameEinstiegsname der Datei
files[].versionzehn Hexadezimalzeichen der SHA-256-Summe
files[].versioned_nameFassungsname der Datei
files[].sriSHA-384-Summe im Format sha384-…
files[].bytesGröße in Byte

Befehl in der Schale bash

# Geltende Fassungen abrufen
curl -s https://cdn.xicbot.de/version.json
# Köpfe des Laders ansehen
curl -sI https://cdn.xicbot.de/einbetten.js

Sicherheitsrichtlinie des Chatfensters

rahmen.html kommt mit einer eigenen Richtlinie im Kopf Content-Security-Policy. Sie gilt nur im Chatfenster, nicht auf Ihrer Seite; was Ihre eigene Richtlinie erlauben muss, steht unter Sicherheitsrichtlinie Ihrer Seite. Die Adressen darin sind die Basis, von der das Chatfenster geladen wird, und die Adresse der Schnittstelle, beim eigenen Pfad also Ihre Domain.

AnweisungWertWirkung
default-src'none'Was nicht ausdrücklich erlaubt ist, bleibt gesperrt.
script-srcBasis mit Schrägstrich, etwa https://cdn.xicbot.de/Skripte nur von der Basis des Chatfensters
style-srcBasis mit SchrägstrichStile nur von derselben Basis
connect-srcAdresse der Schnittstelle mit SchrägstrichAnfragen nur an die Schnittstelle des Chats
img-srcBasis mit Schrägstrich, data: und https:Bilder von der Basis, als data:-Adresse und über https auch von anderen Adressen. Fremde Bilder setzt das Fenster nur in Produktkarten ein, und nur mit einer https-Adresse.
base-uri'none'Kein <base>-Element kann die Adressen umlenken.
form-action'none'Das Fenster schickt keine Formulare ab.
frame-ancestors*Das Chatfenster darf in jede Seite eingebettet werden. Wo ein Gespräch beginnen darf, regelt Erlaubte Domains.
  • Der Schrägstrich am Ende begrenzt die Erlaubnis auf den Pfad der Basis. Beim eigenen Pfad https://example.com/chat gilt sie für https://example.com/chat/, nicht für den Rest der Domain.
  • Die Trennung von Ihrer Seite leistet die Sandbox des Rahmens, nicht frame-ancestors, siehe Abschottung von Ihrer Seite.

Antwortköpfe

Jede der vier Dateien kommt mit diesen Köpfen:

KopfWertZweck
Content-Typeje Datei, siehe Die Dateien des WidgetsInhaltstyp mit Zeichensatz UTF-8
X-Content-Type-OptionsnosniffDer Browser errät keinen anderen Inhaltstyp.
Referrer-Policyno-referrerFolgeanfragen nennen keine Herkunftsseite.
Access-Control-Allow-Origin*Das Chatfenster mit seinem undurchsichtigen Ursprung darf die Dateien laden und prüfen.
Cross-Origin-Resource-Policycross-originDie Dateien dürfen in fremden Seiten verwendet werden.
Cache-Controlsiehe Fassungsnamen und ZwischenspeicherDauer im Zwischenspeicher
X-Xicbot-Versionzehn HexadezimalzeichenFassung der ausgelieferten Datei
Content-Security-Policynur bei rahmen.htmlRichtlinie des Chatfensters, siehe oben
Varynur bei rahmen.html: X-Xicbot-Base, X-Xicbot-ApiTrennt die Fassungen verschiedener Basisadressen im Zwischenspeicher.
  • Vary ist nötig, weil die Richtlinie an den Köpfen X-Xicbot-Base und X-Xicbot-Api hängt. Ohne ihn könnte ein Zwischenspeicher das Gerüst mit der Richtlinie eines Kunden an den nächsten ausliefern.
  • X-Frame-Options fehlt mit Absicht. Ein solcher Kopf würde das Einbetten in Ihre Seite verhindern.
  • Unter cdn.xicbot.de kommen Strict-Transport-Security: max-age=31536000; includeSubDomains und X-Robots-Tag: noindex, nofollow hinzu, siehe Die beiden Einbauwege. Das noindex im Gerüst rahmen.html gilt auf beiden Wegen, auch über Ihren eigenen Pfad.
  • version.json trägt nur Content-Type, X-Content-Type-Options, Access-Control-Allow-Origin und Cache-Control.

Adressen in den Köpfen

Beim eigenen Pfad setzt Ihr Server die Köpfe X-Xicbot-Base und X-Xicbot-Api, siehe Was Ihr Server weiterreicht. Unter cdn.xicbot.de setzt XICBOT sie selbst und ersetzt dabei jeden gleichnamigen Kopf, den ein Besucher mitschickt. Aus diesen Adressen entstehen die Richtlinie des Chatfensters und die Felder origin und api in version.json.

  • Erlaubt ist http:// oder https://, ein Rechnername aus Kleinbuchstaben, Ziffern, Punkt und Bindestrich, optional ein Port und ein Pfad aus Buchstaben, Ziffern und den Zeichen ., _, ~ und -.
  • Höchstens 200 Zeichen. Leerraum am Rand wird entfernt, ebenso ein Schrägstrich am Ende.
  • Die Prüfung ist streng, weil die Adresse in die Richtlinie wandert: Ein Semikolon oder Leerzeichen darin ergäbe eine zusätzliche Anweisung.
  • Ein gesetzter, aber unbrauchbarer Kopf ergibt Status 400 mit dem Text kopf ungueltig, statt still auf die Standardadresse zurückzufallen.
  • Fehlt X-Xicbot-Api, gilt X-Xicbot-Base auch für die Schnittstelle.

Abschottung von Ihrer Seite

Im Abschnitt Chatfenster auf Ihrer Website steht in der App: Das Chatfenster läuft in einem eigenen Rahmen. Es kann die Seite, auf der es liegt, weder lesen noch verändern. Umgesetzt ist das so:

  • Der Rahmen trägt sandbox="allow-scripts allow-popups allow-popups-to-escape-sandbox" ohne allow-same-origin, dazu referrerpolicy="no-referrer", loading="eager" und den Titel Chat.
  • Ohne allow-same-origin hat das Chatfenster einen undurchsichtigen Ursprung. Ihre Seite kann seinen Inhalt nicht lesen und das Chatfenster Ihren nicht. Den Verlauf schützt das allein nicht: Wer die Gesprächskennung aus dem Speicher Ihrer Seite kennt, kann ihn über die Schnittstelle abrufen.
  • Der Lader übergibt seine Angaben im Fragment der Rahmenadresse hinter #: Schlüssel, Adresse der Schnittstelle, Ursprung Ihrer Seite, Position, Sprache, Darstellung, die Kennung eines laufenden Gesprächs sowie Schriftart, Kantenrundung und Markenfarbe Ihrer Seite. Ein Fragment geht an keinen Server und steht deshalb in keinem Zugriffsprotokoll.
  • Der Lader selbst stellt keine Anfrage ans Netz. Alles, was Daten holt, läuft im Chatfenster.
  • Das Chatfenster fragt die Schnittstelle ohne Cookies und ohne Anmeldung ab (credentials: omit) und nennt dabei keine Herkunftsseite.
  • Freigabeköpfe für herkunftsfremde Anfragen sendet die Schnittstelle nur unter /api/v1/public/: für den Ursprung null, den ein solcher Rahmen sendet, für die eigenen Ursprünge von App und Auslieferung sowie für Ursprünge, die XICBOT ausdrücklich zulässt. Erlaubt sind GET, POST, DELETE und OPTIONS mit den Köpfen Content-Type und Accept. Lesbar ist der Kopf Retry-After, eine Vorabfrage gilt 600 Sekunden, Anfragen mit Zugangsdaten gibt sie nicht frei.
  • Nachrichten zwischen Lader und Chatfenster prüfen beide Seiten auf Absender und Ursprung, siehe Prüfungen auf beiden Seiten.
  • Der Rahmen wird erst gebaut, wenn Ihre Seite fertig geladen ist. Ist das Einwilligungstor gesetzt, wartet er auf die Zustimmung, siehe Einwilligung und Besucherrechte.
  • Ohne data-xicbot baut der Lader nichts. Ein zweiter Lader auf derselben Seite bleibt ohne Wirkung.

Schlüsselprüfung der Schnittstelle

Jede Anfrage unter /api/v1/public/widget/{key}/ prüft zuerst den öffentlichen Schlüssel des Assistenten. Am Assistenten entscheiden zwei getrennte Schalter: Er muss auf aktiv stehen, und Chatfenster freigeben muss eingeschaltet sein. Ein unbekannter, ein abgeschalteter, ein pausierter und ein noch im Entwurf stehender Assistent antworten gleich, damit sich durch Raten nicht erkennen lässt, ob ein Schlüssel stimmt.

LageAntwortFolge im Chatfenster
Schlüssel unbekannt404 unknown_widgetDieser Chat ist nicht verfügbar., der Auslöser verschwindet
Chatfenster freigeben ist ausgeschaltet404 unknown_widgetwie oben
Der Assistent steht auf Entwurf oder pausiert statt auf aktiv404 unknown_widgetwie oben
Ihr Konto ist nicht aktiv404 unknown_widgetwie oben
Der Demozugang ist abgelaufen404 demo_expiredwie oben
Der Assistent hat noch keine aktive FassungEinstellungen mit ready: false, beim Gesprächsbeginn 422 no_versionDieser Assistent ist noch nicht bereit.
Gesprächsbeginn von einer Seite außerhalb von Erlaubte Domains403 host_not_allowedDieser Chat ist für diese Website nicht freigegeben.

Nur unknown_widget und demo_expired lassen das Chatfenster verschwinden: Es meldet dem Lader, dass der Assistent nicht mehr da ist, und der Lader entfernt Auslöser, Sprechblase und Rahmen von Ihrer Seite. Ein 404 ohne einen dieser Codes stammt in der Regel von einer falschen Adresse, etwa data-api mit dem falschen Rechner, und gilt als Störung.

Beim Gesprächsbeginn nennt das Chatfenster den Ursprung Ihrer Seite, wie ihn der Lader übergeben hat. Verglichen wird der Rechnername in Kleinbuchstaben, gekürzt auf 120 Zeichen. Ein Eintrag in Erlaubte Domains schließt seine Unterdomains ein; ist die Liste leer, kann auf jeder Website ein Gespräch beginnen. Mehr dazu unter Erlaubte Domains.

Grenzen je Besucher

Als ein Besucher gilt eine Herkunftsadresse zusammen mit dem Widgetschlüssel. IPv4-Adressen zählen einzeln, IPv6-Adressen je /64-Netz, weil ein Anschluss dort ein ganzes Netz erhält. Eine IPv4-Adresse in IPv6-Schreibweise zählt als IPv4-Adresse. Der Schlüssel allein ließe einen einzelnen Besucher die Grenze für alle aufbrauchen. Besucher hinter einem gemeinsamen Ausgang, etwa im Netz einer Firma, im Mobilfunk oder im selben /64-Netz, gelten dagegen als ein Besucher und teilen sich die Grenzen dieses Widgets.

GrenzeWertGilt für
Aufrufe (widget)60 je MinuteEinstellungen laden, Gespräch beginnen, Verlauf laden, Antwort bewerten, Widerruf, Auskunft, Gespräch löschen, Werkzeugvorschlag ablehnen, Rückmeldung zu einem Formular, Anhänge ansehen. Alle teilen sich einen Zähler.
Senden (widget-send)12 je MinuteNachricht senden, Werkzeugvorschlag bestätigen, Anhang hochladen
Aufrufe nach Ihrem KontoMinutenwert Ihres Pakets, dazu 2000 je Tag als Startwertalle Aufrufe außer Nachricht senden und Anhängen, auch Werkzeugvorschlag bestätigen und das bloße Laden der Einstellungen
Fragen nach Ihrem Konto10 je Minute und 200 je Tag als StartwerteNachricht senden
  • Die ersten beiden Grenzen gelten für alle Konten gleich. Die beiden anderen nehmen ihre Werte aus Ihrem Konto, gezählt wird aber ebenfalls je Besucher und Schlüssel: Ein Besucher, der viel schreibt, bremst niemanden an einer anderen Adresse oder, bei IPv6, in einem anderen /64-Netz.
  • Jede Grenze nach Ihrem Konto hat einen Minutenwert gegen den Ansturm und einen Tageswert gegen Dauerlast.
  • Gehört ein Aufruf zu einem Gespräch, zählt neben der Adresse auch das Gespräch, mit denselben Werten. Jeder der beiden Zähler kann abweisen, erhöht werden sie nur, wenn keiner abgewiesen hat. Der Zähler des Gesprächs hebt die gemeinsame Grenze einer Adresse nicht auf.
  • Den Minutenwert für Aufrufe legt Ihr Paket fest, siehe Pakete und Kontingente. Die Werte für Fragen stellt XICBOT für Ihr Konto ein.
  • Ein Wert unter 1 schaltet eine Grenze nach Ihrem Konto ab.
  • Anhänge zählen nur gegen die ersten beiden Grenzen.

Antwort bei Überschreitung

Eine Grenze nach Ihrem Konto antwortet mit Status 429, dem Kopf Retry-After und diesem Rumpf. wait nennt die Wartezeit in Sekunden, dieselbe Zahl wie Retry-After; die beiden Grenzwerte sind die Ihres Kontos.

antwort.json json

{
  "error": "too_many_requests",
  "limit_per_min": 10,
  "limit_per_day": 200,
  "wait": 42
}

Die Grenzen widget und widget-send antworten ebenfalls mit 429 und Retry-After, aber ohne wait im Rumpf. Allgemeine Grenzen der Schnittstelle stehen unter API-Grenzen, die Endpunkte selbst unter API: Widget.

Verhalten des Chatfensters bei Störungen

Nach einem 429 wartet das Chatfenster so lange, wie wait im Rumpf nennt. Fehlt wait, liest es Retry-After, sonst gilt ein Ersatzwert. Die Wartezeit liegt zwischen einer Sekunde und einer Stunde; ab 90 Sekunden zeigt das Fenster sie in Minuten an. Die Wortlaute aller Meldungen stehen unter Meldungen.

SchrittLageVerhalten
Einstellungen laden429Wartet wait oder Retry-After, sonst 30 Sekunden, und versucht es erneut. Zählt zu den höchstens sechs Abrufen.
Einstellungen ladenNetz gestört oder Status ab 500Neue Versuche nach 15, 30 und 60 Sekunden, dann nach 2 und 4 Minuten. Nach dem sechsten Abruf bleibt Der Chat ist gerade nicht erreichbar. stehen.
Einstellungen ladenanderer FehlerSofort Der Chat ist gerade nicht erreichbar., ohne neuen Versuch
Gespräch beginnen429Wartet wait oder Retry-After, sonst 20 Sekunden. Keine Höchstzahl an Versuchen.
Gespräch beginnenNetz gestört oder Status ab 500Bis zu drei weitere Versuche nach 15, 30 und 60 Sekunden, danach Der Chat ist gerade nicht erreichbar.
Gespräch beginnen403Dieser Chat ist für diese Website nicht freigegeben.
Gespräch beginnenanderer Status, etwa 422Der Chat konnte nicht gestartet werden.
Verlauf laden404 oder 410 ohne Code der SchlüsselprüfungEin unbekanntes oder abgelaufenes Gespräch ist kein Fehler: Das Fenster beginnt neu und zeigt die Begrüßung, sofern eine hinterlegt ist.
Verlauf laden429 oder andere StörungBis zu fünf neue Versuche, nach wait (Ersatzwert 20 Sekunden) oder nach 30 Sekunden. Danach Das Gespräch konnte nicht geladen werden.
Nachricht senden429Die eigene Sprechblase verschwindet, der Text steht wieder im Eingabefeld, sofern es leer ist. Senden bleibt bis zum Ende der Wartezeit gesperrt, Ersatzwert 30 Sekunden. Die Meldung Zu viele Nachrichten in kurzer Zeit. Ihre Nachricht ist nicht angekommen und steht wieder im Eingabefeld – bitte in … erneut senden. nennt die Restzeit.
Einstellungen, Beginn oder Verlauf404 unknown_widget oder demo_expiredChatfenster und Auslöser verschwinden, siehe Schlüsselprüfung der Schnittstelle.

Prüfung der Auslieferung in der App

Bei jedem Abruf des Einbaucodes prüft XICBOT neu, ob die ausgelieferte Datei einbetten.js lesbar ist, statt sich auf einen gespeicherten Wert zu verlassen. Ist sie es nicht, erscheint unter Einbaucode über unsere Adresse die Meldung Die ausgelieferte Widgetdatei ließ sich nicht lesen. Der Einbaucode steht, aber die Auslieferung selbst sollte geprüft werden. Der Einbaucode bleibt kopierbar. Geben Sie uns in diesem Fall unter mail@xicbot.de Bescheid.

Über die Schnittstelle liefert GET /api/v1/assistants/{id}/embed dazu das Feld reason: file_missing, wenn die Datei fehlt oder nicht zum Lesen zugänglich ist, file_unreadable, wenn das Einlesen trotzdem scheitert, sonst null.

Weiterlesen

Häufige Fragen

Muss ich den Einbaucode nach einer neuen Widgetfassung austauschen?

Nein. Der Einbaucode verweist auf den Einstiegsnamen einbetten.js, den Browser bis zu fünf Minuten zwischenspeichern. Das Gerüst rahmen.html wird bei jedem Öffnen neu geholt und verweist auf die aktuellen Fassungsnamen.

Kann das Chatfenster Inhalte meiner Seite lesen?

Nein. Der Rahmen läuft in einer Sandbox ohne allow-same-origin und hat damit einen undurchsichtigen Ursprung. Er kann Ihre Seite weder lesen noch verändern, und Ihre Seite kann seinen Inhalt nicht lesen. Beide tauschen nur Nachrichten aus, die auf Absender und Ursprung geprüft werden. Eine davon trägt die Gesprächskennung, die der Lader im Speicher Ihrer Seite ablegt; wer sie kennt, kann den Verlauf über die Schnittstelle abrufen.

Warum ist der Chat-Auslöser von meiner Seite verschwunden?

Die Schnittstelle hat den Schlüssel mit unknown_widget oder demo_expired abgewiesen. Prüfen Sie in der App, ob Chatfenster freigeben eingeschaltet ist, der Assistent auf aktiv steht und Ihr Konto aktiv ist. Ein abgelaufener Demozugang hat dieselbe Folge.

Was bedeutet die Meldung, dass gerade zu viele Anfragen ankommen?

Eine Grenze je Besucher ist erreicht. Das Chatfenster nennt die Wartezeit und versucht es danach selbst erneut. Gezählt wird je Herkunftsadresse, bei IPv6 je /64-Netz, und Widgetschlüssel. Besucher mit einer anderen Adresse sind davon nicht betroffen, Besucher hinter demselben Ausgang, etwa im Netz einer Firma, dagegen schon.

Warum antwortet die Auslieferung beim eigenen Pfad mit Status 400?

Ihr Server hat X-Xicbot-Base oder X-Xicbot-Api mit einer Adresse gesetzt, die nicht dem erlaubten Muster entspricht, etwa mit Abfrage, Leerzeichen oder mehr als 200 Zeichen. Die Auslieferung antwortet dann mit kopf ungueltig, statt still auf die Standardadresse auszuweichen.

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.