Hvordan kan vi hjælpe?

Fortæl os kort, hvad det drejer sig om – vi vender tilbage på e-mail.

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

Identifikace návštěvníků a předávání kontextu

Jak oznámit přihlášené uživatele pomocí ReactiveChat('identify'), podepsat userHash pomocí HMAC-SHA256 na vašem serveru, obměnit tajný klíč a předat asistentovi strukturovaný kontext stránky, například produkt nebo košík.

Pokud váš web ví, kdo ho navštěvuje, sdělte to chatu. Váš tým pak v pultu uvidí jméno místo „Návštěvník 4f2a“ a teprve tím se zpřístupní funkce jako zákaznická data a zákaznický portál.

Princip: prohlížeč nic nedokazuje. Cokoli stránka tvrdí přes identify, může kterýkoli návštěvník napodobit v konzoli. Uživatel je potvrzený pouze s podpisem, který vypočítal váš server pomocí tajného klíče, jenž se nikdy nedostane do prohlížeče.

Volání v prohlížeči

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

Ostatní pole se zahodí. identify může přijít před načtením widgetu; zařadí se do fronty a nevyvolá předčasné načtení. Hodnoty se odešlou při navázání spojení, a pokud už je widget připojený, okamžitě.

Tajný klíč

V účtu v části Projekt → Ověření identity vygenerujete tajný klíč projektu (oprávnění: upravovat projekt). Obsahuje 64 hexadecimálních znaků a v plné podobě se zobrazí právě jednou, poté pouze maskovaný. Uložte ho do prostředí serveru – nikdy do skriptu v prohlížeči, aplikace nebo repozitáře.

Důležité pro výpočet: klíčem HMAC je samotný řetězec o 64 znacích, přesně jak je zobrazený – nikoli bajty z něj dekódované.

Výpočet podpisu

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

Hexadecimální zápis malými písmeny, 64 znaků. S potvrzenou e-mailovou adresou:

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

Pouze ve druhém tvaru se e-mailová adresa považuje za potvrzenou. Vyžaduje exp.

PHP:

<?php
$geheim   = getenv('RC_IDENT_SECRET');      // 64 hex characters from the account
$userId   = (string) $kunde->id;
$exp      = time() + 3600;                  // at most 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()   # the hex string as text
    return {"userId": kunde_id, "exp": exp,
            "userHash": hmac.new(key, msg, hashlib.sha256).hexdigest()}

S e-mailovou adresou (PHP):

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

Adresa musí být podepsána přesně tak, jak ji předáváte do identify.

Bez inline skriptu (přísná CSP)

Pokud vaše Content Security Policy nepovoluje inline skripty, vypište hodnoty jako data a zavolejte identify z vlastního souboru se skriptem:

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

V jednostránkových aplikacích načtěte tři hodnoty ze svého serveru přes fetch po přihlášení.

Co server kontroluje

Potvrzený a aktuální je uživatel s platným hashem a exp. Teprve pak získá zákaznická data a zákaznický portál.

Starší tvar bez exp: userHash = HMAC_SHA256(secret, userId) se stále přijímá jako potvrzený, ale nikoli jako aktuální – stačí pro historii konverzací a zobrazení v pultu, nikoli pro zákaznická data. Převeďte stávající integrace na tvar s exp.

Když kontrola selže

Chat funguje dál, ale anonymně. Widget obdrží chybu auth_failed s důvodem v detail.reason:

Na kartě síťových požadavků ve vývojářských nástrojích je důvod v rámci error spojení WebSocket; init_ok.identity zobrazuje verified a reason.

Nastavení „povolit pouze potvrzené návštěvníky“ neexistuje: nepotvrzení návštěvníci vždy chatují anonymně.

Rotace tajného klíče

Změna uživatele a odhlášení

Předávání kontextu

Kromě identity může vaše stránka asistentovi a vašemu týmu sdělit, co se právě děje – například který produkt se zobrazuje nebo co je v košíku. Slouží k tomu track:

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

Přebírají se pouze tato pole; vše ostatní se zahodí:

Adresu, nadpis, odkazující stránku a parametry kampaně widget i tak zaznamenává sám při každé změně stránky. Kontext se předává pouze se souhlasem (Integrace ochrany soukromí). Do těchto polí nezapisujte osobní údaje – k tomu slouží identify.

Mobilní aplikace

V aplikaci předáváte identitu přes JavaScript po načtení WebView, nikdy přes adresu. Také zde se hash počítá na vašem serveru, nikoli v aplikaci: Mobilní aplikace.

Dále: Endpoint zákaznických dat · SPA a změny stránek

Senest opdateret: