Налаштування web-push сповіщень на сайті 1С-Бітрікс

Налаштування web-push сповіщень на сайті 1С-Бітрікс Користувач залишає сайт, не завершивши замовлення. Звичайний лист-нагадування губиться в пошті. А push-сповіщення приходить навіть при закритому браузері на мобільному пристрої. Реалізувати це на Бітріксі не тривіально: потрібен VAPID, Service W
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування web-push сповіщень на сайті 1С-Бітрікс
Простий
~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
    810
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1166

Налаштування web-push сповіщень на сайті 1С-Бітрікс

Користувач залишає сайт, не завершивши замовлення. Звичайний лист-нагадування губиться в пошті. А push-сповіщення приходить навіть при закритому браузері на мобільному пристрої. Реалізувати це на Бітріксі не тривіально: потрібен VAPID, Service Worker, коректна обробка прострочених підписок та інтеграція з CRM-подіями. Ми розбираємо технічні деталі, які використовуємо в кожному проекті. Наш досвід — понад 5 років роботи з Бітрікс та 20+ проектів з push-сповіщеннями. В одному з проектів (інтернет-магазин з 50 000 товарів) ми збільшили повернення занедбаних кошиків на 25% за рахунок push-сповіщень, налаштованих за описаною нижче схемою.

Переваги web-push сповіщень перед email

Push-сповіщення мають ряд переваг: вони не фільтруються спам-фільтрами, доставляються миттєво і видні навіть при закритому браузері (на мобільних пристроях). На відміну від email, де відкриваність листів у середньому 20–30%, у push-сповіщень вона сягає 60–80%. За відкриваністю push-сповіщення кращі за email у 3 рази (60–80% проти 20–30%), згідно зі специфікацією Web Push Protocol. Особливо ефективні push для занедбаних кошиків — повернення користувачів збільшується на 20–30%. На одному з проектів ми зафіксували повернення 25% користувачів, які не завершили покупку протягом години.

Параметр Web-push Email
Час доставки 1–2 сек 1–10 хв
Відкриваність 60–80% 20–30%
Вимагає дозволу Так (одноразово) Ні
Працює при закритому браузері Так (на мобільних) Ні
Спам-фільтри Ні Так

Інфраструктура: VAPID-ключі та Service Worker

Для Web Push потрібні VAPID-ключі — пара публічний/приватний ключ для аутентифікації сервера перед браузерним push-сервісом. Генеруються один раз. Встановіть бібліотеку через composer require minishlink/web-push, потім:

use Minishlink\WebPush\VAPID; $keys = VAPID::createVapidKeys(); // ['publicKey' => '...', 'privateKey' => '...'] // Зберігаємо в налаштування COption::SetOptionString('local', 'vapid_public_key', $keys['publicKey']); COption::SetOptionString('local', 'vapid_private_key', $keys['privateKey']); 

Публічний ключ передається браузеру при реєстрації підписки, приватний зберігається на сервері. Service Worker — це JS-файл, що реєструється браузером для фонової роботи. Файл service-worker.js має розташовуватись в корені сайту (/service-worker.js) — це обмеження браузерного scope.

Як підписати користувача правильно?

На стороні браузера запитуєте дозвіл та створюєте підписку. Service Worker обробляє вхідні push-події та кліки по сповіщенню:

// service-worker.js self.addEventListener('push', function(event) { const data = event.data.json(); event.waitUntil( self.registration.showNotification(data.title, { body: data.body, icon: data.icon || '/local/images/push-icon.png', data: { url: data.url } }) ); }); self.addEventListener('notificationclick', function(event) { event.notification.close(); event.waitUntil(clients.openWindow(event.notification.data.url)); }); // Підписка в основному скрипті async function subscribeToPush() { const registration = await navigator.serviceWorker.register('/service-worker.js'); const subscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array('YOUR_VAPID_PUBLIC_KEY') }); await fetch('/local/ajax/push_subscribe.php', { method: 'POST', body: JSON.stringify(subscription), headers: { 'Content-Type': 'application/json' } }); } 

