Руководство по интеграции согласия на cookie для FullStory Digital Experience и Session Replay: сборник 2026 года

FullStory — доминирующая платформа в категории аналитики цифрового опыта по одной причине: она захватывает всё по умолчанию. Там, где традиционные аналитические инструменты записывают дискретные события, которые инструментировал разработчик, а платформы продуктовой аналитики записывают взаимодействия плюс автозахваченное дополнение, FullStory захватывает полный отрисованный DOM, след курсора, тайминг нажатий клавиш, поведение прокрутки, гневные клики, мёртвые клики, сетевые запросы и ошибки JavaScript — и сшивает их в сессионные записи, через которые аналитик может прокручивать кадр за кадром. Это покрытие — продукт. Это также причина, почему FullStory сидит на пересечении самых строгих правил согласия в каждом современном режиме приватности. Руководство EDPB о session-replay 2023 года и приоритеты целевой группы 2026 года трактуют session-replay как отдельную, более строгую категорию согласия. CNIL был самым публичным регулятором по теме, но не единственным — Garante, ICO, испанский AEPD и голландский AP все выпустили выровненные позиции. Развёртывание FullStory, настроенное для захвата с приоритетом согласия, с корректной маскировкой, корректным гейтингом и корректным аудит-следом, — один из более мощных инструментов, которые может запустить издатель; то, которое не было так настроено, — одна из самых лёгких целей, которые найдёт регулятор.

Почему FullStory сидит в самой строгой категории согласия

Инициализация FullStory по умолчанию делает то, что делает каждый инструмент session-replay, плюс больше. Она устанавливает first-party cookie в пространстве имён fs_uid и fs_lua, содержащие постоянный идентификатор посетителя и метку последней активности, генерирует идентификатор сессии под fs_session и начинает стримить отрисованный DOM на rs.fullstory.com в течение миллисекунд загрузки страницы. Стрим включает каждое событие ввода, каждое движение мыши, каждую позицию прокрутки, каждый переход страницы и — когда включён модуль сетевого захвата — каждый ответ XHR и fetch, который выдаёт страница, с включёнными телами ответов, если оператор не настроил подавление. Стрим — это то, что реконструируется в пиксель-в-пиксель сессионную запись, которую видит аналитик FullStory в дашборде.

Каждый из этих захватов задействует отдельный гейт согласия. Сохранение идентификатора посетителя — это операция хранения-и-доступа по статье 5(3) Директивы об электронной приватности, требующая предварительного, свободно данного, конкретного, информированного и недвусмысленного согласия по всему EEA, Великобритании и любой юрисдикции, импортировавшей тот же стандарт. Запись отрисованного DOM — это обработка персональных данных по GDPR, потому что визуальная запись достаточна, чтобы идентифицировать и раскрыть существенный контент о пользователе. Захват потока нажатий клавиш — особая чувствительность: всё, что пользователь печатает в поле формы, захватывается кадр за кадром, и если поле не замаскировано, запись включает напечатанный контент. EDPB был явен в том, что захват session-replay — это категория, требующая явного, гранулярного согласия, отдельного от общего аналитического согласия — и что маскировка — это дополнение к согласию, а не его замена.

Что FullStory записывает до согласия — и что должно быть подавлено

Стандартный quickstart FullStory устанавливает сниппет отслеживания прямо в <head> страницы. Это работает как задокументировано и является источником самого распространённого провала соответствия: сниппет работает до того, как баннер cookie отрисовался, cookie fs_uid и fs_session записываются в течение миллисекунд, и стрим session-replay начинает течь на rs.fullstory.com независимо от того, что пользователь решит позже. Каждый европейский регулятор, вынесший решение по этому паттерну, вынес одинаковое: cookie, установленные до согласия, незаконны, запись, захваченная до согласия, — незаконная обработка, и издатель несёт ответственность.

Поэтому соответствующая интеграция должна предотвратить инициализацию сниппета FullStory до того, как соответствующая категория согласия предоставлена. Паттерн, работающий в продакшене, — это API FS.consent() в сочетании с отложенной записью: сниппет загружается с FullStory({ orgId: 'XXX', recordOnlyThisIFrame: false }) и немедленно вызывается FS.shutdown(), затем FS.restart() и FS.consent(true) вызываются только после того, как CMP сигнализирует, что категория session-replay предоставлена. Альтернативный паттерн — условная инъекция скрипта — сниппет FullStory добавляется в DOM только после предоставления согласия — что чище, но требует от оператора потерять любое сшивание идентичности до согласия, которое FullStory мог бы иначе предоставить.

Cookie и хранилище, которые записывает FullStory

Сниппет FullStory записывает следующие идентификаторы при инициализации, все из которых неосновные и требуют согласия: fs_uid с многолетним сроком истечения, содержащий постоянный идентификатор посетителя, fs_lua с меткой последней активности пользователя, fs_session с идентификатором сессии и маркеры состояния записи, которые FullStory использует внутренне. Отзыв согласия должен поэтому и истекать эти cookie, и вызывать FS.consent(false) с последующим FS.shutdown(), чтобы остановить дальнейший захват, и издатель должен отправить запрос на удаление через приватный эндпоинт FullStory для предыдущих записей пользователя.

Отображение FullStory на схемы согласия

FullStory не реализует нативно IAB TCF или IAB Global Privacy Platform — это first-party платформа цифрового опыта, а не ad-tech-вендор. Она раскрывает нативный API согласия и поддерживает модель маскировки private-by-default, работающую независимо от состояния согласия. Паттерн, переживающий обзор регулятора, трактует каждый модуль FullStory как отдельный гейт, привязанный к конкретному сигналу CMP.

Паттерн интеграции, который работает

Эталонное развёртывание имеет четыре части: CMP, раскрывающая событие изменения согласия в реальном времени, отложенный бутстрап, инициализирующий FullStory с подавленным захватом через FS.shutdown(), слушатель согласия, вызывающий FS.consent(true) и FS.restart() когда гейт session-replay открывается, и конфигурация маскировки private-by-default, жёстко подавляющая каждое поле ввода, если оно не было явно opt-in.

Маскировка private-by-default

Слой маскировки FullStory работает независимо от согласия и должен быть настроен агрессивно, даже когда согласие предоставлено. CSS-класс fs-mask на любом элементе подавляет контент этого элемента из записи; CSS-класс fs-exclude исключает элемент полностью из DOM-стрима; класс fs-block блокирует и контент, и структуру. По правилам особых категорий GDPR и определению чувствительной персональной информации CCPA любое поле, которое могло бы захватить информацию о здоровье, финансовую деталь, государственные идентификаторы, биометрические данные, точную геолокацию или содержимое приватных коммуникаций, должно использовать атрибуты маскировки независимо от состояния согласия пользователя. Рекомендуемая позиция — применять fs-mask на уровне формы, а не поля — разработчик, добавляющий новое поле в существующую форму, гораздо менее вероятно вспомнит замаскировать его индивидуально, чем он будет работать внутри обёртки маскировки на уровне формы, которая ловит его автоматически.

Выбор региона и резидентность данных

FullStory оперирует отдельными US и EU эндпоинтами приёма. Для трафика EEA и Великобритании EU-эндпоинт — правильный по умолчанию — он держит приём, обработку и хранение внутри EEA и снижает экспозицию Schrems II, которую несло бы любое развёртывание session-replay в US-регионе. Эндпоинт настраивается на организацию FullStory и не может быть изменён ретроактивно, поэтому выбор региона должен быть сделан до масштабирования и задокументирован в уведомлении о конфиденциальности, чтобы цепочка законного основания была чистой от сбора до хранения.

Валидация интеграции и аудит-след

Шаг валидации — это то, что регуляторы проверяют и что издатели чаще всего пропускают на инструментах session-replay. Корректно интегрированное развёртывание FullStory должно пройти четыре теста в последовательности. Во-первых, чистая сессия браузера с показанным баннером, но без сделанного выбора, должна производить ноль запросов к rs.fullstory.com сверх загрузки файла SDK и ноль cookie fs_ в document.cookie. Во-вторых, отказ от согласия на session-replay должен сохранять это состояние — без захвата, без идентификатора, без записи. В-третьих, принятие согласия на session-replay должно производить ожидаемый cookie fs_uid, единое событие FS.consent(true) и DOM-стрим, текущий на настроенный региональный эндпоинт, с замаскированными полями, подтверждёнными захватывать только плейсхолдер маски. В-четвёртых, отзыв согласия должен немедленно остановить дальнейший захват, истечь cookie fs_ и инициировать запрос на удаление через приватный эндпоинт FullStory для предыдущих записей пользователя.

Ожидание аудит-следа — это то, где инструменты session-replay сталкиваются с самым строгим надзором. Руководящие принципы EDPB о баннерах cookie 2023 года и обновлённые приоритеты целевой группы 2026 года явны в том, что издатель должен быть способен доказать для любой конкретной сессионной записи в проекте FullStory, что пользователь, который её сгенерировал, дал действительное согласие на session-replay в момент захвата. Стандартный паттерн — установить версию согласия и временную метку как пользовательские переменные на идентификаторе FullStory через FS.setUserVars({ consent_version: 'v3', consent_ts: ts }), чтобы любая отдельная запись была прослеживаема обратно к конкретной записи журнала согласия. Корректно гейтированное развёртывание, в паре с атрибутами маскировки, по умолчанию приватными, и путём удаления, активирующимся при отзыве, — это то, что превращает покрытие FullStory из риска регуляторной концентрации в защитимую часть стека цифрового опыта издателя.

← Блог Читать все →