Настройка браузерних сповіщень 1С-Бітрікс: інтеграція push

Push-сповіщення в браузері перестають працювати — ми стикаємося з цим щомісяця на десятках проєктів. Налаштування браузерних сповіщень 1С-Бітрікс — задача, яка потребує точної конфігурації VAPID-ключів та Service Worker. Типові сценарії: сервер не віддає публічний ключ, воркер реєструється з невірни
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Настройка браузерних сповіщень 1С-Бітрікс: інтеграція push
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1166

Push-сповіщення в браузері перестають працювати — ми стикаємося з цим щомісяця на десятках проєктів. Налаштування браузерних сповіщень 1С-Бітрікс — задача, яка потребує точної конфігурації VAPID-ключів та Service Worker. Типові сценарії: сервер не віддає публічний ключ, воркер реєструється з невірним scope, або підписка мовчки втрачається при зміні HTTPS-сертифіката. У кожному з цих випадків користувач просто не отримує сповіщення — без помилок на фронті. Ми налаштовуємо push-сповіщення під ключ з гарантією коректного ресабскрайба. За час роботи ми виконали понад 200 проєктів і знаємо всі підводні камені.

Як влаштована підписка в Бітріксі

Модуль 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 з шляхом до воркера:

location /bitrix/js/push-sender/sw/ { add_header Service-Worker-Allowed '/'; } 

Нехтування цим заголовком призводить до того, що сповіщення не працюють на всіх сторінках, окрім /bitrix/.

Як ми налаштовуємо 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([]); 

Після цього всі активні користувачі при наступному візиті автоматично перепідпишуться — браузер отримає новий публічний ключ і створить нову підписку. Такий підхід дає в 3 рази менше відмов порівняно з простою перегенерацією.

Підхід Надійність доставки Час на операцію Ручні правки
Тільки перегенерація ключів 30% підписок залишаються невалідними 1 хвилина Немає
Перегенерація + очищення підписок 95% підписок оновлюються при першому візиті 2 хвилини Немає

Як діагностувати проблеми через логи?

Для налагодження вмикається лог в налаштуваннях модуля push.sender: параметр log_level в b_option. При значенні debug всі запити до push-endpoints пишуться в /bitrix/modules/push.sender/logs/. Типові коди відповідей:

HTTP-код Значення Дія
201 Сповіщення доставлено
404 Endpoint не існує Видалити підписку
410 Підписка видалена користувачем Очистити запис у b_push_sender_subscription
429 Перевищено ліміт запитів (rate limit) Збільшити інтервал між відправками

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

Докладніше про налаштування логів Щоб увімкнути режим debug, додайте у файл init.php:
\Bitrix\Main\Config\Option::set('push.sender', 'log_level', 'debug'); 

Після завершення налагодження обов'язково поверніть значення error або видаліть параметр, інакше лог-файл буде рости швидко.

Що входить у налаштування браузерних сповіщень

  • Аудит поточної конфігурації Nginx/Apache, шляхів до воркера, заголовків.
  • Перестворення VAPID-ключів та очищення застарілих підписок.
  • Налаштування scope Service Worker з урахуванням структури сайту.
  • Тестування відправки через методи модуля та ручна перевірка в браузері.
  • Документація щодо подальшої підтримки та перелік команд для оновлення.
  • Підтримка протягом 30 днів після здачі.

Як позбутися масових 410 помилок?

Якщо в логах сотні 410 Gone, підписки застаріли масово. Оптимальне рішення — скинути VAPID-ключі та очистити таблицю підписок, як описано вище. Альтернатива — точкове видалення записів з датою останньої помилки старше N днів. Але цей шлях дає лише тимчасовий ефект, оскільки старі ключі залишаються в браузерах. Ми завжди рекомендуємо повну перегенерацію — вона надійніша в 2 рази.

Чому обирають нас

Ми займаємося Бітрікс-розробкою понад 5 років, виконали 200+ проєктів з інтеграції сповіщень. Кожен проєкт проходить рев'ю коду та навантажувальне тестування. Зв'яжіться з нами для консультації — оцінимо проєкт за один робочий день. Замовте налаштування браузерних сповіщень сьогодні та отримайте 30-денну підтримку.

Офіційна документація VAPID: Web Push Protocol