Информация для разработчиков по Cookie

Подключение и базовая интеграция

Скрипт читает собственный data-id, определяет текущий домен через location.hostname и делает запрос к API конфигурации. Если data-id отсутствует, инициализация прерывается.

Если у вас свой путь публикации cmp.js, замените только src. Механика data-id и доменного запроса остаётся такой же.

Что происходит дальше

  1. cmp.js получает конфигурацию баннера.
  2. С нашего сервера загружается основной скрипт модуля.
  3. Вызывается window.SoglasiusBannerInit(cfg) и поднимается объект window.SoglasiusCMP.

Пример подключения скрипта

<script src="https://cdn.soglasius.ru/cmp.js" data-id="YOUR_CMP_ID" defer></script>
Блокировка и активация скриптов

Модуль активирует отложенные скрипты, заменяя <script type="text/plain"> на обычный executable script, когда категория или сервис получили разрешение.

Категории CMP

necessary

Всегда активна. Активация категории вызывается сразу при инициализации.

statistic

Включается после согласия пользователя либо сразу, если разрешён запуск до consent.

marketing

Работает по той же схеме, что и statistic, и обновляет readyState.marketing.

Примеры разметки

<script type="text/plain" data-cmp-required="1">
  console.log("Всегда доступный код");
</script>

<script type="text/plain" data-cmp-category="statistic">
  ym(12345678, "init", { clickmap: true, trackLinks: true });
</script>

<script type="text/plain" data-cmp-service="Yandex.Metrika">
  console.log("Код сервиса Yandex.Metrika");
</script>
JavaScript API

После инициализации модуль создаёт глобальный объект с текущим consent-state, картой готовности категорий и удобными подписками на события.

Поле / метод Назначение
version Версия JS-модуля.
type Тип интеграции. В script-версии устанавливается как script.
domain Домен проекта из ответа конфигурации.
projectId ID проекта из конфигурации.
consent Текущий объект согласия
{ necessary, statistic, marketing }
readyState Готовность категорий и сервисов:
necessary, statistic, marketing, services
getConsent() Возвращает текущее состояние consent.
setConsent(status, options) Меняет состояние согласия в модуле и генерирует события, если silent !== true.
onConsentChange(fn) Подписка на смену consent через callbacks.
onCategoryReady(category, fn) Вызывает fn, когда категория активирована.
onServiceReady(service, fn) Вызывает fn, когда активируется конкретный сервис.
setConsent() в публичном API меняет только состояние на клиенте и события. Сохранение cookies и отправка consent на сервер выполняются внутренним submitConsent() при пользовательском выборе в баннере.

Пример использования

window.SoglasiusCMP.onCategoryReady("statistic", () => {
  console.log("Статистические скрипты уже можно запускать");
});

window.SoglasiusCMP.onServiceReady("Yandex.Metrika", () => {
  console.log("Сервис Yandex.Metrika активирован");
});

window.SoglasiusCMP.onConsentChange((next, prev) => {
  console.log("Consent changed", { prev, next });
});

const consent = window.SoglasiusCMP.getConsent();
console.log(consent.statistic);
Если категория или сервис уже готовы в момент подписки, onCategoryReady() и onServiceReady() выполняют callback сразу, без ожидания DOM-событий.
События

Модуль рассылает нативные CustomEvent-события на document. Это удобно для интеграций, которым не нужен прямой вызов методов CMP.

SoglasiusConsentChanged

Содержит detail: { next, prev }. Вызывается при изменении consent через setConsent() без silent: true.

SoglasiusCategoryEnabled

Содержит detail: { category }. Вызывается после активации deferred-скриптов категории.

SoglasiusServiceEnabled

Содержит detail: { service }. Вызывается после активации deferred-скриптов сервиса.

Пример использования

document.addEventListener("SoglasiusConsentChanged", (event) => {
  console.log(event.detail.next, event.detail.prev);
});

document.addEventListener("SoglasiusCategoryEnabled", (event) => {
  console.log("Category enabled:", event.detail.category);
});

document.addEventListener("SoglasiusServiceEnabled", (event) => {
  console.log("Service enabled:", event.detail.service);
});
Cookies и период хранения

Cookie Назначение
soglasius_consent JSON с полями necessary, statistic, marketing.
soglasius_hash Hash из ответа sendConsent/, привязанный к серверной записи согласия.

Логика хранения на клиенте

UF_PERIOD = "session" сохраняет consent до конца сессии браузера.

UF_PERIOD = "days" использует UF_STORAGE_TIME как срок жизни cookies.

UF_PERIOD = "always" не сохраняет решение в cookie, поэтому баннер будет переинициализироваться на новых визитах.

Если soglasius_hash оказался строкой "null", модуль очищает cookies и запускает инициализацию заново.

Конфигурация

Основная логика баннера полностью управляется ответом getConfig. Ниже поля, которые напрямую влияют на поведение модуля.

Поле Как влияет
UF_ACTIVE Включает или полностью выключает инициализацию баннера.
UF_TRIGGER / UF_TRIGGER_TIMER Определяют момент показа: onload, scroll, click или timer.
UF_PERIOD / UF_STORAGE_TIME Управляют временем хранения согласия и hash-cookie.
UF_ALLOW_SCRIPTS_BEFORE_CONSENT Если значение "1", statistic и marketing активируются сразу до выбора пользователя.
UF_SHOW_SETTINGS Показывает или скрывает иконку повторного открытия настроек.
UF_URL_MASK Позволяет не показывать CMP на определённых путях сайта.
UF_LAYOUT / UF_POSITION / UF_ANIMATION Управляют раскладкой баннера, положением на экране и анимацией появления.
UF_TITLE, UF_DESCRIPTION, UF_POLICY, UF_ACCEPT... Тексты интерфейса, кнопок и ссылки на policy.
UF_BG_COLOR, UF_ACCEPT_BG_COLOR, UF_BORDER_RADIUS... Влияют на CSS переменные внутри Shadow DOM и позволяют кастомизировать внешний вид без внешнего CSS.
Рекомендации

Что делать

  • Подключайте CMP как можно раньше в документе, чтобы сторонние теги не успевали стартовать до инициализации модуля.
  • Для аналитики и маркетинга используйте data-cmp-category или data-cmp-service, а не таймауты.
  • Подписывайтесь на onCategoryReady() или DOM-события, если интеграция зависит от момента активации.
  • Для обязательных скриптов используйте data-cmp-required="1".

Что учитывать

  • UI баннера живёт в Shadow DOM, поэтому прямые CSS-стили по внешним селекторам не сработают.
  • UF_ALLOW_SCRIPTS_BEFORE_CONSENT = "1" фактически даёт полный consent ещё до выбора пользователя.
  • setConsent() сам по себе не сохраняет согласие на сервер и не пишет cookies.
  • Если вы хотите жёсткую привязку логики к UI, ориентируйтесь на конфиг-поля, а не на внутренние DOM-узлы баннера.

Мы используем файлы cookie

Этот сайт использует cookie для корректной работы, аналитики и персонализации контента. Вы можете принять все или настроить использование cookie

Управляется через
На сайте используются обязательные файлы cookie, которые невозможно отключить. Они необходимы для корректной работы сайта и его функционала.

Настройки Cookie

Ваши текущие настройки использования cookie файлов

Управляется через