К содержанию
ActionPulse

Какие данные собираются

Точный перечень данных в событии ActionPulse: что присылает ваш код, что добавляет трекер, что выводит сервер приёма, что не собирается вовсе и какие поля обрезаются.

Кому
Безопасникам, юристам и тем, кто отвечает за обработку данных
Проверено
На этой странице

Эта страница нужна, когда вы заполняете перечень обрабатываемых данных, отвечаете безопаснику на вопрос «что именно уезжает» или сверяете политику конфиденциальности с фактическим поведением продукта. Ниже перечислено каждое поле, которое сохраняется вместе с событием, с указанием источника и назначения.

Формат HTTP-запроса описан отдельно — в схеме событий. Здесь речь о другом: что в итоге лежит в хранилище и откуда оно там взялось.

Три источника данных в одном событии

Источник Что даёт Управление
Ваш код имя события и его свойства полностью ваше
Браузерный трекер идентификаторы, время, адрес страницы, referrer настройками подключения и разметкой
Сервер приёма время приёма, страна, устройство, ОС, браузер, источник не отключается

Разделение важно юридически: состав свойств определяете только вы, а состав служебных полей зафиксирован в продукте и не расширяется по запросу.

Что присылает ваш код

Поле Откуда Зачем
event вы задаёте имя что произошло; по имени строятся все отчёты
props вы задаёте объект контекст события: план, сумма, шаг воронки
user_id ваш внутренний идентификатор связать события с одним человеком
session_id ваше значение либо трекер сшить события одного визита
schema_version ваша версия схемы проверка события по реестру

Никаких скрытых полей у события нет: приём разбирает тело строго и отклоняет запрос целиком, если в нём встретилось неизвестное поле.

Что добавляет трекер сам

Поле Откуда Зачем
anon_id UUID, созданный в браузере отличать посетителей до входа в аккаунт
session_id UUID с окном неактивности 30 минут границы визита
event_id UUID на каждое событие защита от дублей при повторной отправке
time часы устройства посетителя когда событие произошло
url location.href страница, отчёты по разделам, UTM
referrer document.referrer источник перехода

url и referrer перед постановкой в очередь проходят клиентскую редакцию: если строка содержит распознанный секрет, признак ссылки-возможности (приглашение, сброс пароля, magic-link), символ @ или похожий на телефон фрагмент, вместо адреса уходит [redacted] — целиком, а не частично. Это сознательно грубая проверка: разбор URL в ядро трекера не помещается по размеру.

Дополнительно трекер передаёт свою версию в служебном заголовке запроса. Прав она не даёт и на трактовку события не влияет — это диагностика.

Что определяет сервер приёма

Эти значения нельзя задать из запроса — их выводит сервер.

Поле Откуда Зачем Что при этом НЕ сохраняется
server_time момент приёма запроса, UTC опора для расследований и дедупликации
country IP-адрес запроса, база геоданных MaxMind география в отчётах сам IP-адрес
device_type строка User-Agent разрез по устройствам строка User-Agent
os строка User-Agent разрез по платформам версия ОС
browser строка User-Agent разрез по браузерам версия браузера
utm_source, utm_medium, utm_campaign параметры в url атрибуция кампаний остальные utm_*
actor_id user_id, иначе anon_id субъект события в отчётах
source тип ключа, которым отправлено достоверность события

Точные значения, чтобы не пересказывать их приблизительно:

  • country — двухбуквенный код страны. Если в установке база геоданных не подключена, поле остаётся пустым, и никакой замены по IP не появляется.
  • device_type — одно из четырёх значений: bot, tablet, mobile, desktop.
  • os и browser — только семейство, без номера версии.
  • UTM читаются из адреса до редакции, поэтому вырезание секретов из ссылки не ломает атрибуцию. Метки utm_term и utm_content не разбираются в отдельные поля вовсе.

Что не собирается

Не собирается Как это обеспечено
IP-адрес посетителя не сохраняется в событии, только код страны
Исходная строка User-Agent сохраняются только три производных поля
Значения полей форм автосбор форм передаёт метаданные поля, но не его значение
Нажатия клавиш и изменения значений трекер слушает фокус и потерю фокуса, но не ввод
Текст страницы в строгом режиме текст элементов не собирается
Текст рядом с полями ввода пусто и в нестрогом режиме тоже
Содержимое canvas, шрифты, встроенные изображения выключено в записях сессий на уровне кода
Кросс-доменные фреймы, консоль, сетевые запросы те же жёстко выключенные настройки записи
Суммы и цены из вёрстки деньги попадают только явным вызовом или с бэкенда
Cookies трекер не ставит ни одной — см. хранилище
Сквозная идентификация между сайтами идентификатор живёт в хранилище одного origin

Последняя строка часто нужна дословно: анонимный идентификатор создаётся в localStorage конкретного origin. Ни один механизм ActionPulse не связывает посетителя одного сайта с посетителем другого — ни cookie третьей стороны, ни общий идентификатор, ни отпечаток браузера.

Что обрезается и что отклоняется на приёме

Два разных исхода, и путать их дорого: обрезка сохраняет событие с укороченным значением, отклонение теряет элемент батча.

Поле Порог Что происходит при превышении
url 2048 байт обрезается
referrer 2048 байт обрезается
session_id 256 байт обрезается
user_id, anon_id 256 байт элемент отклоняется, код invalid_actor
Количество свойств 64 элемент отклоняется, too_many_props
Имя свойства 64 байт элемент отклоняется, prop_key_too_long
Значение свойства 8 КБ элемент отклоняется, prop_value_too_large

