Какие данные собираются
Точный перечень данных в событии 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 месяцев в зависимости от тарифа организации; записи сессий — свой, более короткий срок. В интерфейсе срок показывается только для чтения: произвольным значением он не задаётся, и эндпоинта для его изменения не существует.
Удаление данных конкретного человека не зависит ни от тарифа, ни от срока хранения — см. удаление данных субъекта.
Что проверить
- Отправьте одно тестовое событие и откройте его в списке событий проекта
целиком. Сверьте состав свойств с тем, что ожидали увидеть: значения
[redacted]означают, что вы отправили секрет или персональные данные. - Проверьте, что в
user_idлежит внутренний идентификатор, а не адрес почты или телефон: это поле редакции не подлежит. - Откройте Настройки → Сбор и приватность и сверьте включённые переключатели автосбора с тем, что описано в вашей политике конфиденциальности.
- Если вы указывали в политике IP-адрес или строку браузера — уберите их: в событиях этих данных нет.
- Если автосбор форм включён, убедитесь, что поля с персональными данными исключены разметкой, а не только «не должны попадать по смыслу».