Настройка триггера брошенного просмотра товара 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка триггера брошенного просмотра товара 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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

Настройка триггера брошенного просмотра товара 1С-Битрикс

Пользователь открыл карточку товара, провёл на ней 40 секунд и ушёл без добавления в корзину. Это горячий лид: интерес был, решения не приняли. Триггер брошенного просмотра фиксирует этот момент и запускает автоматизацию — письмо, push или задачу менеджеру. В Битрикс это реализуется через модуль sale совместно с триггерами маркетинговой автоматизации в CRM или через собственный агент.

Где хранятся данные о просмотрах

Модуль catalog пишет историю просмотров в таблицу b_catalog_viewed_product. Структура: USER_ID, PRODUCT_ID, SITE_ID, DATE_VISIT. Таблица обновляется при каждом хите на детальную страницу через компонент bitrix:catalog.element — внутри него вызывается CCatalogViewedProduct::Add().

Анонимные пользователи записываются с USER_ID равным FUSER_ID из b_sale_fuser — это важно: поле в таблице b_catalog_viewed_product называется USER_ID, но для гостей туда пишется fake user ID, а не реальный b_user.ID.

Определение «брошенности»

Просмотр считается брошенным, если выполнены три условия: товар был просмотрен, в течение N минут после просмотра товар не был добавлен в корзину (b_sale_basket), и пользователь не оформил заказ с этим товаром (b_sale_order_basket). Временной порог — конфигурируемый параметр, обычно 30–60 минут.

Запрос для поиска брошенных просмотров за последние 2 часа:

SELECT v.USER_ID, v.PRODUCT_ID, v.DATE_VISIT
FROM b_catalog_viewed_product v
LEFT JOIN b_sale_basket b
    ON b.FUSER_ID = v.USER_ID
    AND b.PRODUCT_ID = v.PRODUCT_ID
    AND b.DATE_INSERT > v.DATE_VISIT
WHERE v.DATE_VISIT > NOW() - INTERVAL '2 hours'
  AND b.ID IS NULL;

Реализация через агент Битрикс

Стандартный механизм — агент в b_agent, который запускается каждые 15–30 минут. Агент проверяет таблицу b_catalog_viewed_product, находит кандидатов по условиям выше, и для каждого создаёт событие в маркетинговой автоматизации или отправляет email.

function AbandonedViewAgent(): string
{
    $cutoffTime = new \Bitrix\Main\Type\DateTime();
    $cutoffTime->add('-60 minutes');
    $thresholdTime = new \Bitrix\Main\Type\DateTime();
    $thresholdTime->add('-30 minutes');

    $viewed = \Bitrix\Catalog\ViewedProductTable::getList([
        'filter' => [
            '>=DATE_VISIT' => $cutoffTime,
            '<=DATE_VISIT' => $thresholdTime,
        ],
        'select' => ['USER_ID', 'PRODUCT_ID', 'DATE_VISIT'],
    ])->fetchAll();

    foreach ($viewed as $row) {
        // Проверяем, нет ли товара в корзине после просмотра
        $inBasket = \Bitrix\Sale\BasketTable::getList([
            'filter' => [
                'FUSER_ID'    => $row['USER_ID'],
                'PRODUCT_ID'  => $row['PRODUCT_ID'],
                '>=DATE_INSERT' => $row['DATE_VISIT'],
            ],
            'limit' => 1,
        ])->fetch();

        if (!$inBasket) {
            // Запускаем сценарий автоматизации
            \Bitrix\Marketing\Automation\Trigger\BaseTrigger::send(
                'CATALOG_ABANDONED_VIEW',
                ['PRODUCT_ID' => $row['PRODUCT_ID'], 'FUSER_ID' => $row['USER_ID']]
            );
        }
    }

    return 'AbandonedViewAgent();';
}

Интеграция с Marketing Automation

В модуле marketing (Битрикс24 On-Premise) триггеры создаются через интерфейс «Автоматизация → Триггеры». Для кастомного триггера нужно зарегистрировать класс-наследник \Bitrix\Marketing\Automation\Trigger\BaseTrigger и прописать его в b_marketing_trigger. Триггер принимает PRODUCT_ID и FUSER_ID, строит сегмент, и запускает сценарий рассылки.

Если Битрикс24 не используется, альтернатива — модуль subscribe: создать событие через \Bitrix\Main\Mail\Event::send() с типом письма CATALOG_ABANDONED_VIEW, в шаблоне которого подставляются данные товара из инфоблока.

Дедупликация срабатываний

Агент должен помнить, что уже обработал. Иначе каждый запуск будет заново находить те же записи. Решение: отдельная таблица bl_abandoned_view_sent с полями (fuser_id, product_id, sent_at). Перед отправкой — проверка наличия записи. Уникальный индекс на (fuser_id, product_id) защитит от дублей при параллельных запусках агента.

Что настраиваем

  • Регистрацию агента AbandonedViewAgent в b_agent с нужным интервалом
  • Запрос к b_catalog_viewed_product с учётом разницы FUSER/USER для анонимов
  • Таблицу дедупликации bl_abandoned_view_sent
  • Шаблон письма или push-уведомления с данными о просмотренном товаре
  • Логику исключения пользователей, уже добавивших товар в корзину или купивших его