Hvordan kan vi hjelpe?

Fortell kort hva det gjelder – vi svarer på e-post.

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

Bezoekers identificeren en context doorgeven

Geef aangemelde gebruikers door met ReactiveChat('identify'), onderteken userHash met HMAC-SHA256 op uw server, vernieuw het geheim en geef gestructureerde paginacontext zoals product of winkelmand door.

Als uw website weet wie er is, vertel dat dan aan de chat. Uw team ziet in het agentenpaneel dan een naam in plaats van “Bezoeker 4f2a” en functies zoals klantgegevens en het klantportaal worden daardoor pas mogelijk.

Het principe: de browser bewijst niets. Alles wat een pagina via identify beweert, kan elke bezoeker in de console vervalsen. Een gebruiker geldt alleen als bevestigd met een handtekening die uw server heeft berekend met een geheim dat nooit de browser bereikt.

De aanroep in de browser

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

Andere velden worden verworpen. identify mag worden aangeroepen voordat de widget geladen is; de aanroep gaat in de wachtrij en veroorzaakt geen vroegtijdig laden. De waarden gaan mee bij het verbinden en, als de widget al verbonden is, direct.

Het geheim

In uw account onder Project → Identiteitsverificatie genereert u het geheim van het project (recht: project bewerken). Het bestaat uit 64 hextekens en wordt precies één keer volledig getoond, daarna alleen gemaskeerd. Zet het in de omgeving van uw server — nooit in een browserscript, een app of een repository.

Belangrijk voor de berekening: de HMAC-sleutel is de string van 64 tekens zelf, precies zoals getoond — niet de daaruit gedecodeerde bytes.

De handtekening berekenen

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

Hex in kleine letters, 64 tekens. Met een bevestigd e-mailadres:

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

Alleen in de tweede vorm geldt het e-mailadres als bevestigd. Daarvoor is exp vereist.

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

Met een e-mailadres (PHP):

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

Het adres moet precies worden ondertekend zoals u het aan identify doorgeeft.

Zonder inline script (strenge CSP)

Als uw Content Security Policy geen inline scripts toestaat, voert u de waarden als gegevens uit en roept u identify vanuit een eigen scriptbestand aan:

<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 haalt u de drie waarden na het aanmelden met fetch bij uw server op.

Wat de server controleert

Bevestigd en actueel is een gebruiker met een geldige hash en exp. Alleen dan krijgt die klantgegevens en het klantportaal.

Oudere vorm zonder exp: userHash = HMAC_SHA256(secret, userId) wordt nog steeds als bevestigd geaccepteerd, maar niet als actueel — voldoende voor de gespreksgeschiedenis en weergave in het agentenpaneel, niet voor klantgegevens. Zet bestaande integraties om naar de vorm met exp.

Als de controle mislukt

De chat blijft werken, maar anoniem. De widget ontvangt de fout auth_failed met een reden in detail.reason:

Op het netwerktabblad van de ontwikkelaarstools staat de reden in het frame error van de WebSocket-verbinding; init_ok.identity toont verified en reason.

Er is geen instelling “alleen bevestigde bezoekers toestaan”: onbevestigde bezoekers chatten altijd anoniem.

Het geheim vernieuwen

Gebruiker wisselen en afmelden

Context doorgeven

Naast de identiteit kan uw pagina de assistent en uw team vertellen wat er nu gebeurt — bijvoorbeeld welk product wordt getoond of wat in de winkelmand zit. Dat werkt via track:

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

Alleen deze velden worden overgenomen; al het overige wordt verworpen:

Adres, titel, referrer en campagneparameters legt de widget sowieso bij elke paginawisseling zelf vast. Context wordt alleen met toestemming doorgestuurd (Privacyintegratie). Zet geen persoonsgegevens in deze velden — daarvoor is identify bedoeld.

Mobiele apps

In een app geeft u de identiteit na het laden van de WebView via JavaScript door, nooit via het adres. Ook hier wordt de hash op uw server berekend, niet in de app: Mobiele apps.

Volgende: Klantgegevensendpoint · SPA en paginawisselingen

Sist oppdatert: