Налаштування тригерних push-повідомлень 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування тригерних push-повідомлень 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

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

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

Налаштування спусказних push-повідомлень у 1С-Bitrix

Спусказні push-повідомлення відрізняються від сегментованих розсилок однією речею: вони відправляються автоматично у відповідь на конкретну дію користувача, а не за розписанням. Заброшений кошик через 2 години, зниження ціни на переглянутий товар, поступлення в продаж позиції з вішліста — це спусказні сценарії. Правильно налаштовані, вони дають ROI 500–1500%.

Архітектура подій у Bitrix

Спусказні push будуються на модель подій Bitrix. Кожна подія в системі — потенційний спусковий механізм. Схема роботи:

  1. Відбувається подія (додавання в кошик, перегляд товару, зміна статусу замовлення)
  2. Обробник подій перевіряє умови сценарію
  3. Якщо умови виконані — задача на надсилання push відкладається в чергу з затримкою
  4. Агент Bitrix обробляє чергу і надсилає повідомлення

Черга задач зберігається в таблиці:

CREATE TABLE custom_push_queue (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    scenario VARCHAR(50) NOT NULL,
    payload JSON,
    send_at DATETIME NOT NULL,
    status ENUM('pending', 'sent', 'cancelled') DEFAULT 'pending',
    created_at DATETIME,
    INDEX idx_send_at (send_at, status),
    INDEX idx_user_scenario (user_id, scenario)
);

Ключові сценарії

Заброшений кошик — найцінніший сценарій. Логіка:

// Обробник OnSaleBasketItemSaved
AddEventHandler('sale', 'OnSaleBasketItemSaved', function($basketItem) {
    $userId = (int)$basketItem->getField('USER_ID');
    if (!$userId) return; // Тільки авторизовані

    // Скасовуємо попередню задачу для цього користувача
    PushQueueTable::cancelByUserAndScenario($userId, 'abandoned_cart');

    // Ставимо нову — через 2 години
    PushQueueTable::add([
        'USER_ID' => $userId,
        'SCENARIO' => 'abandoned_cart',
        'PAYLOAD' => json_encode(['cart_url' => '/cart/']),
        'SEND_AT' => new \Bitrix\Main\Type\DateTime(date('Y-m-d H:i:s', time() + 7200)),
        'STATUS' => 'pending',
        'CREATED_AT' => new \Bitrix\Main\Type\DateTime(),
    ]);
});

Коли користувач оформив замовлення — задача скасовується. Коли не оформив — через 2 години приходить push.

Зниження ціни на переглянутий товар — вимагає історії переглядів і моніторингу змін цін:

// При зміні ціни торгового пропозиції (OnBeforeIBlockElementUpdate)
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function(&$fields) {
    $elementId = (int)$fields['ID'];
    $newPrice = getElementPrice($elementId);

    // Знаходимо користувачів, що переглядали цей товар
    $viewers = ProductViewHistoryTable::getUsersByProduct($elementId, 30); // за 30 днів

    foreach ($viewers as $viewer) {
        $oldPrice = ProductPriceHistoryTable::getLastPrice($elementId, $viewer['USER_ID']);
        if ($newPrice < $oldPrice * 0.9) { // Знижка 10%+
            PushQueueTable::add([
                'USER_ID' => $viewer['USER_ID'],
                'SCENARIO' => 'price_drop',
                'PAYLOAD' => json_encode(['product_id' => $elementId, 'new_price' => $newPrice]),
                'SEND_AT' => new \Bitrix\Main\Type\DateTime(), // Одразу
                'STATUS' => 'pending',
            ]);
        }
    }
});

Поступлення в наявність — через обробник зміни кількості в b_catalog_store_product або при синхронізації з 1С.

Статус замовлення — обробник подій OnSaleStatusOrderChange. Push відправляється одразу при кожній зміні статусу.

Агент обробки черги

Агент Bitrix запускається щохвилини:

function ProcessPushQueue(): string {
    $now = new \Bitrix\Main\Type\DateTime();

    $records = PushQueueTable::getList([
        'filter' => ['=STATUS' => 'pending', '<=SEND_AT' => $now],
        'limit' => 100,
    ]);

    while ($record = $records->fetch()) {
        $tokens = PushTokenTable::getByUserId($record['USER_ID']);
        if (!empty($tokens)) {
            $message = PushScenario::buildMessage($record['SCENARIO'], json_decode($record['PAYLOAD'], true));
            PushSender::send($tokens, $message);
        }
        PushQueueTable::update($record['ID'], ['STATUS' => 'sent']);
    }

    return __FUNCTION__ . '();';
}

Дедублікація і розумне розписання

Без дедублікації користувач отримає три push за годину. Правила:

  • Один сценарій — не частіше разу на 24 години на користувача
  • Не надсилати push з 23:00 до 09:00 (за часовим поясом користувача)
  • Якщо користувач уже купив після події — скасувати задачу

Часовий пояс користувача з його профілю або геолокації при реєстрації.

Сроки виконання

Обсяг робіт Строк
Заброшений кошик + зміна статусу 2–3 дні
Зниження ціни + поступлення в наявність +2 дні
Дедублікація + часові пояси + аналітика +1–2 дні

Кожен робочий спусказний сценарій — це автоматизований продавець, який не бере зарплату.