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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка триггерных push-уведомлений 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

Триггерные push-уведомления отличаются от сегментированных рассылок одним: они отправляются автоматически в ответ на конкретное действие пользователя, а не по расписанию. Брошенная корзина через 2 часа, снижение цены на просмотренный товар, поступление в продажу позиции из вишлиста — это и есть триггерные сценарии. Правильно настроенные, они дают ROI 500–1500%.

Событийная архитектура в Битрикс

Триггерные push строятся на событийной модели Битрикс. Каждое событие в системе — потенциальный триггер. Схема работы:

  1. Происходит событие (добавление в корзину, просмотр товара, изменение статуса заказа)
  2. Обработчик события проверяет условия сценария
  3. Если условия выполнены — задача на отправку push откладывается в очередь с задержкой
  4. Агент Битрикс обрабатывает очередь и отправляет уведомления

Очередь задач хранится в таблице:

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 отправляется немедленно при каждом изменении статуса.

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

Агент Битрикс запускается каждую минуту:

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 до 9:00 (по таймзоне пользователя)
  • Если пользователь уже купил после события — отменить задачу

Таймзона пользователя берётся из его профиля или геолокации при регистрации.

Сроки выполнения

Объём работ Срок
Брошенная корзина + изменение статуса 2–3 дня
Снижение цены + поступление в наличие +2 дня
Дедупликация + таймзоны + аналитика +1–2 дня

Каждый рабочий триггерный сценарий — это автоматизированный продавец, который не берёт зарплату.