Пользовательские соглашения
Пользовательские соглашения запрашивают согласия на обработку персональных данных, использование cookie, подключение аналитики и другие действия, которые требуют согласия по закону.
Система не позволяет удалять записи о полученных согласиях. Это юридическое требование законодательства.
Открыть список соглашений
В административном разделе проекта перейдите на страницу Настройки > Настройки продукта > Соглашения.

В таблицу можно добавить колонку с идентификатором соглашения.
-
Нажмите иконку шестеренки.
-
В форме отметьте
IDи сохраните.

Создать соглашение
На странице Соглашения нажмите Добавить и заполните форму.

Выбрать тип соглашения
-
Стандартное — в готовом тексте можно изменить отдельные блоки: название и адрес компании.
-
Собственное — позволяет создать соглашение с собственным текстом.

Указать внешнюю ссылку на текст соглашения
Для собственного соглашения можно указать ссылку на текст соглашения, если текст размещен на веб-странице или в файле.
-
В форме соглашения оставьте пустым поле Текст соглашения.
-
Перейдите в раздел Подпись и поведение.
-
В поле Подпись галки согласия заключите в символы
%часть текста, которая будет ссылкой. Если символы%не указаны, вся подпись является ссылкой. -
Отметьте опцию При клике на ссылку открывать стороннюю ссылку или файл.
-
Укажите URL страницы или файла.

