JavaScript-Schnittstelle und Browserspeicher
window.xicbot mit einwilligen, widerrufen und stand, die Nachrichten zwischen Ihrer Seite und dem Chatfenster und die Einträge im Browserspeicher samt Frist.
In einfacher Sprache
Der Einbaucode legt auf Ihrer Seite eine kleine Schnittstelle an. Damit verbinden Sie Ihr eigenes Banner für die Einwilligung mit dem Chatfenster. Die Schnittstelle hat drei Befehle. Diese Seite erklärt, was jeder Befehl tut. Sie zeigt auch, welche Nachrichten Ihre Seite und das Chatfenster austauschen. Sie nennt jeden Eintrag, den der Einbaucode im Speicher Ihres Browsers ablegt. Zu jedem Eintrag steht, wie lange er bleibt.
Alle Themen der Dokumentation
Der Einbaucode legt auf Ihrer Seite das Objekt window.xicbot an. Mit seinen drei Methoden verbinden Sie ein eigenes Einwilligungsbanner mit dem Chatfenster. Diese Seite beschreibt die Methoden, die Nachrichten, die Lader und Chatfenster untereinander austauschen, und jeden Eintrag, den der Lader im Speicher Ihrer Seite ablegt.
Die Schnittstelle window.xicbot
Der Lader richtet window.xicbot ein, sobald er läuft. Mit dem Attribut defer aus dem Einbaucode ist das der Fall, wenn der Browser die Seite eingelesen hat. Fehlt data-xicbot oder ergibt die Basisadresse keine http- oder https-Adresse, entsteht kein Objekt. Steht der Einbaucode zweimal auf der Seite, bleibt der zweite ohne Wirkung. Seinen Griff erkennt der Lader an einer eigenen Kennzeichnung, nicht an den Methoden: Jedes Objekt, das Ihre Seite vorher unter diesem Namen angelegt hat, ersetzt er, auch einen Platzhalter mit einer Methode einwilligen. Hat Ihre Seite den Namen schreibgeschützt angelegt, bleibt ihr Objekt stehen, und das Chatfenster läuft ohne die Methoden des Laders.
| Methode | Wirkung |
|---|---|
einwilligen() | Legt xicbot.einwilligung.<Schlüssel> mit dem Wert ja für 180 Tage ab, lädt das Chatfenster im Hintergrund und liefert true. Ohne nutzbaren Speicher gilt die Zustimmung für diesen Seitenaufruf. |
widerrufen() | Nimmt die Zustimmung zurück und schließt ein offenes Chatfenster. Ein geladenes Chatfenster widerruft die Einwilligung des Gesprächs beim Dienst; danach entfernt der Lader die gespeicherte Gesprächskennung und nimmt das Chatfenster aus der Seite. Liefert ein Promise mit true, wenn der Dienst den Widerruf innerhalb der Frist bestätigt hat, sonst mit false. |
stand() | Liefert ein Objekt mit vier Feldern zum aktuellen Zustand. Abgelaufene Einträge entfernt es dabei. |
einwilligen()
- Schreibt
xicbot.einwilligung.<Schlüssel>mit dem Wertja. Jeder Aufruf beginnt die Frist von 180 Tagen neu. - Lädt das Chatfenster sofort im Hintergrund, auch wenn die Seite selbst noch lädt. Wartet gerade ein
widerrufen()auf seine Antwort, lädt der Lader das neue Chatfenster direkt nach dem Abbau des alten. Geöffnet wird es über den Auslöser. - Liefert
true; die Zustimmung gilt ab dem Aufruf. Lässt der Browser das Ablegen nicht zu, gilt sie nur für diesen Seitenaufruf:stand().einwilligungist danntrue, auf der nächsten Seite aberfalse, bis Ihr Banner erneuteinwilligen()aufruft. - Trägt der Einbaucode
data-einwilligung="erforderlich"(gesetzt durch Einwilligung vor dem ersten Gespräch), lädt der Lader das Fenster erst nach diesem Aufruf von sich aus. Ein Klick auf den Auslöser lädt es auch vorher. - Die Zustimmung auf Ihrer Seite ersetzt die Einwilligung im Chatfenster nicht. Verlangt der Assistent sie, fragt das Fenster vor dem ersten Gespräch selbst danach.
widerrufen()
widerrufen() ist für den Moment gedacht, in dem ein Besucher seine Zustimmung in Ihrem Banner zurücknimmt.
- Entfernt sofort die Zustimmung, also
xicbot.einwilligung.<Schlüssel>und eine Zustimmung, die nur für diesen Seitenaufruf galt. - Nimmt eine Sprechblase der proaktiven Ansprache sofort von der Seite. Bis zum nächsten Seitenaufruf erscheint keine neue.
- Verwirft eine Formularübergabe von der vorigen Seite, die noch nicht eingetragen ist, und entfernt
xicbot.formular.<Schlüssel>. - Schließt das Chatfenster, falls es geöffnet ist.
- Ist das Chatfenster geladen, bittet der Lader es, die Einwilligung des Gesprächs beim Dienst zu widerrufen. Das Fenster nimmt denselben Weg wie sein Knopf Einwilligung widerrufen. Lädt das Fenster noch, fragt der Lader es nur, wenn eine Gesprächskennung gespeichert ist, und zwar sobald es bereit ist. Ohne Chatfenster geht keine Anfrage an den Dienst.
- Wartet höchstens fünf Sekunden auf die Antwort des Fensters. In dieser Zeit öffnet ein Klick auf den Auslöser nichts.
- Entfernt danach
xicbot.gespraech.<Schlüssel>undxicbot.besuch.<Schlüssel>und nimmt das Chatfenster aus der Seite, auch wenn keine Antwort kam. - Liefert ein Promise. Es löst mit
trueauf, wenn der Dienst den Widerruf bestätigt hat.falseheißt, dass keine Bestätigung vorliegt, etwa weil kein Gespräch besteht, im Chatfenster keine Einwilligung erteilt wurde oder innerhalb der Frist keine Antwort kam. Ein zweiter Aufruf, während der erste noch wartet, liefert dasselbe Promise.
Nach dem Widerruf bleibt der Auslöser auf der Seite. Ein Klick darauf baut ein neues Chatfenster, das kein früheres Gespräch fortsetzt; verlangt der Assistent eine Einwilligung, fragt es erneut danach. Wie Besucher im Chatfenster selbst einwilligen, beschreibt Einwilligung und Besucherrechte.
stand()
| Feld | Typ | Bedeutung |
|---|---|---|
tor | boolean | true, wenn der Einbaucode data-einwilligung="erforderlich" trägt. |
einwilligung | boolean | true, wenn xicbot.einwilligung.<Schlüssel> den Wert ja hat und nicht abgelaufen ist, oder wenn Ihre Seite in diesem Seitenaufruf einwilligen() aufgerufen hat und seither nicht widerrufen(). |
gespraech | boolean | true, wenn eine nicht abgelaufene Gesprächskennung gespeichert ist. |
offen | boolean | true, solange das Chatfenster geöffnet ist. |
Der Lader meldet Änderungen dieses Zustands nicht von sich aus. Braucht Ihr Banner ihn, etwa um den richtigen Knopf zu zeigen, rufen Sie stand() in dem Moment auf, in dem Sie ihn brauchen.
Beispiel: eigenes Einwilligungsbanner
Das Beispiel verbindet zwei Funktionen eines eigenen Banners mit dem Chatfenster. Die Werte im Einbaucode sind gekürzt; übernehmen Sie Ihren Einbaucode aus der App. Ein Skript, das vor dem Lader läuft, findet window.xicbot noch nicht. Rufen Sie die Methoden deshalb aus den Ereignissen Ihres Banners auf oder frühestens nach DOMContentLoaded.
index.html html
<script src="https://cdn.xicbot.de/einbetten.js" data-xicbot="…" data-api="…" data-einwilligung="erforderlich" defer></script>
<script>
// Besucher stimmt im Banner zu
function allowChat() {
if (window.xicbot) window.xicbot.einwilligen();
}
// Besucher nimmt die Zustimmung zurück
function withdrawChat() {
if (window.xicbot) window.xicbot.widerrufen();
}
</script>Nachrichten zwischen Seite und Chatfenster
Das Chatfenster läuft in einem iframe mit sandbox="allow-scripts allow-popups allow-popups-to-escape-sandbox" ohne allow-same-origin und mit referrerpolicy="no-referrer". Es hat damit einen undurchsichtigen Ursprung: es greift nicht auf Ihre Seite zu, Ihre Seite nicht auf das Fenster, und einen eigenen Speicher kann es nicht nutzen. Beim Aufbau gibt der Lader ihm im Fragment der Adresse rahmen.html#… mit, was es zum Start braucht: Schlüssel, Adresse der Schnittstelle, Ursprung Ihrer Seite, Platz, Sprache, Form und Breitenklasse der Schale, die gespeicherte Gesprächskennung und die Gestaltungsvorgaben der Seite. Das Fragment schickt der Browser an keinen Server. Alles Weitere läuft über postMessage; jede Nachricht ist ein Objekt mit xb: 1 und dem Feld art.
Vom Chatfenster an den Lader
| Art | Felder | Anlass und Wirkung |
|---|---|---|
bereit | titel, farbe, platz, senkrecht, abstand_x, abstand_y, breite, hoehe, skalierung, rundung, avatar, sprache, dazu ansprache_regeln und formulare | Einmal, sobald die Einstellungen geladen sind, auch wenn der Assistent noch nicht bereit ist. Der Lader übernimmt Sprache, Name, Farbe, Bild am Auslöser, Platz und Maße und meldet die Schale. Mit ansprache_regeln erhält er die Regeln aus Proaktive Ansprache und wertet höchstens fünf davon aus; ist der Assistent noch nicht bereit, ist diese Liste leer, und der Lader zeigt keine Sprechblase. Aus formulare übernimmt er bis zu zehn freigegebene Formulare mit je bis zu 20 Feldern. |
aendern | dieselben Gestaltungsfelder, ohne Regeln und Formulare | Beim Öffnen des Fensters und wenn der Tab wieder sichtbar wird, jeweils frühestens 60 Sekunden nach dem letzten Abruf der Einstellungen und nur, wenn sich die Gestaltung geändert hat. Der Lader übernimmt sie, ohne dass die Seite neu geladen wird. |
schliessen | keine | Escape im Chatfenster, der Knopf zum Schließen oder die Ablehnung der Einwilligung im Fenster. Der Lader schließt das Fenster und setzt den Fokus auf den Auslöser. |
gespraech | id | Nach dem Start eines Gesprächs mit dessen Kennung; der Lader speichert sie für 30 Tage. Mit leerer Kennung nach Gespräch löschen im Fenster oder wenn der Dienst das gespeicherte Gespräch nicht mehr findet; der Lader entfernt dann den Eintrag. |
fokus-raus | rueckwaerts | Tab oder Umschalt+Tab verlässt das letzte oder erste Element des Fensters. Der Lader setzt den Fokus auf den Auslöser; füllt die Schale den Bildschirm, schickt er stattdessen fokus-erste oder fokus-letzte zurück. |
formular-fuellen | aufruf, werkzeug, selektor, seite, felder, absenden, bestaetigt | Einmal, nachdem der Besucher einen Formularvorschlag bestätigt hat. Der Lader trägt nur ein, wenn bestaetigt gesetzt ist und Werkzeug und Selektor zu einem freigegebenen Formular passen, siehe Formulare vorausfüllen. |
widerrufen-quittung | ok | Antwort auf widerrufen. ok ist true, wenn der Dienst die Einwilligung des Gesprächs widerrufen hat; ohne Gespräch oder nach einem Fehler false. Der Lader gibt das Ergebnis an widerrufen() weiter, entfernt die gespeicherte Gesprächskennung und den Besuchsmerker und nimmt das Fenster aus der Seite. |
weg | keine | Der Dienst meldet den Assistenten als unbekannt (unknown_widget) oder den Demozugang als abgelaufen (demo_expired), beim Laden der Einstellungen, beim Start eines Gesprächs oder beim Laden des Verlaufs. Der Lader entfernt Auslöser, Sprechblase und Fenster; die gespeicherte Gesprächskennung bleibt liegen. |
Die Maße aus bereit und aendern prüft der Lader selbst noch einmal, bevor er sie übernimmt. Ein Wert außerhalb seiner Grenze bleibt unbeachtet, die übrigen Werte gelten trotzdem: abstand_x und abstand_y 0 bis 400 Pixel, breite 280 bis 720 Pixel, hoehe 320 bis 1200 Pixel, skalierung 80 bis 150 Prozent, rundung 0 bis 40 Pixel. Bis eine gültige Meldung eintrifft, gelten 20 Pixel Abstand, 384 Pixel Breite, 620 Pixel Höhe, 100 Prozent und 18 Pixel Rundung. Was die Maße auf der Seite bewirken, beschreibt Darstellung und Bedienung.
Vom Lader an das Chatfenster
| Art | Felder | Anlass und Wirkung |
|---|---|---|
oeffnen | keine | Beim Öffnen über den Auslöser. Das Fenster beginnt ein Gespräch, wenn noch keines besteht und eine verlangte Einwilligung im Fenster vorliegt, sieht nach geänderten Einstellungen, prüft bei einem laufenden Gespräch, ob ein Mitarbeiter es übernommen hat, und setzt den Fokus in das Eingabefeld. |
schliessen | keine | Beim Schließen des Fensters. Das Chatfenster vermerkt, dass es geschlossen ist, und sieht bis zum nächsten Öffnen nicht mehr von sich aus nach, ob ein Mitarbeiter das Gespräch übernommen hat. |
schale | voll, breite | Sobald das Fenster bereit ist, beim Öffnen, wenn sich Lage oder Maße der Schale ändern und wenn die Fensterbreite die Grenze von 560 Pixeln über- oder unterschreitet. voll ist true bis 560 Pixel Fensterbreite. breite ist handy unter 640, tablet unter 1024, desktop unter 1536 Pixeln, darüber breit. |
fokus-erste | keine | Tab auf dem Auslöser bei offenem Fenster oder fokus-raus bei bildschirmfüllender Schale. Das Fenster setzt den Fokus auf sein erstes bedienbares Element, in der Regel das Schild-Symbol Datenschutz im Kopf. |
fokus-letzte | keine | Umschalt+Tab auf dem Auslöser bei offenem Fenster oder fokus-raus rückwärts bei bildschirmfüllender Schale. Das Fenster setzt den Fokus auf sein letztes bedienbares Element, in der Regel den Sendeknopf; ist dieser gesperrt, auf das letzte bedienbare Element davor. |
formular-bericht | aufruf, gefuellt, fehlend, gesperrt, abgesendet, gefunden | Ergebnis einer Füllanweisung, nur wenn sie eine Aufrufkennung trägt. Das Chatfenster gibt es an den Dienst weiter; der Besucher sieht es an der Karte des Vorschlags. |
widerrufen | keine | Nach window.xicbot.widerrufen(), bei einem noch ladenden Fenster, sobald es bereit meldet; aus dieser Meldung übernimmt der Lader dann nichts mehr. Das Fenster widerruft die Einwilligung auf demselben Weg wie sein Knopf Einwilligung widerrufen und antwortet mit widerrufen-quittung. |
Prüfungen auf beiden Seiten
- Der Lader nimmt nur Nachrichten an, die sein eigenes Chatfenster gesendet hat (geprüft über
event.source), deren Ursprungnulloder der Ursprung der Basisadresse ist und diexb: 1tragen. - Der Lader sendet mit dem Ziel
*, weil das Chatfenster keinen benennbaren Ursprung hat. Solange kein Chatfenster besteht, sendet er nichts. - Das Chatfenster nimmt nur Nachrichten seines Elternfensters an, deren Ursprung dem mitgegebenen Ursprung Ihrer Seite entspricht.
- Das Chatfenster sendet an den Ursprung Ihrer Seite, weil seine Nachrichten die Gesprächskennung tragen.
- Eine Nachricht mit unbekannter
artbleibt auf beiden Seiten ohne Wirkung.
Einträge im Browserspeicher
Das Chatfenster kann wegen der Sandbox keinen eigenen Speicher nutzen. Was einen Seitenwechsel überdauern soll, legt deshalb der Lader im Speicher Ihrer Seite ab, also unter dem Ursprung Ihrer Website. <Schlüssel> steht für den Wert von data-xicbot im Einbaucode.
| Eintrag | Speicher | Wert | Frist | Geschrieben | Entfernt |
|---|---|---|---|---|---|
xicbot.gespraech.<Schlüssel> | localStorage | Kennung des Gesprächs | 30 Tage ab Beginn des Gesprächs | wenn im Chatfenster ein Gespräch beginnt | nach Gespräch löschen im Fenster, wenn der Dienst das Gespräch nicht mehr findet, nach widerrufen() oder beim Lesen nach Ablauf |
xicbot.einwilligung.<Schlüssel> | localStorage | ja | 180 Tage, jeder Aufruf von einwilligen() beginnt sie neu | durch window.xicbot.einwilligen() | sofort bei widerrufen() oder beim Lesen nach Ablauf |
xicbot.besuch.<Schlüssel> | localStorage | ja | 90 Tage ab dem letzten Schreiben | wenn das Chatfenster geladen ist und eine Regel Beim zweiten Besuch für die aufgerufene Seite vorbereitet wird | nach widerrufen() oder beim Lesen nach Ablauf |
xicbot.formular.<Schlüssel> | sessionStorage des Tabs | Füllanweisung mit Feldwerten | 2 Minuten | wenn ein bestätigtes Formular auf einer anderen Seite Ihrer Website liegt, direkt vor dem Seitenwechsel | beim nächsten Start des Laders in diesem Tab oder sofort bei widerrufen() |
Die Frist der Gesprächskennung beginnt mit dem Gespräch und verlängert sich bei späteren Besuchen nicht; nach 30 Tagen beginnt der Besucher ein neues Gespräch. Der Besuchsmerker enthält nur ja und keine Kennung. Die Namen der Einträge enthalten den Schlüssel aus dem Einbaucode: Nach Neuen Schlüssel erzeugen und dem Austausch des Einbaucodes liest der Lader die Einträge unter dem alten Namen nicht mehr.
Speicherformat mit Frist
Jeder Eintrag des Laders im localStorage ist ein JSON-Objekt mit dem Wert und dem Ablaufzeitpunkt in Millisekunden seit dem 1. Januar 1970:
localStorage json
{"wert":"ja","bis":1805000000000}bisist der Zeitpunkt des Schreibens plus Frist.- Beim Lesen gilt ein Eintrag mit verstrichenem
bisals nicht vorhanden, und der Lader entfernt ihn. Bis zum nächsten Lesen bleibt ein abgelaufener Eintrag im Speicher stehen. - Ein Eintrag ohne dieses Format, etwa ein reiner Text aus einer älteren Fassung des Laders, gilt unverändert als Wert und erhält beim nächsten Schreiben eine Frist. Fehlt nur
bis, läuft der Eintrag nicht ab. - Schreibt der Lader einen leeren Wert, entfernt er den Eintrag.
- Fehler des Speichers, etwa ein gesperrter oder voller Speicher, fängt der Lader ab; der Eintrag fehlt dann.
Formularübergabe über einen Seitenwechsel
Liegt ein freigegebenes Formular auf einer festgelegten anderen Seite Ihrer Website, bringt der Lader die bestätigte Anweisung über einen Seitenwechsel dorthin. Die Werte stehen dabei nicht in der Adresse, sondern im sessionStorage des Tabs.
- Inhalt:
aufruf,werkzeug,selektor,seite, bis zu 20feldermit ihren Werten,absenden,bestaetigtundbis. - Geschrieben wird nur für eine andere Seite desselben Ursprungs; direkt danach ruft der Lader die Zielseite auf. Liegt die Seite auf einer anderen Domain oder Subdomain, entsteht keine Übergabe.
- Der Lader liest den Eintrag beim nächsten Start in diesem Tab einmal und entfernt ihn sofort, auch wenn er ihn danach verwirft.
- Verworfen wird er, wenn er nicht lesbar ist, wenn
bisverstrichen ist oder mehr als zwei Minuten in der Zukunft liegt. - Ausgeführt wird er erst, wenn das Chatfenster die Einstellungen gemeldet hat, und nur auf der Seite, für die er geschrieben wurde und die für das Formular festgelegt ist.
- Ohne nutzbaren
sessionStoragebleibt der Seitenwechsel aus; das Chatfenster erhält einenformular-berichtohne eingetragene Felder.
Freigabe, Feldarten und das Eintragen selbst beschreibt Formulare vorausfüllen.
Wenn der Browser den Speicher sperrt
Sperrt der Browser den Speicher Ihrer Seite, beginnt jeder Seitenaufruf von vorn. Innerhalb eines Seitenaufrufs arbeitet das Chatfenster wie gewohnt, nach einem Seitenwechsel setzt es das Gespräch aber nicht fort. Die Regel Beim zweiten Besuch löst nicht aus. einwilligen() gilt dann für den laufenden Seitenaufruf: stand().einwilligung ist true, und mit data-einwilligung="erforderlich" lädt das Fenster sofort. Auf der nächsten Seite wartet der Lader wieder auf einwilligen() oder einen Klick auf den Auslöser.
Weiterlesen
- Widget einbauen: Einbaucode und die beiden Einbauwege.
- Script-Attribute:
data-einwilligungund die übrigen Attribute des Einbaucodes. - Einwilligung und Besucherrechte: Einwilligung im Fenster, Auskunft, Widerruf und Löschen.
- Proaktive Ansprache: Regeln wie Beim zweiten Besuch.
- Darstellung und Bedienung: Schale, Fokus und Tastatur.
- Schnittstelle des Widgets: die Wege, die das Chatfenster beim Dienst aufruft.
Häufige Fragen
Wie verbinde ich mein Einwilligungsbanner mit dem Chat?
Rufen Sie bei Zustimmung window.xicbot.einwilligen() auf und beim Zurücknehmen window.xicbot.widerrufen(). Mit Einwilligung vor dem ersten Gespräch trägt der Einbaucode data-einwilligung="erforderlich"; der Lader lädt das Fenster dann von sich aus erst nach einwilligen(), ein Klick auf den Auslöser lädt es auch vorher.
Warum beginnt das Chatfenster ein neues Gespräch, statt das alte fortzusetzen?
Fortgesetzt wird nur ein Gespräch, dessen Kennung gespeichert ist und das der Dienst noch kennt. Ein neues beginnt, wenn die Kennung älter als 30 Tage ist, der Besucher Gespräch löschen gewählt hat, widerrufen() die Kennung entfernt hat oder der Dienst das Gespräch nicht mehr findet. Dasselbe gilt, wenn der Browser den Speicher sperrt, wenn die Seite unter einem anderen Ursprung liegt oder wenn der Einbaucode einen neuen Schlüssel trägt.
Wie lange bleibt ein Gespräch über Seitenwechsel erhalten?
Die Kennung liegt 30 Tage ab Beginn des Gesprächs im localStorage Ihrer Seite. In dieser Zeit setzt das Fenster das Gespräch auf jeder Seite desselben Ursprungs fort, sofern der Browser den Speicher nicht sperrt.
Welche Einträge legt das Widget im Browser ab?
Bis zu drei Einträge im localStorage, jeweils mit Frist: Gesprächskennung, Zustimmung und Besuchsmerker. Dazu kommt für höchstens zwei Minuten eine Formularübergabe im sessionStorage. Die Tabelle oben nennt Wert, Frist und Anlass jedes Eintrags.
Kann meine Seite das Chatfenster per Skript öffnen?
window.xicbot hat dafür keine Methode; es bietet nur einwilligen(), widerrufen() und stand(). Geöffnet wird das Fenster über den Auslöser.
Selbst fragen, Assistent dieser Website
Automatischer Assistent