Session Replay
Записывайте сессии, находите фрустрацию автоматически, храните до 90 дней. Как видеокамера для продукта — видите всё, что происходит, с уважением к приватности.
Видите, а не гадаете
Смотрите, что делает пользователь на самом деле. Как камера в магазине — видите путь покупателя.
Фрустрация видна сразу
4 типа фрустрации детектятся автоматически. Не нужно смотреть 1000 записей — система сама покажет проблемные.
Приватность по умолчанию
Пароли и ввод маскируются автоматически. Блокировка элементов через CSS-селекторы. 152-ФЗ и GDPR.
Как это работает
От записи до воспроизведения — четыре шага. Как видеонаблюдение: камера снимает, сервер хранит, вы смотрите.
SDK записывает сессию
TrektikReplay инициализирует rrweb. Каждое DOM-изменение попадает в буфер. Буфер flush-ится каждые 10 секунд или при 50 событиях. Максимальная длительность — 30 минут.
Чанки сжимаются и отправляются
Каждый чанк проходит через gzip (CompressionStream) и отправляется на POST /v1/replay/chunks. API-ключ в заголовке X-API-Key. Лимит 2 МБ на чанк.
Фрустрация детектится параллельно
TrektikFrustration слушает клики, ошибки и движения мыши. При обнаружении фрустрации — событие $frustration с типом, селектором и координатами.
Воспроизведение в плеере
GET /v1/replay/sessions/{session_id}/chunks — получаете все чанки. Плеер на rrweb-player воспроизводит DOM как видео. Timeline с событиями для навигации.
Как выглядит плеер
Пример плеера. Красные события — фрустрация (dead click). Данные демонстрационные.
Frustration Detection: 4 типа фрустрации
SDK автоматически ловит сигналы раздражения. Каждый тип — отдельное событие $frustration с координатами и селектором.
Rage Click
Триггер: 3+ кликов за 1 секунду на одном элементе
Значит: Пользователь злится — кнопка не работает или слишком медленная
Как стучать в закрытую дверь
Dead Click
Триггер: Клик без DOM-изменений за 500мс
Значит: Элемент выглядит кликабельным, но ничего не делает
Как нажимать на нарисованную кнопку
Error Click
Триггер: Клик + JavaScript-ошибка в течение 2 секунд
Значит: Действие пользователя вызывает баг
Как включить свет и получить короткое замыкание
Thrashed Cursor
Триггер: 3+ смены направления мыши за 500мс
Значит: Пользователь потерялся — не может найти нужный элемент
Как метаться по незнакомому городу
Все возможности
Запись через rrweb
Полная запись DOM-изменений: клики, скроллы, ввод, навигация. Не видеофайл, а лёгкий лог изменений — как стенограмма вместо видео. Воспроизводится в браузере один-в-один.
Gzip-сжатие чанков
Каждый чанк сжимается через CompressionStream перед отправкой. Размер трафика уменьшается в 3-5 раз. Как zip-архив — то же содержимое, меньше места. Лимит 2 МБ на чанк.
Маскирование ввода
maskTextInput: true по умолчанию — все текстовые поля маскируются. maskAllText — заменяет весь текст звёздочками. blockSelector — полностью скрывает элементы. Как матовое стекло — видно движение, не видно содержимое.
Frustration Detection (4 типа)
Rage clicks — 3+ кликов за 1 секунду на одном элементе. Dead clicks — клик без DOM-изменений за 500мс. Error clicks — клик, после которого JavaScript-ошибка. Thrashed cursor — хаотичное метание мыши. Каждый тип — событие $frustration.
Sampling Rate
Записываете не всех — только нужный процент. samplingRate: 50 запишет половину сессий. Решается один раз при инициализации. Как выборочная проверка на заводе — не каждую деталь, но достаточно для контроля качества.
Retention до 90 дней
Настраиваемый срок хранения через API: PUT /v1/replay/retention. По умолчанию 30 дней. Автоматическая очистка — ежедневный воркер удаляет просроченные чанки и сессии. Как холодильник с таймером — само выбрасывает просроченное.
Фильтрация сессий
Ищите по user_id, диапазону дат, фильтруйте по событиям. Нашли аномалию в аналитике — переходите к конкретным записям. Как детектив — от улики к записи камеры.
Чанковая архитектура
Запись разбита на чанки (до 50 событий или 10 секунд). Каждый чанк — отдельный POST /v1/replay/chunks. Плеер собирает чанки обратно. Как пазл — части приходят по отдельности, картинка собирается целиком.
API-эндпоинты
| Метод | Эндпоинт | Что делает |
|---|---|---|
| POST | /v1/replay/chunks | Отправить чанк записи (SDK) |
| GET | /v1/replay/sessions | Список записей (фильтр по user_id, дате) |
| GET | /v1/replay/sessions/{id}/chunks | Все чанки для воспроизведения |
| GET | /v1/replay/storage | Статистика хранилища (сессий, чанков, размер) |
| PUT | /v1/replay/retention | Настроить retention (1-90 дней) |
| POST | /v1/replay/cleanup | Ручная очистка просроченных записей |
Trektik vs конкуренты
| Возможность | Trektik | Hotjar | FullStory |
|---|---|---|---|
| Frustration Detection (4 типа) | ✓ | ✗ | ✓ |
| Gzip-сжатие чанков | ✓ | ✗ | ✗ |
| Маскирование ввода по умолчанию | ✓ | ✓ | ✓ |
| Настраиваемый retention (API) | ✓ | ✗ | ✓ |
| Sampling rate (% сессий) | ✓ | ✓ | ✓ |
| Интеграция с аналитикой и heatmaps | ✓ | ✗ | ✓ |
| Dead click + Error click detection | ✓ | ✗ | ✗ |
| Thrashed cursor detection | ✓ | ✗ | ✗ |
| Хранение данных в РФ | ✓ | ✗ | ✗ |
| Единая платформа (analytics+replay+flags) | ✓ | ✗ | ✗ |
Когда что использовать
Пользователи бросают корзину — почему?
Отфильтруйте сессии с событием add_to_cart без purchase. Посмотрите 10 записей. Часто оказывается: кнопка «Оплатить» не видна на мобилке, или форма слишком длинная. 30 минут просмотра заменяют неделю гаданий.
Баг, который не воспроизводится?
Найдите сессии с $frustration: error_click. Увидите точную последовательность действий до ошибки. Как чёрный ящик самолёта — восстанавливаете события по записи.
Где пользователи «застревают» на странице?
Ищите $frustration: rage_click и dead_click. Эти события точно указывают на проблемные элементы — с координатами и CSS-селектором. Не нужно угадывать.
Хотим записывать только 10% сессий (экономия)?
samplingRate: 10 при инициализации TrektikReplay. Решение принимается один раз — пользователь либо записывается, либо нет. Retention: 30 дней по умолчанию, настройка через PUT /v1/replay/retention.
Увидьте своих пользователей глазами пользователей
Бесплатный тариф — до 1 000 записей в месяц. Frustration detection и 30 дней хранения включены.