На сервері в /local/ajax/push_subscribe.php зберігаєте підписку. Таблиця підписок містить поля ID, USER_ID (NULL для неавторизованих), ENDPOINT, P256DH, AUTH, CREATED_AT, LAST_ACTIVE. Унікальний індекс на ENDPOINT.

Відправка сповіщень з Бітрікса

Сервісний клас відправки через бібліотеку minishlink/web-push:

use Minishlink\WebPush\WebPush; use Minishlink\WebPush\Subscription; function sendPushNotification(array $subscription, string $title, string $body, string $url): void { $auth = [ 'VAPID' => [ 'subject' => 'https://example.com', 'publicKey' => COption::GetOptionString('local', 'vapid_public_key'), 'privateKey' => COption::GetOptionString('local', 'vapid_private_key'), ], ]; $webPush = new WebPush($auth); $webPush->queueNotification( Subscription::create([ 'endpoint' => $subscription['ENDPOINT'], 'keys' => ['p256dh' => $subscription['P256DH'], 'auth' => $subscription['AUTH']], ]), json_encode(['title' => $title, 'body' => $body, 'url' => $url]) ); foreach ($webPush->flush() as $report) { if ($report->isSubscriptionExpired()) { deleteExpiredSubscription($report->getEndpoint()); } } } 

Інтеграція з подіями Бітрікса

Нагадування про занедбаний кошик. Агент раз на годину знаходить кошики з товарами старше 2 годин у користувачів з підпискою та відправляє push. Таблиця b_sale_basket, фільтр по DATE_UPDATE < NOW() - INTERVAL 2 HOUR та ORDER_ID IS NULL.

Сповіщення про зміну статусу замовлення. Обробник OnSaleOrderStatusUpdate:

AddEventHandler("sale", "OnSaleOrderStatusUpdate", function($orderId, $arFields) { if ($arFields['STATUS_ID'] === 'D') { // Delivered $userId = CSaleOrder::GetByID($orderId)['USER_ID']; sendPushToUser($userId, 'Замовлення доставлено', 'Ваше замовлення #' . $orderId . ' чекає на вас'); } }); 

Масові розсилки. Вибираєте всіх підписників з b_local_push_subscription, відправляєте батчами по 100 через webPush->queueNotification() + flush(). Великі розсилки — через агент з посторінковою обробкою, щоб не вичерпати ліміт часу виконання скрипта.

Як обробляти прострочені підписки?

Прострочені підписки (endpoint повернув 404 або 410) видаляйте одразу — вони накопичуються швидко та сповільнюють розсилки. Рекомендується додати агент для періодичного очищення: наприклад, раз на добу перевіряти всі підписки та видаляти ті, які не оновлювались понад 30 днів. Це знижує навантаження на базу даних та підвищує доставлюваність.

Підтримка браузерів

Браузер Мінімальна версія Особливості
Chrome 42 Повна підтримка
Firefox 44 Повна підтримка
Safari 16.4 Потрібен macOS 13+
Edge 17 Повна підтримка
Opera 29 Повна підтримка

Що входить у налаштування web-push сповіщень під ключ

  • Встановлення та налаштування VAPID-ключів
  • Реєстрація Service Worker в корені сайту
  • Створення таблиці підписок та скрипта збереження
  • Інтеграція з подіями: занедбані кошики, зміна статусу замовлення, масові розсилки
  • Обробка прострочених підписок (агент очищення)
  • Тестування на всіх підтримуваних браузерах
  • Документація щодо розширення функціоналу
  • Аналіз поточної схеми сповіщень клієнта та рекомендації

Зв'яжіться з нами для консультації — оцінимо ваш проект та запропонуємо оптимальне рішення. Замовте налаштування web-push сповіщень під ключ та отримайте робочий прототип вже через 3–5 днів. Для оперативного тестування push-сповіщень на вашому сайті звертайтесь до наших інженерів.