У воспроизведения сессии плохая репутация, и по большей части заслуженная.
Эту категорию сформировали инструменты аналитики, которые записывают каждую сессию каждого пользователя непрерывно и навсегда, чтобы команда роста в следующем квартале могла перемотать чьё-нибудь оформление заказа. Это слежка с прикрученной функцией отладки, и пользователям не зря от неё не по себе.
В BugDump воспроизведение всё равно есть: для одного класса багов ничто другое не работает. Но устроено оно иначе.
Где без воспроизведения не обойтись
Большинство багов решаются консолью и сетевым логом. Ошибка, 500 — готово.
А есть другие. В консоли чисто. В сети чисто. Каждый запрос вернул 200. А пользователь твёрдо уверен, что что-то сломалось.
И почти всегда он прав. Сломалось взаимодействие: клик попал не в тот элемент, форма молча сбросилась, модальное окно открылось под оверлеем, смена состояния оставила интерфейс в виде, которого вы не предусмотрели. Ничто из этого не даёт ошибки, потому что с точки зрения кода всё в порядке.
Для таких багов воспроизведение — это всё расследование. Вы смотрите двенадцать секунд перед отчётом и видите, что пользователь сделал на деле, а это регулярно не то, что он описал.
Привязано к отчёту, а не к пользователю
Главное отличие: в BugDump воспроизведение привязано к баг-репорту, а не к профилю пользователя.
Запись существует, чтобы объяснить конкретный отправленный отчёт. Она не копит долгую историю чьего-либо поведения. Нет обозревателя сессий, нет кнопки «посмотреть случайного пользователя», нет анализа воронок. Если никто не сообщил о баге, никто ничего и не смотрит.
Это функция поменьше, чем воспроизведение в инструментах аналитики. В этом и смысл. Узкая версия решает задачу отладки без той части, от которой людям не по себе.
Инструмент для скрытия данных — у пользователя
В редакторе пометок на скриншоте есть инструмент размытия, и он работает так, как должен: данные скрываются в браузере до отправки. Размытую область не размывают на серверах BugDump — она до них вообще не доходит.
Это переворачивает привычный порядок. Обычно приватность — обещание поставщика: он говорит, что будет ответственно обращаться с вашими данными, а вы решаете, верить ли ему. Скрытие в браузере — не обещание. Пиксели просто не покидают машину.
На практике это значит, что пользователь, у которого на странице полно имён клиентов, может прислать вам нужный скриншот. Без этого осторожные не присылают ничего.
Выключено по умолчанию там, где это важно
captureNetworkBodies равен false, пока вы его не включите.
Тела запросов полезны: иногда весь баг — в содержимом ответа. Но там же лежат токены, персональные и платёжные данные. Безопасное значение по умолчанию — то, при котором включение остаётся чьим-то осознанным решением.
Само воспроизведение выключается одной строкой — глобально или на тех маршрутах, которые не нужно записывать:
Bugdump.init({
apiKey: 'your-api-key',
features: {
sessionReplay: false,
},
});
Так устроена каждая функция сбора: скриншоты, запись экрана, воспроизведение и вложения включаются и выключаются независимо. Можно запустить BugDump только с описанием и логом консоли, если этого требует ваш комплаенс.
Запрос разрешения, который я решил оставить
Скриншоты и запись экрана по умолчанию идут через getDisplayMedia, а он показывает собственный диалог разрешения браузера. Я мог бы полностью обойтись без него, если бы по умолчанию рендерил DOM.
Я его оставил, по двум причинам.
Снимок точный: canvas, видео, iframe с других доменов и нативные элементы управления снимаются ровно такими, какими отрисованы, а не приблизительно. И запрос честный. Пользователю сообщает браузер, а не BugDump, что его экран сейчас снимут. Он может отказаться, и тогда снимок делается через DOM, а отчёт не теряется.
Диалог разрешения — лишний шаг. Но это и согласие, которое передаёт сторона, не подконтрольная ни мне, ни вам.
К чему я пришёл
Воспроизведение — сильный инструмент, которому индустрия аналитики научила людей не доверять. Недоверие обоснованное, но инструмент всё равно стоит иметь.
Мой ответ: привязать его к отчётам, а не к сессиям, отдать инструмент скрытия в руки пользователя и применять его до отправки, по умолчанию выключить самый рискованный сбор данных и сделать так, чтобы любую функцию можно было отключить одной строкой.
Вы получаете двенадцать секунд, которые объясняют баг. Системы слежки не получаете ни вы, ни я.
Читайте также
Воспроизведение сессии для отладки: что пользователь сделал перед багом — как работает воспроизведение, что оно записывает и почему вместе с консолью и сетью оно превращает расплывчатый отчёт в диагноз.
Как собрать логи консоли и сетевые запросы из браузера пользователя — как перехватить console, ошибки, fetch и XHR и не сломать страницу, за которой следите.
Анатомия баг-репорта: что собирает BugDump и зачем — каждый сигнал, который собирает виджет BugDump, и какие из них на деле помогают найти баг.