Kako da vam pomognemo?

Ukratko nam recite o čemu se radi – odgovorićemo vam e-poštom.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Na početnu stranicu

Identyfikacja odwiedzających i przekazywanie kontekstu

Jak zgłaszać zalogowanych użytkowników przez ReactiveChat('identify'), podpisywać userHash przez HMAC-SHA256 na twoim serwerze, rotować sekret i przekazywać asystentowi uporządkowany kontekst strony, np. produkt lub koszyk.

Jeśli twoja strona wie, kto jest właśnie na niej, powiedz to czatowi. Wtedy twój zespół widzi w panelu nazwisko zamiast „Odwiedzający 4f2a”, a funkcje takie jak dane klientów i portal klienta w ogóle stają się możliwe.

Zasada: przeglądarka niczego nie dowodzi. To, co strona twierdzi przez identify, każdy odwiedzający może sfałszować w konsoli. Za potwierdzonego uchodzi użytkownik tylko z podpisem, który twój serwer obliczył sekretem, który nigdy nie trafia do przeglądarki.

Wywołanie w przeglądarce

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

Inne pola są odrzucane. identify może stać przed załadowaniem widżetu; trafia do kolejki i nie wyzwala wcześniejszego ładowania. Wartości są wysyłane przy nawiązaniu połączenia, a jeśli widżet jest już połączony – od razu.

Sekret

W koncie, w sekcji Projekt → Weryfikacja tożsamości, tworzysz sekret projektu (uprawnienie: edycja projektu). Składa się z 64 znaków hex i jest pokazywany w całości dokładnie raz, potem już tylko zamaskowany. Umieść go w środowisku swojego serwera – nigdy w skrypcie w przeglądarce, w aplikacji ani w repozytorium.

Ważne przy obliczaniu: kluczem HMAC jest sam 64-znakowy ciąg, dokładnie taki, jak jest wyświetlany – a nie zdekodowane z niego bajty.

Obliczanie podpisu

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

Hex małymi literami, 64 znaki. Z potwierdzonym adresem e-mail:

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

Tylko w drugiej formie adres e-mail uchodzi za potwierdzony. Wymaga ona exp.

PHP:

<?php
$geheim   = getenv('RC_IDENT_SECRET');      // 64 znaki hex z konta
$userId   = (string) $kunde->id;
$exp      = time() + 3600;                  // najwyżej 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()   # ciąg hex jako tekst
    return {"userId": kunde_id, "exp": exp,
            "userHash": hmac.new(key, msg, hashlib.sha256).hexdigest()}

Z adresem e-mail (PHP):

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

Adres musi być podpisany dokładnie tak, jak przekazujesz go do identify.

Bez skryptu inline (ścisła CSP)

Jeśli twoja Content Security Policy nie dopuszcza skryptów inline, wypisz wartości jako dane i wywołaj identify z osobnego pliku skryptu:

<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)); }

W aplikacjach jednostronicowych pobierasz te trzy wartości po zalogowaniu przez fetch ze swojego serwera.

Co sprawdza serwer

Potwierdzony i świeży jest użytkownik z prawidłowym hashem i exp. Tylko wtedy dostaje dane klientów i portal klienta.

Starsza forma bez exp: userHash = HMAC_SHA256(geheimnis, userId) jest nadal przyjmowana jako potwierdzona, ale nie jako świeża – na potrzeby historii rozmowy i wyświetlania w panelu wystarcza, do danych klientów nie. Przestaw istniejące wdrożenia na formę z exp.

Gdy weryfikacja się nie powiedzie

Czat działa dalej, ale anonimowo. Widżet dostaje błąd auth_failed z przyczyną w detail.reason:

W zakładce „Sieć” narzędzi deweloperskich przyczyna widnieje w ramce error połączenia WebSocket; init_ok.identity pokazuje verified i reason.

Ustawienia „wpuszczaj tylko potwierdzonych odwiedzających” nie ma: niepotwierdzeni odwiedzający zawsze czatują jako anonimowi.

Rotacja sekretu

Zmiana użytkownika i wylogowanie

Przekazywanie kontekstu

Oprócz tożsamości twoja strona może powiedzieć asystentowi i twojemu zespołowi, o co właśnie chodzi – np. jaki produkt jest wyświetlany albo co leży w koszyku. Służy do tego track:

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

Przejmowane są tylko te pola; wszystko inne jest odrzucane:

Adres, tytuł, źródło wejścia i parametry kampanii widżet i tak rejestruje sam przy każdej zmianie strony. Kontekst jest przesyłany tylko za zgodą (Ochrona danych). Nie wpisuj w te pola danych osobowych – do tego służy identify.

Aplikacje mobilne

W aplikacji przekazujesz tożsamość po załadowaniu WebView przez JavaScript, nigdy przez adres. Hash także tutaj jest obliczany na twoim serwerze, a nie w aplikacji: Aplikacje mobilne.

Dalej: Endpoint danych klientów · SPA i zmiany stron

Poslednje ažuriranje: