Session replay
Le session replay enregistre le DOM des sessions échantillonnées et vous laisse les revoir dans le panel, côte à côte avec les événements de la session. Conçu pour le debugging et la recherche UX, il est délibérément conservateur : désactivé par défaut, échantillonné par défaut, champs de saisie masqués par défaut.
Activer le replay
Section intitulée « Activer le replay »Un seul interrupteur : les réglages du projet. Activez l’enregistrement de sessions et fixez le taux d’échantillonnage au niveau du projet dans le panel, et le SDK le prend en compte tout seul (via /decide) — sans changement de code ni déploiement. Le même interrupteur est le kill switch distant : le désactiver arrête les nouveaux enregistrements en quelques secondes.
L’option sessionRecording de init du SDK sert aux overrides locaux — options de confidentialité, ou opt-out complet :
kilden.init('YOUR_WRITE_KEY', { sessionRecording: { sampleRate: 0.1, // enregistre 10 % des sessions maskAllInputs: true, // défaut — voir la confidentialité plus bas minimumDurationMs: 2000, // écarte le bruit sous 2 s },});Un sessionRecording: false local gagne toujours sur la config distante — le code d’enregistrement n’est même pas téléchargé. Voir la référence du SDK pour le chargement eager vs lazy et les contrôles manuels startSessionRecording() / stopSessionRecording().
Échantillonnage
Section intitulée « Échantillonnage »Enregistrer 100 % des sessions coûte cher à tout le monde ; le défaut enregistre 10 %. La décision est prise une fois par session et elle colle : les rechargements la conservent, et un nouveau tirage a lieu quand la session tourne après 30 minutes d’inactivité. Le taux d’échantillonnage effectif peut aussi être fixé à distance depuis les réglages du projet.
Confidentialité
Section intitulée « Confidentialité »Les défauts du replay sont délibérément plus stricts que ceux de l’autocapture, parce qu’un enregistrement montre ce que l’utilisateur tape :
| Contrôle | Défaut | Effet |
|---|---|---|
maskAllInputs |
true | Tout ce qui est tapé dans les champs de saisie est masqué. Le désactiver est une décision explicite |
maskAllText |
false | Masque tout le texte de la page, pas seulement les champs de saisie |
blockSelectors |
— | Les éléments correspondant à ces sélecteurs ne sont pas enregistrés du tout |
recordCanvas |
false | Le contenu des canvas est ignoré |
Deux attributs DOM fonctionnent à travers tout le SDK :
data-kilden-no-capture— exclut entièrement l’élément et ses descendants de l’autocapture et des enregistrements.data-kilden-mask— enregistre la structure mais masque le contenu (texte et champs de saisie) de l’élément et de ses descendants.
<section data-kilden-mask> <!-- structure visible dans le replay, contenu masqué --></section>Corrélation avec les analytics
Section intitulée « Corrélation avec les analytics »Un enregistrement partage son id de session avec les événements de la session, donc replays et timelines d’événements se joignent en 1:1 — “regarder les sessions de tous ceux qui ont abandonné le checkout” est une requête, pas une recherche. Quand l’enregistrement démarre, le SDK émet $session_recording_started dans votre flux d’événements. Un enregistrement ne franchit jamais une frontière de session : la rotation de session le coupe.
Transport et rétention
Section intitulée « Transport et rétention »Les données de replay ne voyagent pas avec vos événements : les chunks sont compressés en gzip dans le navigateur et postés vers {apiHost}/replay (max 4 MiB par chunk), avec les métadonnées d’enregistrement dans des headers — jamais dans l’URL, pour que rien de sensible ne finisse dans les logs d’accès. Les sessions courtes (sous minimumDurationMs, 2 s par défaut) sont écartées. Les enregistrements sont conservés 30 jours.