SupportWhale
← Alle helpartikelen
Aan de slag

Ingelogde klanten koppelen

Stuur namen, e-mailadressen en aanvullende klantgegevens veilig naar de chatwidget met ondertekende JWT's.

Laatst bijgewerkt · 2 nov 2026

Waarvoor is dit?

Heeft je website ingelogde klanten? Met geverifieerde klantidentiteit laat SupportWhale de juiste gesprekshistorie zien en kan het naam, e-mailadres en aanvullende klantgegevens aan de inbox toevoegen. Hiermee schakel je geen optionele herkenning van terugkerende bezoekers of e-mailopenmeting in.

1. Maak de geheime sleutel aan

Open Instellingen → Installatie → Geverifieerde klanten en maak een geheime identiteitssleutel aan. Bewaar de getoonde waarde meteen in de serveromgeving van je website, bijvoorbeeld als SUPPORTWHALE_IDENTITY_SECRET. De sleutel verschijnt één keer. Een nieuwe sleutel vervangt de oude en maakt bestaande ondertekende tokens ongeldig. Zet hem nooit in browsercode of de widgetsnippet.

2. Onderteken het token op je server

Maak een endpoint op je eigen backend, bijvoorbeeld /your-backend/support-identity, dat alleen toegankelijk is voor ingelogde gebruikers. Haal het account uit de geverifieerde serversessie, niet uit een user-ID die de browser aanlevert. Dit voorbeeld gebruikt Web Crypto op de server (Node.js 22+, Deno, Bun of Workers). Vervang sw_YOUR_WEBSITE_KEY door de openbare websitesleutel uit Installatie:

// Server only: Web Crypto (Node.js 22+, Deno, Bun, Workers).
// user must come from your authenticated session, never request input.
// identitySecret is the exact secret text from server configuration.
async function createIdentityToken(user, identitySecret) {
  const encode = (value) => btoa(String.fromCharCode(...value))
    .replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
  const utf8 = new TextEncoder();
  const now = Math.floor(Date.now() / 1000);
  const header = encode(utf8.encode(JSON.stringify({ alg: 'HS256', typ: 'JWT' })));
  const payload = encode(utf8.encode(JSON.stringify({
    sub: String(user.id), iss: "sw_YOUR_WEBSITE_KEY", aud: 'supportwhale',
    iat: now, exp: now + 300, name: user.name, email: user.email,
    metadata: { plan: user.plan }
  })));
  const key = await crypto.subtle.importKey(
    'raw', utf8.encode(identitySecret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  );
  const signature = await crypto.subtle.sign('HMAC', key, utf8.encode(header + '.' + payload));
  return header + '.' + payload + '.' + encode(new Uint8Array(signature));
}

Laat je endpoint { "token": "..." } met Cache-Control: no-store teruggeven en HTTP 401 als niemand is ingelogd. Gebruik de geheime sleutel uit de serverconfiguratie. De verplichte JWT-claims zijn sub (stabiele, niet-lege klant-ID, maximaal 200 tekens), iss (openbare websitesleutel), aud (supportwhale), iat en exp (Unix-seconden, maximaal vijf minuten). Optioneel: name, email, avatar en JSON-metadata (maximaal circa 5 KB). Gebruik bijvoorbeeld het abonnementsniveau; stuur geen wachtwoorden of andere geheimen mee. Er staan ook kopieerbare voorbeelden voor TypeScript, PHP, C# en Ruby bij Instellingen → Installatie → Geverifieerde klanten → Integratievoorbeeld.

3. Koppel de gebruiker in de browser

Registreer een provider die telkens een nieuw kortlevend token van je backend ophaalt. SupportWhale vernieuwt ingelogde sessies zelf en bewaart de juiste gesprekshistorie:

// Run on your site for an authenticated customer.
function connectSupportWhaleUser() {
  void window.SupportWhale.setIdentityProvider(async () => {
    const response = await fetch('/your-backend/support-identity', {
      credentials: 'same-origin', cache: 'no-store'
    });
    if (!response.ok) throw new Error('Sign-in required');
    const { token } = await response.json();
    return token;
  });
}
if (window.SupportWhale && !window.SupportWhale._queue) {
  connectSupportWhaleUser();
} else {
  window.addEventListener('supportwhale:ready', connectSupportWhaleUser, { once: true });
}

4. Uitloggen en testen

Roep bij uitloggen of wisselen van account eerst await window.SupportWhale.reset() aan. Zo wordt de oude chatsessie op dit apparaat gewist. Registreer de provider daarna opnieuw voor het nieuwe account. Bij mislukte vernieuwing wordt niet ongemerkt een anonieme sessie gestart. Test met twee accounts of gesprekken gescheiden blijven.

Identificatie van ingelogde klanten is iets anders dan het herkennen van anonieme websitebezoekers. Optionele metingen en toestemming.

Hulp nodig? Neem contact op →