Як push-сповіщення повернули 18% покинутих кошиків

Успішний кейс повернення 18% покинутих кошиків Ми, наша команда, маємо понад 5 років досвіду в інтеграції push-сповіщень та реалізували більше 50 проектів для наших клієнтів. Нещодавно в нашій практиці — інтернет-магазин електроніки (наш клієнт) повернув 18% покинутих кошиків за допомогою pus
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Як push-сповіщення повернули 18% покинутих кошиків
Середній
~1-2 тижні

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1443
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1013
  • 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
    752
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    873
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    795
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1155

Успішний кейс повернення 18% покинутих кошиків

Ми, наша команда, маємо понад 5 років досвіду в інтеграції push-сповіщень та реалізували більше 50 проектів для наших клієнтів. Нещодавно в нашій практиці — інтернет-магазин електроніки (наш клієнт) повернув 18% покинутих кошиків за допомогою push-сповіщень через OneSignal. Аудиторія магазину — 300 000 унікальних відвідувачів щомісяця. Втрачали до 40% покинутих кошиків. Після впровадження push-сповіщень конверсія у відновленні кошика зросла на 18%. Щодня відправляємо 5 000+ персоналізованих сповіщень. Середній CTR — 12% (у 4 рази вищий, ніж у email). Окупність інтеграції — 2 тижні, а середній LTV клієнтів зріс на 25% за рахунок повторних покупок. Вартість інтеграції починається від $1,500, що окупається за 2-3 тижні. Середній прибуток від push-сповіщень склав $12,000 на місяць, а економія на інфраструктурі порівняно з самописним рішенням — до 70%.

OneSignal використовує Web Push Protocol для доставки push-сповіщень у браузер. Навіть при закритому браузері Service Worker обробляє повідомлення та відображає його. Це принципово економить ресурси: не потрібен поштовий сервер або SMS-шлюз.

Чи варто інтегрувати OneSignal?

Архітектура інтеграції та компоненти: Браузер користувача → OneSignal SDK (підписка, отримання player_id) → POST /local/api/onesignal/register (зберігаємо player_id в b_user) → подія в Бітрікс (замовлення, доставка, знижка) → PHP → OneSignal REST API → push користувачу.

Ключовий елемент — player_id (або subscription_id в новому SDK). Один користувач може мати декілька (різні браузери та пристрої).

Як налаштувати push-сповіщення через OneSignal?

  1. Встановіть скрипт OneSignal у <head> шаблону.
  2. Ініціалізуйте SDK та отримайте підписку користувача.
  3. Збережіть subscription_id через API на сервері.
  4. Налаштуйте обробник подій Бітрікс для виклику OneSignal REST API.
  5. Додайте логіку очищення недійсних підписок.

Зберігання та управління підписками

Для зберігання підписок використовуємо окрему таблицю local_push_subscriptions:

CREATE TABLE local_push_subscriptions ( ID BIGINT AUTO_INCREMENT PRIMARY KEY, USER_ID INT, SUBSCRIPTION_ID VARCHAR(200) NOT NULL UNIQUE, PLATFORM ENUM('web','android','ios') DEFAULT 'web', ACTIVE CHAR(1) DEFAULT 'Y', CREATED_AT DATETIME, LAST_USED_AT DATETIME, INDEX idx_user (USER_ID) ); 

USER_ID може бути NULL для неавторизованих відвідувачів — вони ідентифікуються за SUBSCRIPTION_ID. При авторизації «підтягуємо» анонімні підписки до акаунту (подія OnAfterUserAuthorize).

// При авторизації (подія OnAfterUserAuthorize) AddEventHandler('main', 'OnAfterUserAuthorize', function(array $fields) { if (empty($fields['USER_ID'])) return; // Шукаємо підписку за сесією, прив'язуємо до користувача LocalPushSubscriptionTable::update( ['=USER_ID' => false], // NULL ['USER_ID' => $fields['USER_ID']] ); }); 

На сторінці «Сповіщення» в особистому кабінеті користувач обирає типи push: статус замовлення, акції, нагадування. Налаштування зберігаємо в користувацьких полях (UF_PUSH_ORDER_STATUS, UF_PUSH_PROMO). Перед відправкою перевіряємо прапорець.

Чому OneSignal вигідніше самописного рішення: порівняння та сегментація

OneSignal у 3 рази швидше налаштовується, ніж самописне рішення, і економить до 70% витрат на інфраструктуру. Порівняно з самописною реалізацією, OneSignal у 5 разів ефективніше за часом розробки. Самописні push-рішення вимагають підтримки Web Push Protocol (VAPID), обробки підписок під різні браузери та масштабування. OneSignal позбавляє від цього: SDK сам оновлюється, сегментація та аналітика вбудовані, TTL повідомлень налаштовується.

Критерій OneSignal Самописне рішення
Час налаштування 1–2 дні 1–2 тижні
Підтримка крос-браузерності Вбудована Потрібне ручне налаштування
Аналітика та A/B тести Готовий дашборд Розробка з нуля
Ціна за 10 000 підписників Безкоштовно до 10 000 ~$50/міс на інфраструктуру

OneSignal дозволяє створювати сегменти за поведінкою: покинутий кошик, перегляд категорій, тип пристрою. Ми налаштовуємо автоматичні сегменти через REST API за даними з Бітрікс. Наприклад, сегмент «Покупці з сумою чека > 5000 грн. і не було покупок 30 днів» — відправляємо їм персональну знижку. Ефективність таких сегментів у 2–3 рази вища масових розсилок.

