SilentChat

Widget JavaScript API

Zuletzt aktualisiert: 24. August 2026

Das SilentChat-Widget exponiert nach Laden ein globales Objekt window.SilentChat.

Chat-Fenster steuern

window.SilentChat.open();
window.SilentChat.close();
window.SilentChat.toggle();
window.SilentChat.hide();
window.SilentChat.show();

Nachricht senden, Besucher-Info setzen

window.SilentChat.sendMessage('Hallo, ich interessiere mich für Produkt X');

// Name und E-Mail des Besuchers — in jedem Tarif.
window.SilentChat.setVisitorInfo({ name: 'Max', email: 'max@example.com' });

// Eigene Merkmale — ab Professional.
window.SilentChat.setCustomData({ plan: 'premium', mitarbeiter: 42 });

// Ein Merkmal wieder entfernen: ausdrücklich null übergeben.
window.SilentChat.setCustomData({ plan: null });

Was mit den Merkmalen passiert. Sie liegen am Besucher und lassen sich in Segmenten als metadata.<schlüssel> auswerten — so bauen Sie etwa ein Segment „alle Besucher im Tarif premium".

Grenzen, die wir bewusst ziehen:

  • Höchstens 10 Paare je Besucher. Schlüssel bis 40, Werte bis 200 Zeichen.
  • Erlaubt sind Text, Zahlen und Ja/Nein — keine verschachtelten Objekte.
  • Bitte keine personenbezogenen Daten in Merkmalen. Werte, die wie eine E-Mail-Adresse oder Telefonnummer aussehen, speichern wir maskiert (m***@example.com). Für Name und E-Mail gibt es setVisitorInfo — dort sind sie vorgesehen und im Auftragsverarbeitungsvertrag beschrieben.

Wenn nichts ankommt, sagt die Konsole warum. Beide Methoden schreiben eine Warnung in die Browser-Konsole, wenn der Tarif die Merkmale nicht enthält oder der Besucher dem Tracking nicht zugestimmt hat. Ein stilles Verschlucken gibt es nicht.

Eigene Ereignisse melden

Ein Merkmal sagt, was über den Besucher wahr ist. Ein Ereignis sagt, was passiert ist — mit Zeitstempel, und jedes Vorkommen einzeln:

window.SilentChat.track('warenkorb_gefuellt', { wert: 249.90, artikel: 3 });
window.SilentChat.track('demo_gebucht');

Ihre Agenten sehen die Ereignisse live in der Besucher-Detailspalte — also was jemand getan hat, nicht nur wo er war. Ebenfalls ab Professional.

Namen werden vereinheitlicht. Warenkorb gefüllt, warenkorb-gefuellt und WARENKORB_GEFUELLT landen alle als warenkorb_gefuellt. Sonst wären es drei verschiedene Ereignisse in jeder Auswertung, ohne dass es irgendwo auffällt. Kleinbuchstaben, Ziffern und Unterstrich bleiben; Umlaute werden ausgeschrieben.

Grenzen:

  • Höchstens 200 Ereignisse je Sitzung.
  • Höchstens 50 verschiedene Namen je Konto. Wer darüber hinaus einen neuen Namen sendet, bekommt ihn unter _other verbucht — die Daten gehen nicht verloren, sie werden nur nicht mehr einzeln geführt. Bitte keine Kennungen in den Namen (bestellung_4711), sondern in die Eigenschaften.
  • Für die Eigenschaften gelten dieselben Regeln wie bei den Merkmalen — einschließlich der Maskierung dessen, was nach einer E-Mail-Adresse oder Telefonnummer aussieht.
  • Ereignisse werden so lange aufbewahrt wie Seitenaufrufe und bei einer Löschung des Besuchers mit entfernt.

Was Sie mit Ereignissen anfangen können

Segmente. Im Segment-Editor stehen zwei neue Felder je Ereignis:

  • event.<name> — wie oft es eingetreten ist. Mit „ist nicht leer" heißt das „mindestens einmal", mit „ist leer" „nie". Mit größer/kleiner vergleichen Sie die Anzahl.
  • event_days.<name> — Tage seit dem letzten Mal. „kleiner als 7" ist also „in der letzten Woche".

Beispiel: event.warenkorb_gefuellt ist nicht leer UND event.bestellung_abgeschlossen ist leer — alle, die etwas liegen gelassen haben.

Auslöser. Die Bedingung „Eigenes Ereignis" reagiert, sobald track in der laufenden Sitzung gemeldet wurde — etwa um jemanden anzusprechen, der den Warenkorb gefüllt und dann nichts mehr getan hat. Nur die laufende Sitzung: Für „hat vor drei Wochen etwas gekauft" nehmen Sie ein Segment.

Consent-API (Presence-Tracking)

window.SilentChat.setConsent('presence_tracking', true);
window.SilentChat.revokeConsent('presence_tracking');
const state = window.SilentChat.getConsent('presence_tracking');
// "granted" | "declined" | "unknown"

const off = window.SilentChat.onConsentChange((type, granted) => {
  console.log('Consent geändert:', type, granted);
});
off(); // abmelden

Cookiebot-Integration

window.addEventListener('CookiebotOnAccept', () => {
  if (Cookiebot.consent.statistics) {
    window.SilentChat.setConsent('presence_tracking', true);
  }
});
window.addEventListener('CookiebotOnDecline', () => {
  window.SilentChat.revokeConsent('presence_tracking');
});

Usercentrics V2

window.addEventListener('uc-consent-changed', (event) => {
  const v = event.detail?.SilentChat?.consent;
  if (v === true) window.SilentChat.setConsent('presence_tracking', true);
  if (v === false) window.SilentChat.revokeConsent('presence_tracking');
});

Events

window.SilentChat.on('ready', () => { /* Widget geladen */ });
window.SilentChat.on('chat_opened', () => {});
window.SilentChat.on('chat_closed', () => {});
window.SilentChat.on('message_sent', (msg) => {});
window.SilentChat.on('message_received', (msg) => {});
window.SilentChat.off('chat_opened');

HTML-Attribute (Trigger-Modus)

<a href="#" data-silentchat-open>Chat öffnen</a>
<div data-silentchat-trigger data-label="Hilfe?" data-style="branded" data-color="#2563eb"></div>

Oder via URL-Hash: https://ihre-seite.de/seite#silentchat-open

Widget einbinden

<script
  src="https://cdn.silentchat.de/silentchat.min.js"
  data-widget-key="pk_XXX"
  data-api-url="https://api.silentchat.de"
  data-ws-url="wss://ws.silentchat.de"
  defer
></script>
Widget JavaScript API — Help Center | SilentChat