كيف يمكننا المساعدة؟

يرجى توضيح الموضوع بإيجاز، وسنرد بالبريد الإلكتروني.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
إلى الصفحة الرئيسية

Identifiera besökare och skicka kontext

Så identifierar du inloggade användare med ReactiveChat('identify'), signerar userHash med HMAC-SHA256 på servern, roterar hemligheten och ger assistenten strukturerad sidkontext som produkt eller varukorg.

Om din webbplats vet vem som är där, berätta det för chatten. Teamet ser då ett namn i agentpanelen i stället för ”Besökare 4f2a”, och funktioner som kunddata och kundportalen blir över huvud taget möjliga.

Principen: webbläsaren bevisar inget. Vad en sida än påstår via identify kan vilken besökare som helst förfalska i konsolen. En användare räknas som bekräftad först med en signatur som din server har beräknat med en hemlighet som aldrig når webbläsaren.

Anropet i webbläsaren

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

Andra fält slopas. identify kan komma innan widgeten har laddats; det läggs i kön och utlöser ingen tidigare laddning. Värdena skickas med när anslutningen upprättas och, om widgeten redan är ansluten, omedelbart.

Hemligheten

I kontot under Projekt → Identitetsverifiering genererar du projektets hemlighet (behörighet: redigera projektet). Den består av 64 hexadecimala tecken och visas i sin helhet exakt en gång, därefter bara maskerad. Lägg den i serverns miljö – aldrig i ett webbläsarskript, en app eller ett kodarkiv.

Viktigt för beräkningen: HMAC-nyckeln är själva strängen på 64 tecken, exakt som den visas – inte de byte som avkodas från den.

Beräkna signaturen

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

Hexadecimalt med gemener, 64 tecken. Med bekräftad e-postadress:

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

Bara i den andra formen räknas e-postadressen som bekräftad. Den kräver 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()}

Med e-postadress (PHP):

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

Adressen måste signeras exakt så som du skickar den till identify.

Utan inbäddat skript (strikt CSP)

Om din Content Security Policy inte tillåter inbäddade skript skriver du ut värdena som data och anropar identify från en egen skriptfil:

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

I ensidesappar hämtar du de tre värdena från servern via fetch efter inloggning.

Vad servern kontrollerar

Bekräftad och aktuell är en användare med giltig hash och exp. Först då får användaren kunddata och kundportalen.

Äldre form utan exp: userHash = HMAC_SHA256(secret, userId) godtas fortfarande som bekräftad, men inte som aktuell – den räcker för konversationshistoriken och visningen i agentpanelen, inte för kunddata. Byt befintliga integrationer till formen med exp.

När kontrollen misslyckas

Chatten fortsätter fungera, men anonymt. Widgeten får felet auth_failed med en orsak i detail.reason:

På nätverksfliken i utvecklarverktygen finns orsaken i WebSocket-anslutningens error-ram; init_ok.identity visar verified och reason.

Det finns ingen inställning för ”tillåt bara bekräftade besökare”: obekräftade besökare chattar alltid som anonyma besökare.

Rotera hemligheten

Byta användare och logga ut

Skicka kontext

Förutom identiteten kan sidan berätta för assistenten och teamet vad som händer just nu – till exempel vilken produkt som visas eller vad som finns i varukorgen. Det fungerar via track:

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

Bara dessa fält tas med; allt annat slopas:

Widgeten registrerar ändå adress, titel, referrer och kampanjparametrar själv vid varje sidbyte. Kontext skickas bara med samtycke (Integrera integritetsskydd). Skriv inga personuppgifter i dessa fält – det är vad identify är till för.

Mobilappar

I en app skickar du identiteten via JavaScript efter att WebView har laddats, aldrig via adressen. Även här beräknas hashen på servern, inte i appen: Mobilappar.

Nästa: Slutpunkt för kunddata · SPA och sidbyten

آخر تحديث: