Apa yang bisa kami bantu?

Jelaskan singkat persoalannya — kami akan menghubungi Anda melalui email.

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

Identificare i visitatori e trasmettere il contesto

Come comunicare gli utenti che hanno effettuato l’accesso con ReactiveChat('identify'), firmare userHash con HMAC-SHA256 sul Suo server, ruotare il segreto e fornire all’assistente un contesto strutturato della pagina, come il prodotto o il carrello.

Se il Suo sito web sa chi è presente, lo comunichi alla chat. Il Suo team vede così un nome nel pannello operatori invece di «Visitatore 4f2a» e diventano possibili funzioni come i dati dei clienti e il portale clienti.

Il principio: il browser non dimostra nulla. Qualsiasi dichiarazione della pagina tramite identify può essere falsificata da ogni visitatore nella console. Un utente viene considerato confermato solo con una firma calcolata dal Suo server, usando un segreto che non raggiunge mai il browser.

La chiamata nel browser

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

Gli altri campi vengono scartati. identify può precedere il caricamento del widget; viene messo in coda e non attiva il caricamento anticipato. I valori vengono trasmessi quando si stabilisce la connessione e, se il widget è già connesso, immediatamente.

Il segreto

Nell’account, in Progetto → Verifica dell’identità, generi il segreto del progetto (permesso: modificare il progetto). È composto da 64 caratteri esadecimali e viene mostrato per intero esattamente una volta, in seguito solo mascherato. Lo inserisca nell’ambiente del Suo server: mai in uno script nel browser, in un’app o in un repository.

Importante per il calcolo: la chiave HMAC è la stringa stessa di 64 caratteri, esattamente come mostrata, non i byte decodificati da essa.

Calcolare la firma

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

Esadecimale minuscolo, 64 caratteri. Con un indirizzo e-mail confermato:

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

Solo nella seconda forma l’indirizzo e-mail viene considerato confermato. Richiede 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()}

Con un indirizzo e-mail (PHP):

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

L’indirizzo deve essere firmato esattamente come viene passato a identify.

Senza script inline (CSP rigorosa)

Se la Sua Content Security Policy non consente script inline, inserisca i valori come dati e chiami identify da un Suo file script:

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

Nelle app a pagina singola, recuperi i tre valori dal Suo server tramite fetch dopo l’accesso.

Che cosa verifica il server

Un utente è confermato e con verifica recente se ha un hash valido e exp. Solo allora può accedere ai dati dei clienti e al portale clienti.

Forma precedente senza exp: userHash = HMAC_SHA256(secret, userId) è ancora accettato come confermato, ma non come verifica recente: basta per la cronologia delle conversazioni e la visualizzazione nel pannello operatori, non per i dati dei clienti. Aggiorni le integrazioni esistenti alla forma con exp.

Quando la verifica fallisce

La chat continua a funzionare, ma in forma anonima. Il widget riceve l’errore auth_failed con il motivo in detail.reason:

Nella scheda Rete degli strumenti per sviluppatori, il motivo si trova nella trama error della connessione WebSocket; init_ok.identity mostra verified e reason.

Non esiste un’impostazione «consenti solo visitatori confermati»: i visitatori non confermati chattano sempre come anonimi.

Ruotare il segreto

Cambiare utente e uscire

Trasmettere il contesto

Oltre all’identità, la Sua pagina può comunicare all’assistente e al Suo team che cosa sta succedendo in quel momento, ad esempio quale prodotto viene mostrato o che cosa c’è nel carrello. Questo avviene tramite track:

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

Vengono acquisiti solo questi campi; tutto il resto viene scartato:

Il widget registra già autonomamente indirizzo, titolo, referrer e parametri della campagna a ogni cambio di pagina. Il contesto viene trasmesso solo con il consenso (Integrazione della protezione dei dati). Non inserisca dati personali in questi campi: a questo serve identify.

App mobili

In un’app, trasmetta l’identità tramite JavaScript dopo il caricamento della WebView, mai tramite l’indirizzo. Anche qui l’hash viene calcolato sul Suo server, non nell’app: App mobili.

Prosegua: Endpoint per i dati dei clienti · SPA e cambi di pagina

Terakhir diperbarui: