session_snapshot_updated
Что означает
Сервер постепенно собирает итоговую строку сессии. Не ждём session_end: пользователь может закрыть браузер.
Сессионные признаки поддерживают одну обновляемую аналитическую строку на сессию и не полагаются на финальное browser event.
Исходные события
- session_start
- page_view
- activity_checkpoint
- click
- object_visibility_checkpoint
- scroll_checkpoint
forms
Алгоритм
- Триггер: После каждого batch или раз в N секунд на сервере.
- Расчет: page_views_count, clicks_count, total_active_ms, idle_ms, max_scroll_depth, object visibility totals, form progress.
- Приоритет:
P0; рассчитывается сервером:Да. - Не просите SDK отправлять
session_snapshot_updatedнапрямую: сервер выводит это событие из принятых source-событий или безопасных импортов.
Текущий статус реализации: отправляется текущим backend/app/services/derived_processor.py, когда присутствуют нужные source-сигналы.
Формат хранения
Хранится в sf_server_derived_events с derived_type = "session_snapshot_updated", derived_ts, source_event_id, если строка связана с конкретным source-событием, а также batch_id, session_id, mapping_version и payload_json.
Для агрегатов уровня сессии source_event_id может быть пустым; последнее состояние сессии также отражается в sf_session_snapshots, когда это применимо.
Пример payload
{
"derived_type": "session_snapshot_updated",
"source_event_id": "evt_example_or_empty",
"mapping_version": "map_active",
"payload": {
"page_views_count": "example",
"clicks_count": "example",
"total_active_ms": "example",
"idle_ms": "example",
"max_scroll_depth": "example",
"object": "example"
}
}Примеры и допустимые значения из Excel: status: partial, active, closed_best_effort, expired.
Крайние случаи
Если часть событий не пришла — snapshot остаётся partial; признаки считаются из доступных checkpoint-ов.
Если обязательных checkpoints не хватает, снижайте confidence или помечайте payload как partial. Никогда не синтезируйте положительный intent-сигнал только из-за отсутствия события.
Дашборд
Ожидаемое окно live-debug: Лента сессии.
Если строка относится к загруженной сессии, она также должна находиться в окне Лента сессии.
Использование в ML
Главная строка для обучения: одна сессия = одна строка признаков.
Используйте стабильные codes и buckets вместо сырого текста, сырых URL или строк из DOM. Отсутствующие значения должны быть явными (not_available, unknown, partial), чтобы CatBoost отличал отсутствие сигнала от отрицательного сигнала.
Использование в детекции ботов
Сверхбыстрые сессии, нулевое active_ms, много событий/сек.
Логика детекции ботов должна комбинировать этот признак с независимыми поведенческими сигналами; эта страница не разрешает fingerprinting, cookies, canvas/WebGL/audio probes или сырые значения форм.
QA-проверки checklist
- Сгенерируйте перечисленные source-события в одной сессии.
- Запустите server-derived обработку для этой сессии.
- Проверьте, что
sf_server_derived_eventsсодержит строкуderived_type = "session_snapshot_updated"или что событие явно помечено как еще не реализованное. - Откройте окно live-debug дашборда
Лента сессиии проверьте, что строка ссылается обратно на эту страницу. - Проверьте, что
payload_jsonсодержит только безопасные поля из списка выше и не содержит сырые ПДн, query string, cookies или значения форм.