Session replay
Session replay graba el DOM de las sesiones muestreadas y te permite verlas en el panel, lado a lado con los eventos de la sesión. Está construido para debugging e investigación de UX, y es deliberadamente conservador: apagado por defecto, muestreado por defecto, inputs enmascarados por defecto.
Habilitar replay
Sección titulada «Habilitar replay»Un solo interruptor: la configuración del proyecto. Habilita la grabación de sesiones y define el sample rate a nivel de proyecto en el panel, y el SDK lo recoge por sí solo (vía /decide) — sin cambios de código ni deploy. El mismo interruptor es el kill switch remoto: apagarlo detiene las grabaciones nuevas en segundos.
La opción sessionRecording de init del SDK es para overrides locales — opciones de privacidad, u optar por no grabar en absoluto:
kilden.init('YOUR_WRITE_KEY', { sessionRecording: { sampleRate: 0.1, // graba el 10% de las sesiones maskAllInputs: true, // default — ver privacidad abajo minimumDurationMs: 2000, // descarta el ruido de menos de 2 s },});Un sessionRecording: false local siempre gana sobre la config remota — el código de grabación ni siquiera se descarga. Ve la referencia del SDK para carga eager vs lazy y los controles manuales startSessionRecording() / stopSessionRecording().
Muestreo
Sección titulada «Muestreo»Grabar el 100% de las sesiones es caro para todos los involucrados; el default graba el 10%. La decisión se toma una vez por sesión y es pegajosa: los reloads la conservan, y se vuelve a sortear cuando la sesión rota tras 30 minutos de inactividad. El sample rate efectivo también puede fijarse de forma remota desde la configuración del proyecto.
Privacidad
Sección titulada «Privacidad»Los defaults de replay son deliberadamente más estrictos que los de autocapture, porque una grabación muestra lo que el usuario escribe:
| Control | Default | Efecto |
|---|---|---|
maskAllInputs |
true | Todo lo escrito en inputs se enmascara. Apagarlo es una decisión explícita |
maskAllText |
false | Enmascara todo el texto de la página, no solo los inputs |
blockSelectors |
— | Los elementos que coinciden con estos selectores no se graban en absoluto |
recordCanvas |
false | El contenido de los canvas se omite |
Dos atributos del DOM funcionan en todo el SDK:
data-kilden-no-capture— excluye al elemento y sus descendientes de autocapture y de las grabaciones por completo.data-kilden-mask— graba la estructura pero enmascara el contenido (texto e inputs) del elemento y sus descendientes.
<section data-kilden-mask> <!-- el layout se ve en el replay, el contenido queda enmascarado --></section>Correlación con analytics
Sección titulada «Correlación con analytics»Una grabación comparte su session id con los eventos de la sesión, así que los replays y las líneas de tiempo de eventos se unen 1:1 — “mira las sesiones de todos los que abandonaron el checkout” es una query, no una búsqueda. Cuando empieza la grabación, el SDK emite $session_recording_started en tu stream de eventos. Una grabación nunca cruza el límite de una sesión: la rotación de sesión la corta.
Transporte y retención
Sección titulada «Transporte y retención»Los datos de replay no viajan con tus eventos: los chunks se comprimen con gzip en el navegador y se envían por POST a {apiHost}/replay (máx. 4 MiB por chunk), con los metadatos de la grabación en headers — nunca en la URL, así nada sensible termina en los access logs. Las sesiones cortas (por debajo de minimumDurationMs, default 2 s) se descartan. Las grabaciones se retienen por 30 días.