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

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

Налаштування триггера залишеного перегляду товару 1С-Bitrix

Користувач відкрив карточку товару, провів на ній 40 секунд і пішов без додавання в кошик. Це гарячий ліда: інтерес був, рішення не прийнято. Триггер залишеного перегляду фіксує цей момент і запускає автоматизацію — лист, push або завдання менеджеру. В Bitrix це реалізується через модуль 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;

Реалізація через агент Bitrix

Стандартний механізм — агент у b_agent, який запускається кожні 15–30 хвилин. Агент перевіряє таблицю b_catalog_viewed_product, знаходить кандидатів за умовами вище, і для кожного створює подію в маркетинговій автоматизації або надсилає лист.

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 (Bitrix24 On-Premise) триггери створюються через інтерфейс «Автоматизація → Триггери». Для кастомного триггера потрібно зареєструвати клас-спадкоємець \Bitrix\Marketing\Automation\Trigger\BaseTrigger і прописати його в b_marketing_trigger. Триггер приймає PRODUCT_ID та FUSER_ID, будує сегмент, і запускає сценарій розсилки.

Якщо Bitrix24 не використовується, альтернатива — модуль 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-сповіщення з даними про переглянутий товар
  • Логіку виключення користувачів, які вже додали товар в кошик або купили його