Kuidas saame aidata?

Kirjeldage lühidalt, millega on tegu - võtame teiega ühendust e-postiga.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Avalehele

Besucher identifizieren und Kontext übergeben

Wie du angemeldete Nutzer mit ReactiveChat('identify') meldest, den userHash per HMAC-SHA256 auf deinem Server signierst, das Geheimnis rotierst und dem Assistenten strukturierten Seitenkontext wie Produkt oder Warenkorb mitgibst.

Weiß deine Website, wer gerade da ist, sag es dem Chat. Dann sieht dein Team im Pult einen Namen statt „Besucher 4f2a“, und Funktionen wie Kundendaten und das Kundenportal werden überhaupt erst möglich.

Der Grundsatz dabei: Der Browser beweist nichts. Was eine Seite über identify behauptet, kann jeder Besucher in der Konsole fälschen. Als bestätigt gilt ein Nutzer nur mit einer Signatur, die dein Server mit einem Geheimnis berechnet hat, das den Browser nie erreicht.

Der Aufruf im Browser

ReactiveChat('identify', {
  userId:   '4711',
  email:    'kim@example.com',
  name:     'Kim Berger',
  userHash: '9c1f…',
  exp:      1792503600
});

Andere Felder werden verworfen. identify darf vor dem Laden des Widgets stehen; es landet in der Warteschlange und löst kein vorzeitiges Laden aus. Die Werte reisen beim Verbindungsaufbau mit und, wenn das Widget schon verbunden ist, sofort.

Das Geheimnis

Im Konto unter Projekt → Identitätsprüfung erzeugst du das Geheimnis des Projekts (Recht: Projekt bearbeiten). Es besteht aus 64 Hex-Zeichen und wird genau einmal vollständig angezeigt, danach nur noch als Maske. Lege es in die Umgebung deines Servers – nie in ein Skript im Browser, in eine App oder in ein Repository.

Wichtig für die Berechnung: Schlüssel des HMAC ist die 64-stellige Zeichenkette selbst, so wie sie angezeigt wird – nicht die daraus dekodierten Bytes.

Die Signatur berechnen

userHash = hex( HMAC_SHA256( geheimnis, userId + "." + exp ) )

Kleinbuchstaben-Hex, 64 Zeichen. Mit bestätigter E-Mail-Adresse:

userHash = hex( HMAC_SHA256( geheimnis, userId + "." + exp + "." + email ) )

Nur in der zweiten Form gilt die E-Mail-Adresse als bestätigt. Sie setzt exp voraus.

PHP:

<?php
$geheim   = getenv('RC_IDENT_SECRET');      // 64 Hex-Zeichen aus dem Konto
$userId   = (string) $kunde->id;
$exp      = time() + 3600;                  // hoechstens 24 h
$userHash = hash_hmac('sha256', $userId . '.' . $exp, $geheim);
?>
<script nonce="<?= $cspNonce ?>">
  ReactiveChat('identify', {
    userId: <?= json_encode($userId) ?>,
    userHash: <?= json_encode($userHash) ?>,
    exp: <?= (int) $exp ?>
  });
</script>

Node.js:

const crypto = require('crypto');

function rcIdentitaet(kunde) {
  const userId = String(kunde.id);
  const exp = Math.floor(Date.now() / 1000) + 3600;
  const userHash = crypto.createHmac('sha256', process.env.RC_IDENT_SECRET)
    .update(userId + '.' + exp)
    .digest('hex');
  return { userId, userHash, exp };
}

Python:

import hmac, hashlib, os, time

def rc_identitaet(kunde_id: str) -> dict:
    exp = int(time.time()) + 3600
    msg = f"{kunde_id}.{exp}".encode()
    key = os.environ["RC_IDENT_SECRET"].encode()   # die Hex-Zeichenkette als Text
    return {"userId": kunde_id, "exp": exp,
            "userHash": hmac.new(key, msg, hashlib.sha256).hexdigest()}

Mit E-Mail-Adresse (PHP):

$userHash = hash_hmac('sha256', $userId . '.' . $exp . '.' . $email, $geheim);

Die Adresse muss genau so signiert werden, wie du sie an identify übergibst.

Ohne Inline-Skript (strenge CSP)

Erlaubt deine Content-Security-Policy keine Inline-Skripte, gib die Werte als Daten aus und rufe identify aus einer eigenen Skriptdatei auf:

<meta name="rc-ident" content='{"userId":"4711","userHash":"9c1f…","exp":1792503600}'>
// /js/chat-ident.js
var m = document.querySelector('meta[name="rc-ident"]');
if (m) { ReactiveChat('identify', JSON.parse(m.content)); }

In Single-Page-Apps holst du die drei Werte nach der Anmeldung per fetch von deinem Server.

Was der Server prüft

Bestätigt und frisch ist ein Nutzer mit gültigem Hash und exp. Nur so bekommt er Kundendaten und das Kundenportal.

Ältere Form ohne exp: userHash = HMAC_SHA256(geheimnis, userId) wird weiterhin als bestätigt angenommen, aber nicht als frisch – für Gesprächsverlauf und Anzeige im Pult genügt sie, für Kundendaten nicht. Stelle bestehende Einbauten auf die Form mit exp um.

Wenn die Prüfung scheitert

Der Chat funktioniert weiter, aber anonym. Das Widget bekommt den Fehler auth_failed mit einem Grund in detail.reason:

Im Netzwerk-Reiter der Entwicklerwerkzeuge steht der Grund im Rahmen error der WebSocket-Verbindung; init_ok.identity zeigt verified und reason.

Eine Einstellung „nur bestätigte Besucher zulassen“ gibt es nicht: Unbestätigte Besucher chatten immer als anonyme Besucher.

Das Geheimnis rotieren

Nutzerwechsel und Abmelden

Kontext übergeben

Neben der Identität kann deine Seite dem Assistenten und deinem Team sagen, worum es gerade geht – etwa welches Produkt angezeigt wird oder was im Warenkorb liegt. Das geht über track:

ReactiveChat('track', 'warenkorb', {
  page_type: 'cart',
  cart_value: 129.80,
  cart_items: 3,
  currency: 'EUR'
});

Übernommen werden nur diese Felder; alles andere wird verworfen:

Adresse, Titel, Herkunft und Kampagnenparameter erfasst das Widget bei jedem Seitenwechsel ohnehin selbst. Kontext wird nur mit Einwilligung übertragen (Datenschutz-Einbindung). Schreibe keine personenbezogenen Daten in diese Felder – dafür ist identify da.

Mobile Apps

In einer App übergibst du die Identität nach dem Laden des WebViews per JavaScript, nie über die Adresse. Der Hash wird auch hier auf deinem Server berechnet, nicht in der App: Mobile Apps.

Weiter: Kundendaten-Endpunkt · SPA und Seitenwechsel

Viimati uuendatud: