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, con defaults que priorizan la privacidad: los proyectos nuevos graban desde el primer momento, los inputs se enmascaran por defecto, y el toggle del proyecto es un kill switch remoto.
Habilitar replay
Sección titulada «Habilitar replay»Un solo interruptor: la configuración del proyecto. Los proyectos nuevos parten con la grabación habilitada al 100% de muestreo; ajusta el sample rate o apaga la grabación 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»Los proyectos nuevos parten al 100% para que tus primeras sesiones aparezcan sin ajustar nada; a medida que crece el tráfico, baja el porcentaje de muestreo en la configuración del proyecto. Cuando /decide responde, la configuración remota siempre gana en ambas direcciones: habilitada aplica el porcentaje del proyecto, y deshabilitada es el kill switch — detiene la grabación y bloquea incluso un startSessionRecording() manual. El sampleRate local del SDK (default 10%) solo cubre la ventana antes de que llegue la respuesta. 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.