Длина везде считается в байтах UTF-8, а не в символах: русская буква занимает два байта, поэтому адрес с кириллицей в пути обрежется вдвое раньше, чем кажется по количеству знаков.

Сверх этого действуют две редакции, каждая со своим правилом замены:

  • в свойствах совпавшее значение заменяется целиком на [redacted];
  • в url и referrer заменяется только совпавший фрагмент, чтобы схема, домен, путь и UTM сохранились.

Подробный разбор того, что именно распознаётся и на что нельзя рассчитывать — в статье про маскирование.

Автоматический сбор и явные вызовы

Явный вызов — событие, которое отправили вы: имя и свойства выбираете вы, состав предсказуем. Автоматический сбор — события в пространстве pp., которые трекер формирует сам по действиям посетителя; их состав фиксирован в коде и не настраивается.

Полный состав автособранных событий и условие сбора:

Событие Свойства Собирается
pp.page_view url всегда, пока трекер работает
pp.click selector, tag, href, x_pct, y_pct, url переключатель кликов
pp.rage_click selector, count, url тот же переключатель кликов
pp.dead_click selector, url тот же переключатель кликов
pp.hover_intent selector, tag, duration_ms, url переключатель наведений и включённые клики
pp.section_view selector, tag, visible_pct, duration_ms, url переключатель разделов
pp.scroll_depth depth, url переключатель прокрутки
pp.form_field form_selector, field_name, field_type, action, time_in_field_ms, filled переключатель форм
pp.form_submit form_selector, fields_filled, fields_total, time_total_ms переключатель форм
pp.js_error message, stack_hash переключатель диагностики
pp.web_vitals lcp_ms, cls_x1000, inp_ms, url переключатель диагностики
pp.replay_capped reason, duration_ms, size_bytes включённые записи сессий

Что в этой таблице важно для оценки рисков:

  • selector — CSS-путь до элемента длиной до 128 символов. Трекер предпочитает id и стабильные атрибуты разметки, а если они похожи на секрет — не берёт их и строит структурный путь.
  • text появляется в pp.click и pp.hover_intent только в нестрогом текстовом режиме, до 64 символов. Строгий режим — состояние по умолчанию, и при подключении тегом скрипта настройкой в кабинете он не ослабляется: подробности — в статье про маскирование.
  • field_name — атрибут name поля, иначе его id, иначе хеш от подсказки placeholder. Значение поля не передаётся ни в каком виде.
  • message в pp.js_error — текст ошибки до 200 символов, прогнанный через клиентскую редакцию. Стек не передаётся: вместо него уходит stack_hash — 32-битный хеш нормализованного стека, по которому одинаковые ошибки группируются, но восстановить содержимое нельзя.

Состояния переключателей у нового или ни разу не настроенного проекта: клики, наведения, разделы, прокрутка и формы — включены; записи сессий и диагностика — выключены. Меняются они в Настройках → Сбор и приватность владельцем или администратором проекта.

Просмотры страниц — исключение из этой схемы: они не управляются настройками проекта и собираются, пока на странице работает трекер. Отключить их можно только со стороны кода: не подключая трекер или отключив просмотры страниц при инициализации npm-пакета.

И ещё одна деталь, важная для оценки: если трекер не смог получить конфигурацию сбора — сервер ответил ошибкой или ответ не разобрался, — весь необязательный сбор останавливается, а не продолжается по последним известным настройкам. Отказ в безопасную сторону здесь означает «собираем меньше».

Событие identify — отдельный случай: это фиксированное имя, которое создаёт приём при связывании анонимного посетителя с пользователем, а его свойствами становятся переданные traits. Собственных полей вроде адреса страницы у него нет. Ограничения на traits те же, что на свойства обычного события.

Данные из записей сессий

Записи сессий — это отдельный поток данных: не события, а сжатые фрагменты изменений DOM, которые хранятся отдельно и удаляются по своему сроку. Все поля ввода в них маскируются всегда, а в строгом режиме маскируется и весь текст страницы.

Полный разбор того, что попадает в запись, что вырезается перед отправкой и как исключить область страницы — в статье приватность записей сессий.

Сроки хранения

События хранятся от 6 месяцев до 25 месяцев в зависимости от тарифа организации; записи сессий — свой, более короткий срок. В интерфейсе срок показывается только для чтения: произвольным значением он не задаётся, и эндпоинта для его изменения не существует.

Удаление данных конкретного человека не зависит ни от тарифа, ни от срока хранения — см. удаление данных субъекта.

Что проверить

  1. Отправьте одно тестовое событие и откройте его в списке событий проекта целиком. Сверьте состав свойств с тем, что ожидали увидеть: значения [redacted] означают, что вы отправили секрет или персональные данные.
  2. Проверьте, что в user_id лежит внутренний идентификатор, а не адрес почты или телефон: это поле редакции не подлежит.
  3. Откройте Настройки → Сбор и приватность и сверьте включённые переключатели автосбора с тем, что описано в вашей политике конфиденциальности.
  4. Если вы указывали в политике IP-адрес или строку браузера — уберите их: в событиях этих данных нет.
  5. Если автосбор форм включён, убедитесь, что поля с персональными данными исключены разметкой, а не только «не должны попадать по смыслу».