Настроить дополнительные параметры
Для соглашений типа Стандартное можно настроить дополнительные параметры.
-
Источник данных — выберите источник, откуда брать данные компании для соглашения.
-
Email-адрес для жалоб — задайте контактный адрес. Если поле оставить пустым, используется значение из настроек главного модуля.
Подключить соглашение к собственному компоненту
В системных компонентах вывод соглашений предусмотрен по умолчанию.
В собственных компонентах соглашения нужно подключить вручную, если запрашиваете персональные данные или используете cookie. В результате система отобразит флажок и сохранит согласие.
Чтобы подключить соглашение, используйте параметр USER_CONSENT.
Добавить параметр в настройки компонента
В файле параметров компонента .parameters.php объявите параметр 'USER_CONSENT' => [].
<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true)
{
die();
}
$arComponentParameters = [
'GROUPS' => [
],
'PARAMETERS' => [
'AJAX_MODE' => [],
'USER_CONSENT' => [],
],
];
После этого в форме настроек компонента появится секция Согласие пользователя.
Вывести запрос согласия
Запрос согласия отображается с помощью компонента bitrix:main.userconsent.request. Компонент показывает флажок и окно с текстом соглашения.
Один экземпляр компонента показывает одно соглашение. Для нескольких соглашений используйте компонент main.userconsent.request несколько раз.
Простая форма с событием submit
В шаблоне собственного компонента подключите bitrix:main.userconsent.request перед кнопкой отправки формы.
<form method="POST">
<input name="EMAIL" placeholder="Email">
<input name="PHONE" placeholder="Телефон">
<input name="NAME" placeholder="Имя">
<br>
<? if ($arParams['USER_CONSENT'] === 'Y'): ?>
<? $APPLICATION->IncludeComponent(
'bitrix:main.userconsent.request',
'',
[
'ID' => $arParams['USER_CONSENT_ID'],
'IS_CHECKED' => $arParams['USER_CONSENT_IS_CHECKED'],
'IS_LOADED' => $arParams['USER_CONSENT_IS_LOADED'],
'AUTO_SAVE' => 'Y',
'REPLACE' => [
'button_caption' => 'Подписаться',
'fields' => ['Email', 'Телефон', 'Имя'],
],
]
); ?>
<? endif; ?>
<input type="submit" value="Подписаться">
</form>
Параметр REPLACE задает:
-
button_caption— текст кнопки в модальном окне, -
fields— список полей, которые попадут в текст соглашения.
Форма без события submit
Способ подходит, если система отправляет форму через AJAX или JavaScript-механизмы.
Компонент bitrix:main.userconsent.request ожидает событие, которое указано в параметре SUBMIT_EVENT_NAME. Когда событие возникает, появляется окно запроса согласия.
После подтверждения пользователем компонент генерирует событие BX.UserConsent.events.save. Обработчик события отправляет данные или выполняет действие.
<div id="my_container">
<input type="text" placeholder="Электронный адрес" name="EMAIL">
<input type="submit" id="fire_event" value="Отправить">
<br>
<? if ($arParams['USER_CONSENT'] === 'Y'): ?>
<? $APPLICATION->IncludeComponent(
'bitrix:main.userconsent.request',
'',
[
'ID' => $arParams['USER_CONSENT_ID'],
'IS_CHECKED' => $arParams['USER_CONSENT_IS_CHECKED'],
'IS_LOADED' => 'Y',
'AUTO_SAVE' => 'N',
'SUBMIT_EVENT_NAME' => 'my-event-name',
'REPLACE' => [
'button_caption' => 'Отправить',
'fields' => ['Электронный адрес'],
],
]
); ?>
<? endif; ?>
</div>
<script>
BX.ready(() => {
const submitBtn = BX('fire_event');
BX.bind(submitBtn, 'click', () => {
BX.onCustomEvent('my-event-name');
});
if (!BX.UserConsent)
{
return;
}
const control = BX.UserConsent.load(BX('my_container'));
if (!control)
{
return;
}
BX.addCustomEvent(
control,
BX.UserConsent.events.save,
(data) => {
console.log('js event:', 'save', data);
// Согласие получено — можно отправлять данные
// Например: BX.ajax.runAction(...)
}
);
});
</script>
Параметр AUTO_SAVE
В компоненте bitrix:main.userconsent.request есть параметр AUTO_SAVE.
-
AUTO_SAVE = 'Y'— согласие сохраняется автоматически после подтверждения. -
AUTO_SAVE = 'N'— согласие нужно сохранить самостоятельно. Для ручного добавления согласия используйте методaddByContext.\Bitrix\Main\UserConsent\Consent::addByContext( $arParams['USER_CONSENT_ID'] // идентификатор соглашения );Минимальный вызов сохраняет только факт согласия. Чтобы указать источник и пункты, передайте дополнительные параметры. Подробнее читайте ниже в разделе Добавить согласие через API.
Добавить нестандартный источник
Система сохраняет согласие вместе с источником. Он указывает:
-
название и ссылку на форму или страницу, где получено согласие,
-
тексты выбранных пользователем пунктов, например, Cookie, Яндекс Метрика.
Стандартные источники покрывают типовые сценарии: регистрация, заказ, подписка. Свой источник регистрируют для нестандартных случаев: виджета, встраиваемой формы.
Создать обработчик через CLI
Чтобы зарегистрировать собственный источник, добавьте обработчик события OnUserConsentProviderList. Для этого выполните CLI-команду:
php bitrix.php make:eventhandler —handler-module=my.module —event-module=main -m
Система создаст файл:
/local/modules/my.module/lib/Internals/Integration/Main/EventHandler/OnUserConsentProviderListEventHandler.php
Зарегистрировать источник
-
В файл
OnUserConsentProviderListEventHandler.phpдобавьте код регистрации источника. -
Каждый источник опишите четырьмя ключами.
-
CODE— уникальный идентификатор. По нему система находит источник при вызовеaddByContext. -
NAME— имя источника в административном разделе и логах. Необязательный, если название указывают вDATA. -
DATA— функция возвращает название и URL. Принимает параметр$id, который равенoriginIdизaddByContext. -
ITEMS— функция возвращает текст пункта по его значению$value.
-
<?php
namespace My\Module\Internals\Integration\Main\EventHandler;
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
final class OnUserConsentProviderListEventHandler
{
public static function handle(Event $event): EventResult
{
$parameters = [
[
'CODE' => 'my/activity',
'NAME' => 'My activity',
'DATA' => function ($id = null)
{
return [
'NAME' => 'My custom source',
'URL' => '/'
];
},
'ITEMS' => function ($value = null)
{
$items = [
'value1' => 'Cookie',
'value2' => 'Yandex.Metrika',
];
return $items[$value];
},
]
];
return new EventResult(
EventResult::SUCCESS,
$parameters,
'my.module',
);
}
}
Добавить согласие через API
-
Добавьте вызов метода
addByContext, например, в AJAX-обработчик. -
В метод передайте четыре аргумента:
-
$agreementId— идентификатор соглашения, -
$originatorId—CODEисточника из обработчика, -
$originId— идентификатор сущности, -
$params— массив с пунктами.
-
use Bitrix\Main\UserConsent\Consent;
$agreementId = 5; // идентификатор соглашения
$originatorId = 'my/activity'; // значение CODE из обработчика
$originId = 1; // идентификатор сущности, например, идентификатор формы
Consent::addByContext(
$agreementId,
$originatorId,
$originId,
[
'ITEMS' => [
['VALUE' => 'value1'],
['VALUE' => 'value2'],
],
]
);
После вызова addByContext система выполняет последовательность действий.
-
Находит соглашение по
$agreementId. -
Проверяет, разрешен ли источник
originatorId = 'my/activity'для соглашения. -
Передает
originId = 1в функциюDATA. -
Для каждого
VALUEвызываетITEMS, чтобы получить текст пункта. -
Создает запись в списке согласий.
Проверить согласия
-
Откройте страницу Настройки > Настройки продукта > Соглашения.
-
Найдите соглашение и нажмите Полученные согласия.

-
Убедитесь, что информация сохранена правильно.
