ہم کیسے مدد کر سکتے ہیں؟

مختصراً بتائیں کہ معاملہ کیا ہے—ہم آپ کو ای میل کے ذریعے جواب دیں گے۔

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
ابتدائی صفحے پر جائیں

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

آخری بار تازہ کاری: