Настройка web-push уведомлений на сайте 1С-Битрикс

Настройка web-push уведомлений на сайте 1С-Битрикс Пользователь покидает сайт, не завершив заказ. Обычное письмо-напоминание теряется в почте. А push-уведомление приходит даже при закрытом браузере на мобильном устройстве. Реализовать это на Битриксе не тривиально: нужен VAPID, Service Worker, ко
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка web-push уведомлений на сайте 1С-Битрикс
Простой
~1 день

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

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    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-уведомлений на вашем сайте обращайтесь к нашим инженерам.