Session replay
O session replay grava o DOM de sessões amostradas e permite assisti-las no painel, lado a lado com os eventos da sessão. Foi construído para debugging e pesquisa de UX, e é deliberadamente conservador: desligado por padrão, amostrado por padrão, inputs mascarados por padrão.
Habilitando o replay
Seção intitulada “Habilitando o replay”Uma chave: as configurações do projeto. Habilite a gravação de sessões e defina a taxa de amostragem do projeto no painel, e o SDK a aplica sozinho (via /decide) — sem mudança de código nem deploy. A mesma chave é o kill switch remoto: desligar interrompe novas gravações em segundos.
A opção de init sessionRecording do SDK serve para overrides locais — opções de privacidade, ou opt-out por completo:
kilden.init('YOUR_WRITE_KEY', { sessionRecording: { sampleRate: 0.1, // grava 10% das sessões maskAllInputs: true, // padrão — veja privacidade abaixo minimumDurationMs: 2000, // descarta ruído com menos de 2s },});Um sessionRecording: false local sempre vence a config remota — o código de gravação nem sequer é baixado. Veja a referência do SDK para carregamento eager vs lazy e os controles manuais startSessionRecording() / stopSessionRecording().
Amostragem
Seção intitulada “Amostragem”Gravar 100% das sessões é caro para todos os envolvidos; o padrão grava 10%. A decisão é tomada uma vez por sessão e é persistente: reloads a mantêm, e ela é sorteada de novo quando a sessão rotaciona após 30 minutos de inatividade. A taxa de amostragem efetiva também pode ser definida remotamente nas configurações do projeto.
Privacidade
Seção intitulada “Privacidade”Os padrões do replay são deliberadamente mais rígidos que os do autocapture, porque uma gravação mostra o que o usuário digita:
| Controle | Padrão | Efeito |
|---|---|---|
maskAllInputs |
true | Tudo digitado em inputs é mascarado. Desligar isso é uma decisão explícita |
maskAllText |
false | Mascara todo o texto da página, não só inputs |
blockSelectors |
— | Elementos que casam com esses seletores não são gravados de forma alguma |
recordCanvas |
false | O conteúdo de canvas é pulado |
Dois atributos do DOM funcionam em todo o SDK:
data-kilden-no-capture— exclui o elemento e seus descendentes do autocapture e das gravações por inteiro.data-kilden-mask— grava a estrutura mas mascara o conteúdo (texto e inputs) do elemento e seus descendentes.
<section data-kilden-mask> <!-- layout visível no replay, conteúdo mascarado --></section>Correlação com o analytics
Seção intitulada “Correlação com o analytics”Uma gravação compartilha seu session id com os eventos da sessão, então replays e linhas do tempo de eventos se juntam 1:1 — “assistir às sessões de todo mundo que abandonou o checkout” é uma query, não uma busca. Quando a gravação começa, o SDK emite $session_recording_started no seu stream de eventos. Uma gravação nunca cruza a fronteira de uma sessão: a rotação da sessão a corta.
Transporte e retenção
Seção intitulada “Transporte e retenção”Os dados de replay não viajam com seus eventos: os chunks são comprimidos com gzip no navegador e enviados via POST para {apiHost}/replay (máx. 4 MiB por chunk), com os metadados da gravação em headers — nunca na URL, então nada sensível cai em logs de acesso. Sessões curtas (abaixo de minimumDurationMs, padrão 2 s) são descartadas. As gravações são retidas por 30 dias.