Schnellstart
- Kopieren Sie in der Konsole unter Einstellungen → Installation Ihren Website-Schlüssel (beginnt mit
cd_). - Fügen Sie den Code oben auf dieser Seite in alle Seiten Ihrer Website ein, direkt vor dem Tag
</body>. Ersetzen SieIHR_WEBSITE_SCHLUESSELdurch Ihren Schlüssel. - Laden Sie die Seite neu; unten in der Ecke erscheint der Chat-Button. Solange Sie in der Konsole online sind, können Besucher Ihnen schreiben.
Der Code verlangsamt Ihre Seite nicht: Der Loader ist klein und wird zwischengespeichert, das Widget lädt separat und versioniert. Ist unser Server nicht erreichbar, erscheint ein einfacher Button zu der Adresse, die Sie unter Einstellungen → Allgemein → Ersatz-Kontaktlink eintragen.
WordPress
Für die Installation ohne Code laden Sie das Plugin herunter. Es fügt das Widget ein und meldet auf Wunsch angemeldete Mitglieder mit signierter Identität an.
WordPress-Plugin herunterladen
- Laden Sie die ZIP-Datei in der WordPress-Verwaltung unter Plugins → Neues Plugin hinzufügen → Plugin hochladen hoch und aktivieren Sie es.
- Fügen Sie Ihren Website-Schlüssel auf der Seite Einstellungen → Layvchat ein.
- Optional: Aktivieren Sie Mitgliedsidentität und geben Sie den Signaturschlüssel ein (in der Konsole: Einstellungen → Besucher-ID → Geheimschlüssel anzeigen).
Kompatibel mit Cache-Plugins: Die Mitgliedsidentität wird nicht ins HTML der Seite geschrieben, sondern für jeden Besucher mit einer eigenen, nicht zwischengespeicherten Anfrage geholt. Der Signaturschlüssel bleibt auf dem Server Ihrer Website.
Das Widget per Code steuern
Der Installationscode fügt der Seite das Objekt window.layvchat hinzu. Befehle sind sofort nach dem Laden nutzbar: Ist das Widget noch nicht bereit, werden Aufrufe zurückgestellt und ausgeführt, sobald es bereit ist. Jeder Befehl hat auch einen türkischen Namen (z. B. open = ac); beide funktionieren.
Befehle
| Befehl | Türkischer Name | Wirkung |
|---|---|---|
open() | ac() | Öffnet das Chatfenster. |
close() | kapat() | Schließt das Fenster. |
toggle() | degistir() | Schließt das Fenster, wenn es offen ist, und öffnet es, wenn es geschlossen ist. |
hide() / show() | gizle() / goster() | Entfernt Button und Fenster vollständig von der Seite / blendet sie wieder ein (z. B. im Bezahlvorgang). |
prefill(text) | doldur() | Öffnet das Fenster und schreibt den Text ins Eingabefeld; der Besucher drückt auf Senden. |
setVisitor({ ad, eposta, telefon }) | ziyaretci() | Stellt den Besucher vor: Formularfelder werden vorausgefüllt, Name und E-Mail erscheinen im Chat. Schlüssel: ad = Name, eposta = E-Mail, telefon = Telefon. |
setAttributes({ schluessel: wert }) | ozellik() | Eigene Angaben für Ihre Agenten (Warenkorbwert, Mitgliedsstufe …). Bis zu 20 Felder; der Wert null löscht ein Feld. Auch während eines offenen Chats aktualisierbar. |
pageView() | sayfa() | Meldet einen Seitenwechsel. In Single-Page-Apps (React, Vue …) werden URL-Wechsel automatisch erkannt; für eigenes Routing verwenden. |
getState() | durum() | Gibt { acik, sohbet, okunmamis, ajan } zurück: Fenster offen, Chat läuft, Anzahl ungelesen, Name des Agenten. |
on(ereignis, fn) / off(ereignis, fn) | gleich | Hört auf ein Ereignis / beendet das Zuhören. |
// Button „Zu diesem Produkt fragen“
document.querySelector('#produkt-frage').addEventListener('click', function () {
window.layvchat.prefill('Hallo, ich hätte gern mehr Infos zum „Lederrucksack“.')
})
// Angemeldetes Mitglied und Warenkorb für den Agenten anzeigen
window.layvchat.setVisitor({ ad: 'Anna Schmidt', eposta: '[email protected]' })
window.layvchat.setAttributes({ 'Warenkorb': '129,90 €', 'Mitgliedschaft': 'Gold' })
Daten aus setVisitor und setAttributes kommen aus dem Browser und sind nicht signiert; die Konsole zeigt sie als nicht verifiziert. Um ein Mitgliedskonto sicher zu identifizieren, nutzen Sie die Besucheridentität.
Ereignisse
| Ereignis | Türkischer Name | Wann | Daten |
|---|---|---|---|
ready | hazir | Das Widget ist eingerichtet (später hinzugefügte Listener werden sofort aufgerufen). | getState() |
open / close | acildi / kapandi | Das Fenster wurde geöffnet / geschlossen. | — |
chatStarted | sohbetBasladi | Der Besucher hat einen neuen Chat begonnen. | — |
chatEnded | sohbetBitti | Der Chat wurde beendet. | — |
message | mesaj | Agent oder Besucher hat eine Nachricht gesendet. | { kim: 'ajan' | 'ziyaretci', metin, ajan } — Absender, Text, Name des Agenten |
unread | okunmamis | Die Zahl ungelesener Nachrichten hat sich geändert. | { n } |
window.layvchat.on('chatStarted', function () {
gtag('event', 'live_chat_gestartet') // Analyse
})
window.layvchat.on('message', function (m) {
if (m.kim === 'ajan') console.log(m.ajan + ': ' + m.metin)
})
// Dieselben Ereignisse werden auch auf window ausgelöst (englische und türkische Namen)
window.addEventListener('layvchat:unread', function (e) { badge(e.detail.n) })
Läuft Ihr Code vor dem Installationscode, legen Sie Aufrufe in die Warteschlange:
(window.layvchatKuyruk = window.layvchatKuyruk || []).push(['open'], ['setAttributes', { 'Seite': 'Kasse' }])
CSS-Variablen
Position und Ebene des Buttons lassen sich mit dem CSS Ihrer Website überschreiben; das Fenster richtet sich am Button aus. Nützlich, wenn das Widget mit einem Cookie-Banner oder einer mobilen Navigationsleiste kollidiert.
| Variable | Standard | Wirkung |
|---|---|---|
--layvchat-alt | Abstand unten aus den Widget-Einstellungen | Abstand des Buttons vom unteren Seitenrand. |
--layvchat-yan | Seitlicher Abstand aus den Widget-Einstellungen | Abstand des Buttons vom rechten (bzw. linken) Rand. |
--layvchat-z | 2147483600 | Ebenenreihenfolge (z-index). |
@media (max-width: 768px) {
:root { --layvchat-alt: 84px; } /* über der mobilen Navigationsleiste bleiben */
}
Haben Sie vorher Tawk.to oder Comm100 genutzt, öffnen auch Ihre bestehenden Aufrufe Tawk_API.maximize() und Comm100API.do('livechat.button.click') das Layvchat-Fenster; Ihre Buttons müssen Sie nicht ändern.
Besucheridentität
Wenn Sie auf Ihrer Website angemeldete Besucher identifizieren, sehen Ihre Agenten verifiziert (blauer Haken), mit welchem Mitglied sie chatten. Bei verifizierten Besuchern kann das Vor-Chat-Formular entfallen, und bei aktiver Website-Integration erscheint die Kundenkarte.
Die Identität wird durch eine Signatur auf dem Server Ihrer Website nachgewiesen; so kann niemand im Browser ein anderes Mitglied vortäuschen. Den Signaturschlüssel erhalten Sie in der Konsole unter Einstellungen → Besucher-ID → Geheimschlüssel anzeigen; bewahren Sie ihn nur auf Ihrem Server auf.
Signatur
imza = HMAC-SHA256(geheimnis, id + "|" + username + "|" + zaman) → Hex in Kleinbuchstaben (64 Zeichen)
| Feld | Regel |
|---|---|
id | Die ID des Mitglieds auf Ihrer Website. 1–64 Zeichen: Buchstaben, Ziffern, _ und -. |
username | Der Benutzername, den Agenten sehen. Verwenden Sie genau den signierten Wert (bis zu 80 Zeichen werden angezeigt). |
zaman | Zeitstempel: Unix-Zeit in Sekunden (nicht Millisekunden). Eine Signatur gilt 2 Stunden; Ihre Serveruhr darf höchstens 5 Minuten vorgehen. |
imza | Signatur: HMAC-SHA256 als Hex in Kleinbuchstaben. Der Schlüssel wird unverändert als Text verwendet. |
Drei Wege, die Identität an das Widget zu übergeben
1. In die Seite schreiben. Wenn Sie Seiten auf dem Server erzeugen, fügen Sie dies vor dem Installationscode ein. Nicht mit Seiten-Cache verwenden: Die Signatur eines Mitglieds könnte anderen Besuchern ausgeliefert werden.
<script>
window.layvchatKimlik = { id: "123", username: "aschmidt", zaman: 1760000000, imza: "…" }
</script>
2. An- und Abmeldung melden. Geeignet für Single-Page-Apps (React, Vue …). Da eine Signatur 2 Stunden gilt, rufen Sie es auf lange geöffneten Seiten mit neuer Signatur erneut auf.
window.layvchat.identify({ id: "123", username: "aschmidt", zaman: 1760000000, imza: "…" })
window.layvchat.identify(null) // nach der Abmeldung
3. Identitätsendpunkt. Tragen Sie in der Konsole unter Einstellungen → Besucher-ID → Identitätsendpunkt eine relative Adresse Ihrer Website ein, die die signierte Identität zurückgibt (z. B. /layvchat/identity). Das Widget liest sie vom selben Ursprung mit Cookies und aktualisiert sie beim Laden, alle 15 Sekunden, bei Rückkehr in den Tab und bei Navigation innerhalb der Seite. Für nicht angemeldete Besucher geben Sie {"id": null} zurück; eine Antwort, die kein JSON ist oder fehlschlägt, gilt als „abgemeldet“.
<?php // /layvchat/identity
session_start();
header('Content-Type: application/json');
header('Cache-Control: no-store');
$secret = getenv('LAYVCHAT_IDENTITY_SECRET');
if (empty($_SESSION['member_id'])) { echo json_encode(['id' => null]); exit; }
$id = (string) $_SESSION['member_id'];
$name = (string) $_SESSION['member_username'];
$time = time();
echo json_encode([
'id' => $id, 'username' => $name, 'zaman' => $time,
'imza' => hash_hmac('sha256', "$id|$name|$time", $secret),
]);
// Express — /layvchat/identity
import crypto from 'node:crypto'
app.get('/layvchat/identity', (req, res) => {
res.set('Cache-Control', 'no-store')
const member = req.session?.member
if (!member) return res.json({ id: null })
const id = String(member.id), name = String(member.username), time = Math.floor(Date.now() / 1000)
const imza = crypto.createHmac('sha256', process.env.LAYVCHAT_IDENTITY_SECRET).update(`${id}|${name}|${time}`).digest('hex')
res.json({ id, username: name, zaman: time, imza })
})
# Flask — /layvchat/identity
import hmac, hashlib, os, time
from flask import jsonify, session
@app.get("/layvchat/identity")
def layvchat_identity():
if "member_id" not in session:
response = jsonify(id=None)
else:
uid, name, ts = str(session["member_id"]), str(session["member_username"]), int(time.time())
imza = hmac.new(os.environ["LAYVCHAT_IDENTITY_SECRET"].encode(), f"{uid}|{name}|{ts}".encode(), hashlib.sha256).hexdigest()
response = jsonify(id=uid, username=name, zaman=ts, imza=imza)
response.headers["Cache-Control"] = "no-store"
return response
Ist Einstellungen → Besucher-ID → Nur signierte Identitäten anzeigen aktiv, sehen Agenten Benutzernamen mit ungültiger Signatur nie. Ist die Option aus, dienen sie nur als Anzeigename und gelten nicht als verifiziert.
Content Security Policy (CSP)
Nutzt Ihre Website eine CSP, erlauben Sie die Layvchat-Adresse wie folgt:
script-src {{KOK}}
connect-src {{KOK}} {{WS}} (mit Identitätsendpunkt auch 'self')
frame-src {{KOK}}
style-src 'unsafe-inline'
img-src https: (nur mit eigenem Button-Bild)
media-src {{KOK}} (nur mit eigenem Benachrichtigungston)
Das Widget setzt auf Ihrer Website keine Cookies. Besucherschlüssel und Ersatzlink liegen in localStorage mit dem Präfix layv_cd_; Chatinhalte und Zugriffstoken bleiben ausschließlich im eigenen Ursprung des Layvchat-Fensters.
Website-Integration Pro
Während eines Chats sehen Ihre Agenten die Kontodaten des verifizierten Besuchers (letzte Bestellungen, Status …) und können die von Ihnen erlaubten Aktionen ausführen. Layvchat holt diese Daten mit signierten Anfragen von einigen Endpunkten auf Ihrem Server. Die Integration funktioniert nur bei verifizierten Besuchern.
- Implementieren Sie die folgenden Endpunkte auf Ihrem Server (z. B. unter
https://ihreseite.de/layvchat-api). - Tragen Sie diese Adresse in der Konsole unter Einstellungen → Website-Integration ein. Der Signaturschlüssel (beginnt mit
entg_) wird nur einmal angezeigt; speichern Sie ihn auf Ihrem Server. - Geben Sie Agenten unter Einstellungen → Agenten die nötigen Berechtigungen (Daten ansehen, Notizen, Sperren).
Anfragen
| Anfrage | Body | Wann |
|---|---|---|
GET /uye/:id | — | Wenn ein Agent den Chat öffnet (Kundenkarte) |
POST /uye/:id/not | { not, yapan } | Kundennotiz |
POST /uye/:id/durum | { engelli: true | false, yapan } | Konto sperren / entsperren |
POST /uye/:id/mesaj | { baslik, govde, yapan } | Antwort in das Postfach Ihrer Website (Titel, Text) |
:id ist die id aus der Besucheridentität. yapan ist der ausführende Agent (canli-destek:benutzername).
Signatur prüfen
Jede Anfrage kommt mit den Headern X-Imza-Zaman (Unix-Sekunden) und X-Imza:
X-Imza = HMAC-SHA256(geheimnis, zeit + "." + METHODE + "." + vollerPfad + "." + roherBody) → Hex in Kleinbuchstaben
vollerPfad ist der Anfragepfad einschließlich des Pfads Ihrer Adresse: Lautet die Adresse https://ihreseite.de/layvchat-api, ist es /layvchat-api/uye/42. Bei GET ist der Body ein leerer String. Lehnen Sie Zeitstempel ab, die älter als 5 Minuten sind.
<?php
function layvchat_verify(string $secret): bool {
$time = $_SERVER['HTTP_X_IMZA_ZAMAN'] ?? '';
$sig = $_SERVER['HTTP_X_IMZA'] ?? '';
if (!ctype_digit($time) || abs(time() - (int) $time) > 300) return false;
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $time . '.' . $_SERVER['REQUEST_METHOD'] . '.' . $_SERVER['REQUEST_URI'] . '.' . $body, $secret);
return hash_equals($expected, $sig);
}
// Express: benötigt den rohen Body → app.use(express.json({ verify: (req, _r, buf) => { req.rawBody = buf.toString() } }))
import crypto from 'node:crypto'
function layvchatVerify(req, secret) {
const time = req.get('x-imza-zaman') || '', sig = req.get('x-imza') || ''
if (!/^\d+$/.test(time) || Math.abs(Date.now() / 1000 - Number(time)) > 300) return false
const expected = crypto.createHmac('sha256', secret)
.update(`${time}.${req.method}.${req.originalUrl}.${req.rawBody || ''}`).digest('hex')
return expected.length === sig.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))
}
Antwort für die Kundenkarte
GET /uye/:id muss ein JSON-Objekt zurückgeben. Nur uye.id ist Pflicht; unbekannte Felder werden ignoriert. Existiert das Mitglied nicht, antworten Sie mit 404.
{
"uye": {
"id": "42", "kullaniciAdi": "aschmidt", "ad": "Anna", "soyad": "Schmidt",
"eposta": "[email protected]", "telefon": "5551112233", "ulke": "DE", "paraBirimi": "EUR",
"toplamHarcama": 5000, "toplamIade": 320,
"durum": "aktif", "kayitTarihi": "2025-03-14T10:00:00Z", "sonGiris": "2026-10-04T21:10:00Z",
"riskEtiketleri": ["neues Konto"]
},
"sonIslemler": [
{ "id": "S1001", "tur": "siparis", "tutar": 500, "durum": "versendet", "aciklama": "2 Artikel", "zaman": "2026-10-04T20:00:00Z" }
]
}
Alle Kundenfelder
| Typ | Felder |
|---|---|
| Text (bis 200 Zeichen) | kullaniciAdi (Benutzername), eposta (E-Mail), ad (Vorname), ikinciAd (zweiter Vorname), soyad (Nachname), telefon, telefonKodu (Telefon, Vorwahl), sehir (Stadt), dil (Sprache), sonGirisIp, kayitIp (IP der letzten Anmeldung / Registrierung), yoneticiNotu (Admin-Notiz) |
| Ländercode (2 Buchstaben) | ulke, kayitUlke (Land, Land bei Registrierung) |
| Währung (3 Buchstaben) | paraBirimi |
| Ja / nein | cevrimici (online), epostaDogrulandi, telefonDogrulandi (E-Mail / Telefon bestätigt) |
| Zeitpunkt (ISO 8601) | sonCevrimici, sonGiris, kayitTarihi (zuletzt online, letzte Anmeldung, registriert) |
| Datum (JJJJ-MM-TT) | dogumTarihi (Geburtsdatum) |
| Betrag (Zahl) | toplamHarcama, toplamIade (Ausgaben gesamt, Erstattungen gesamt) |
| Status | durum: aktif (aktiv), engelli (gesperrt), beklemede (ausstehend), kapali (geschlossen) |
| Liste | riskEtiketleri (Risikolabels, bis 20) |
| Letzte Vorgänge | sonIslemler[]: id (Pflicht), tur (siparis Bestellung, odeme Zahlung, iade Erstattung oder eigener Text), tutar, durum, aciklama, zaman (Betrag, Status, Beschreibung, Zeit) — die ersten 10 werden angezeigt |
Bei POST-Anfragen geben Sie bei Erfolg 2xx und ein JSON-Objekt zurück (z. B. {"ok": true}). Zum Ablehnen geben Sie {"hata": "kurzer_code"} zurück. 404 sieht der Agent als „nicht gefunden“, andere Fehlercodes als „Die Website hat einen Fehler gemeldet“.
Anfragen gehen nur über https an Port 443 und an öffentliche Internetadressen; Weiterleitungen werden nicht verfolgt. Zeitlimit 10 Sekunden, Antworten höchstens 512 KB.
Webhooks Pro
Senden Sie Chat-Ereignisse in Echtzeit an Ihre eigenen Systeme (CRM, Benachrichtigungen, Berichte). Adresse und Ereignisse wählen Sie in der Konsole unter Einstellungen → Webhooks und API; der Signaturschlüssel (beginnt mit whsec_) wird einmal angezeigt.
| Ereignis | Wann | veri (Daten) |
|---|---|---|
sohbet.basladi | Ein neuer Chat hat begonnen | { konusma } |
sohbet.bitti | Ein Chat wurde geschlossen | { konusma } |
sohbet.kacirildi | Der Besucher ging ohne Antwort | { konusma } |
sohbet.cevrimdisi | Nachricht im Offline-Modus hinterlassen | { konusma, mesaj } |
sohbet.puanlandi | Der Besucher hat bewertet | { konusmaId, puan, yorum, anket } |
sohbet.risk | Die Risikostufe ist gestiegen | { konusmaId, risk: { seviye, turler, kelimeler, zaman } } |
{
"id": "6f1c…", // Zustellungs-ID — bleibt bei Wiederholungen gleich
"olay": "sohbet.bitti", // Ereignis
"zaman": "2026-10-05T09:12:00.000Z",
"deneme": 1, // Versuch
"veri": {
"konusma": { // Unterhaltung
"id": "…", "durum": "kapandi", "kaynak": "ziyaretci",
"baslatildi": "…", "kapandi": "…", "kapanisSebep": "kapatildi",
"ziyaretci": { "no": 128, "ad": "Anna", "kullaniciAdi": "aschmidt", "uyeId": "42", "ulke": "DE" },
"ajan": "Lukas", "etiketler": ["zahlung"], "puan": 5
}
}
}
kullaniciAdi (Benutzername) und uyeId (Mitglieds-ID) sind nur bei verifizierten Besuchern gefüllt.
Header und Signatur
X-Imza-Olay | Name des Ereignisses |
X-Imza-Zaman | Unix-Sekunden |
X-Imza-Imza | sha256= + HMAC-SHA256(geheimnis, zeit + "." + roherBody), Hex in Kleinbuchstaben |
X-Imza-Teslim | Zustellungs-ID (gleich id im Body) |
<?php
$body = file_get_contents('php://input');
$time = $_SERVER['HTTP_X_IMZA_ZAMAN'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $time . '.' . $body, getenv('LAYVCHAT_WEBHOOK_SECRET'));
if (!ctype_digit($time) || abs(time() - (int) $time) > 300 || !hash_equals($expected, $_SERVER['HTTP_X_IMZA_IMZA'] ?? '')) {
http_response_code(401); exit;
}
$event = json_decode($body, true);
// überspringen, falls $event['id'] schon verarbeitet wurde; dann 2xx zurückgeben
http_response_code(204);
import crypto from 'node:crypto'
app.post('/layvchat/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const time = req.get('x-imza-zaman') || '', raw = req.body.toString()
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.LAYVCHAT_WEBHOOK_SECRET).update(`${time}.${raw}`).digest('hex')
const sig = req.get('x-imza-imza') || ''
const valid = /^\d+$/.test(time) && Math.abs(Date.now() / 1000 - Number(time)) <= 300 &&
sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))
if (!valid) return res.sendStatus(401)
const event = JSON.parse(raw)
// überspringen, falls event.id schon verarbeitet wurde
res.sendStatus(204)
})
Antworten Sie innerhalb von 8 Sekunden mit 2xx; schwere Arbeit gehört in eine Warteschlange. Eine fehlgeschlagene Zustellung wird nach 5 s, 30 s und 2 min wiederholt (höchstens 4 Versuche). Nach 20 Fehlversuchen in Folge wird der Webhook deaktiviert; in der Konsole sehen Sie die letzten 50 Zustellungen und können mit „Test“ ein Beispiel senden. Die Adresse muss https auf Port 443 und öffentlich erreichbar sein.
REST-API Pro
Holen Sie Berichte und Chats in Ihre eigenen Systeme. Einen Schlüssel erstellen Sie in der Konsole unter Einstellungen → Webhooks und API → API-Schlüssel (nur Inhaber des Arbeitsbereichs); der geheime Schlüssel wird einmal angezeigt. Bis zu 5 aktive Schlüssel; für jeden lässt sich eine IP-Freigabeliste festlegen. Schlüssel sind nur lesend.
curl -u "layv_…:layvs_…" "{{KOK}}/api/v1/canli/rapor?gun=7"
| Endpunkt | Parameter | Antwort |
|---|---|---|
GET /api/v1/canli/rapor | gun (Tage): 1, 7, 30 oder 90 (Standard 7) | Zusammenfassung, tägliche und stündliche Verteilung, Agentenleistung, Bewertungen, Tags, verpasste Chats |
GET /api/v1/canli/sohbetler | bas, bit (von / bis, JJJJ-MM-TT, einschließlich) · durum: acik | kapandi (offen | geschlossen) · adet 1–200 (50) · sayfa (Seite) | { toplam, sayfa, adet, liste: [konusma] } |
GET /api/v1/canli/sohbet/:id | — | { sohbet, mesajlar: [{ kim, ajan, metin, dosya, zaman }] } — interne Notizen und Flüstern sind ausgeschlossen |
GET /api/v1/ben | — | Name und Umfang des Schlüssels |
Das Objekt konusma ist dasselbe wie bei Webhooks. Fehlercodes: 401 Schlüssel fehlt oder ist ungültig (der Grund wird aus Sicherheitsgründen nicht genannt) · 402 Ihr Paket enthält keine API · 404 Chat nicht gefunden.
Fehlerbehebung
- Der Chat-Button erscheint nicht
- Prüfen Sie den Website-Schlüssel (beginnt mit
cd_). In der Konsole ist eventuell Einstellungen → Allgemein → Live-Chat aktiviert aus oder Einstellungen → Widget-Aussehen → Auf Mobilgeräten ausblenden an. Hat Ihre Website eine CSP, fügen Sie die Berechtigungen hinzu. Prüfen Sie in der Browserkonsole die Antwort auf die Anfrage/cd/v/ayar:404bedeutet, dass der Schlüssel nicht erkannt wurde. - Der Besucher wird nicht als verifiziert angezeigt
- Häufigste Ursachen:
zamanin Millisekunden gesendet (müssen Sekunden sein), Signatur in Großbuchstaben, falsche Serveruhr, signierter Benutzername weicht vom gesendeten ab, oderidenthält unzulässige Zeichen. Eine Signatur gilt 2 Stunden; auf lange geöffneten Seiten erneuern. - Webhooks kommen nicht an
- Sehen Sie in der Konsole unter Einstellungen → Webhooks und API den Zustellverlauf an. Die Adresse muss
httpssein, innerhalb von 8 Sekunden2xxliefern und darf nicht weiterleiten. Nach 20 Fehlern in Folge wird der Webhook deaktiviert; nach der Korrektur wieder einschalten. - Die Kundenkarte öffnet sich nicht
- Die Karte öffnet sich nur bei verifizierten Besuchern und nur, wenn der Agent Daten ansehen darf. Ihr Server muss bei der Signaturprüfung den vollen Pfad (einschließlich des Pfads Ihrer Adresse) verwenden.