Настройка браузерных уведомлений 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка браузерных уведомлений 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1183
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка браузерных уведомлений 1С-Битрикс

Push-уведомления в браузере перестают работать в трёх типичных сценариях: сервер не отдаёт VAPID-ключи, воркер регистрируется с неверным scope, или подписка молча теряется при смене HTTPS-сертификата. В каждом из этих случаев пользователь просто не получает уведомления — без ошибок на фронте.

Как устроена подписка в Битриксе

Модуль push.sender реализует Web Push через стандарт VAPID. При первом заходе на сайт браузер регистрирует Service Worker из файла /bitrix/js/push-sender/sw/push-worker.js. Этот воркер подписывается на push-endpoint браузера (Google FCM, Mozilla Autopush или собственный для Safari). Полученный объект подписки (PushSubscription) сохраняется через AJAX-вызов к BX.PushServer.subscribe(), который записывает данные в таблицу b_push_sender_subscription.

Серверная часть хранит ключи VAPID в настройках модуля — таблица b_option, параметры push_server_public_key и push_server_private_key. При отправке уведомления используется метод \Bitrix\PushSender\Model\Subscription::send(), который обращается к классу \Bitrix\Main\Web\HttpClient для POST-запроса к push-endpoint.

Проблема со scope и путём воркера

Самая частая ошибка — Service Worker регистрируется с неправильным scope. Это происходит когда Битрикс установлен в подпапку, или когда в nginx стоит нестандартный alias. Воркер из /bitrix/js/... не может управлять страницами на /shop/, потому что scope по умолчанию равен директории, из которой загружен файл воркера.

Решение — явная передача параметра scope при регистрации. В файле /bitrix/js/push-sender/push-sender.js вызов navigator.serviceWorker.register() должен содержать:

navigator.serviceWorker.register('/bitrix/js/push-sender/sw/push-worker.js', {
    scope: '/'
});

Если файл воркера находится в /bitrix/, а scope нужен на /, сервер обязан отдавать заголовок Service-Worker-Allowed: / для этого JS-файла. В nginx это добавляется через add_header для location с путём к воркеру.

VAPID-ключи и их пересоздание

При смене домена или перемиграции сайта старые VAPID-ключи в b_option остаются, но все существующие подписки в b_push_sender_subscription становятся невалидными — браузер их отклоняет с 410 Gone. Битрикс не очищает таблицу автоматически.

Правильная процедура пересоздания ключей:

// Генерация новой пары VAPID
$keys = \Bitrix\PushSender\Security\VapidKey::generateKeyPair();
\Bitrix\Main\Config\Option::set('push.sender', 'push_server_public_key', $keys['publicKey']);
\Bitrix\Main\Config\Option::set('push.sender', 'push_server_private_key', $keys['privateKey']);

// Очистка устаревших подписок
\Bitrix\PushSender\Model\SubscriptionTable::deleteByFilter([]);

После этого все активные пользователи при следующем визите автоматически переподпишутся — браузер получит новый публичный ключ и создаст новую подписку.

Сегментация и отправка

Модуль поддерживает отправку по пользователям (USER_ID), по сессиям и широковещательно. Для программной отправки используется:

\Bitrix\PushSender\MessageSender::send(
    \Bitrix\PushSender\MessageSender::TYPE_PUSH,
    [
        'USER_ID' => [15, 42],
        'MESSAGE' => 'Ваш заказ отправлен',
        'TITLE' => 'Обновление заказа',
        'URL' => '/personal/orders/123/',
    ]
);

Метод send() итерирует подписки из b_push_sender_subscription по переданным USER_ID и ставит задачи в очередь агентов — таблица b_agent, агент \Bitrix\PushSender\Agent\SendMessageAgent.

Диагностика через логи

Для отладки включается лог в настройках модуля push.sender: параметр log_level в b_option. При значении debug все запросы к push-endpoints пишутся в /bitrix/modules/push.sender/logs/. Типичные коды ответов: 201 — доставлено, 404 — endpoint не существует, 410 — подписка удалена пользователем, 429 — rate limit на стороне FCM.

При массовых 410 нужно чистить b_push_sender_subscription через фильтр по дате последнего неудачного ответа — иначе агент будет вхолостую гонять устаревшие записи при каждом запуске.