Pular para o conteúdo

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.

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().

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.

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>

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.

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.