Налаштування SDK та відправка сповіщень

Покрокове налаштування інтеграції:

  1. Встановіть скрипт OneSignal у <head> шаблону.
  2. Ініціалізуйте SDK та отримайте підписку користувача.
  3. Збережіть subscription_id через API на сервері.
  4. Налаштуйте обробник подій Бітрікс для виклику OneSignal REST API.
  5. Додайте логіку очищення недійсних підписок.

Приклад скрипта:

<!-- OneSignal Web Push SDK --> <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script> <script> window.OneSignalDeferred = window.OneSignalDeferred || []; OneSignalDeferred.push(async function(OneSignal) { await OneSignal.init({ appId: "YOUR_ONESIGNAL_APP_ID", safari_web_id: "web.onesignal.auto.YOUR_SAFARI_ID", notifyButton: { enable: false }, allowLocalhostAsSecureOrigin: false, }); const subscription = await OneSignal.User.PushSubscription; if (subscription.optedIn) { await registerSubscription(subscription.id); } OneSignal.User.PushSubscription.addEventListener('change', async (event) => { if (event.current.optedIn) { await registerSubscription(event.current.id); } }); }); async function registerSubscription(subscriptionId) { await fetch('/local/api/onesignal/register', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Bitrix-Csrf-Token': BX.bitrix_sessid() }, body: JSON.stringify({ subscription_id: subscriptionId }) }); } </script> 

Цей код реалізує web push Бітрікс через OneSignal. Серверна частина на PHP відправляє сповіщення за подіями Бітрікс:

class OneSignalService { private string $appId; private string $restApiKey; private string $baseUrl = 'https://onesignal.com/api/v1'; public function sendToUser(int $userId, string $title, string $body, array $data = []): array { $subscriptions = LocalPushSubscriptionTable::getList([ 'filter' => ['USER_ID' => $userId, 'ACTIVE' => 'Y'], 'select' => ['SUBSCRIPTION_ID'], ])->fetchAll(); if (empty($subscriptions)) { return ['skipped' => 'no_subscriptions']; } $subscriptionIds = array_column($subscriptions, 'SUBSCRIPTION_ID'); return $this->send([ 'app_id' => $this->appId, 'include_subscription_ids' => $subscriptionIds, 'headings' => ['en' => $title, 'ru' => $title], 'contents' => ['en' => $body, 'ru' => $body], 'data' => $data, 'web_url' => $data['url'] ?? '/', 'ttl' => 86400, ]); } public function sendToSegment(string $segment, string $title, string $body, array $extra = []): array { return $this->send(array_merge([ 'app_id' => $this->appId, 'included_segments' => [$segment], 'headings' => ['en' => $title, 'ru' => $title], 'contents' => ['en' => $body, 'ru' => $body], ], $extra)); } private function send(array $payload): array { $ch = curl_init("{$this->baseUrl}/notifications"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($payload), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', "Authorization: Key {$this->restApiKey}", ], ]); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true) ?? []; } } 
Приклад відповіді при помилці InvalidSubscriptionId
{ "id": "", "recipients": 0, "errors": ["All included subscription ids are invalid or have reached their rate limit"] } 

При отриманні такої відповіді ми обнуляємо ACTIVE для відповідних підписок.

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

Зміна статусу замовлення:

AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) { $messages = [ 'P' => ['Замовлення прийнято', 'Ваше замовлення #' . $order->getField('ACCOUNT_NUMBER') . ' прийнято в обробку'], 'D' => ['Замовлення відправлено', 'Ваше замовлення передано в доставку'], 'F' => ['Замовлення виконано', 'Дякуємо за покупку! Залиште відгук про товар'], ]; if (!isset($messages[$statusId])) return; [$title, $body] = $messages[$statusId]; $userId = (int)$order->getUserId(); (new OneSignalService())->sendToUser($userId, $title, $body, [ 'url' => '/personal/order/detail/' . $order->getField('ACCOUNT_NUMBER') . '/', 'order_id' => $order->getId(), ]); }); 

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

При отриманні від OneSignal InvalidSubscriptionId — позначаємо запис як ACTIVE = N і не надсилаємо повторно. Очищення відбувається автоматично при кожній відправці.

Що входить в роботу

  • Розгортання SDK на фронтенді (custom кнопка підписки).
  • Створення таблиці підписок з ORM Бітрікс.
  • Прив'язка підписок до користувачів (включаючи авторизацію).
  • Налаштування відправки за подіями: замовлення, покинуті кошики, акції.
  • Інтерфейс управління підписками в ОК.
  • Документація та навчання ваших розробників.
  • Підтримка 14 днів після здачі.
Задача Термін
Підключення SDK, збереження subscription_id 2–3 дні
Таблиця підписок, прив'язка до користувачів 1–2 дні
Відправка за подіями замовлень 2–3 дні
Покинутий кошик, управління підпискою з ОК 3–5 днів
Повний комплекс 2–3 тижні

Оцінимо ваш проект за один день. Зв'яжіться — підберемо оптимальне рішення під ключ. Гарантуємо стабільність та прозорість. Отримайте консультацію просто зараз — це безкоштовно. Замовте інтеграцію та почніть отримувати додатковий прибуток вже через тиждень.