Настройка триггера брошенного просмотра категории 1С-Битрикс
Просмотр категории — слабый сигнал намерения, но при серии таких просмотров без перехода в товар это уже паттерн нерешительности. Пользователь трижды заходил в «Ноутбуки», не открывал конкретные товары и уходил. Триггер на брошенный просмотр категории позволяет реагировать на этот паттерн и подтолкнуть к выбору через персонализированную коммуникацию.
Проблема: просмотры категорий не пишутся в стандартные таблицы
В отличие от товаров, история просмотров разделов каталога в Битрикс не ведётся из коробки. Таблица b_catalog_viewed_product хранит только продукты. Категории каталога — это b_iblock_section, и никакого аналога CCatalogViewedProduct для разделов нет.
Это означает: нужно самостоятельно фиксировать факт просмотра раздела. Точка входа — компонент bitrix:catalog.section или bitrix:catalog.section.list. В шаблоне компонента или через result_modifier.php добавляется AJAX-запрос на собственный endpoint при загрузке страницы.
Хранение истории просмотров категорий
Создаём собственную таблицу через ORM Битрикс:
// Класс таблицы через D7
class ViewedSectionTable extends \Bitrix\Main\ORM\Data\DataManager
{
public static function getTableName(): string
{
return 'bl_catalog_viewed_section';
}
public static function getMap(): array
{
return [
new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new \Bitrix\Main\ORM\Fields\IntegerField('FUSER_ID', ['required' => true]),
new \Bitrix\Main\ORM\Fields\IntegerField('SECTION_ID', ['required' => true]),
new \Bitrix\Main\ORM\Fields\StringField('SITE_ID', ['size' => 2]),
new \Bitrix\Main\ORM\Fields\DatetimeField('DATE_VISIT'),
];
}
}
При каждом хите на страницу раздела — ViewedSectionTable::add() с FUSER_ID из CSaleUser::GetAnonymousUserID() или реальным USER_ID при авторизации.
Определение «брошенности» категории
Логика сложнее, чем для товара. Варианты критериев:
-
Простой: пользователь просматривал раздел X, но не перешёл ни в один товар из него (нет записи в
b_catalog_viewed_productс товаром из этого раздела за тот же период) - Поведенческий: пользователь 2+ раза за 24 часа открывал один и тот же раздел без покупки — признак нерешительности, нужна помощь в выборе
-- Пользователи, дважды смотревшие один раздел за сутки без покупки
SELECT fuser_id, section_id, COUNT(*) as visits
FROM bl_catalog_viewed_section
WHERE date_visit > NOW() - INTERVAL '24 hours'
GROUP BY fuser_id, section_id
HAVING COUNT(*) >= 2;
Персонализация контента триггера
Для триггера на категорию имеет смысл не просто напомнить «вы смотрели раздел», а показать топ-3 товара из этой категории. Выборка строится через CIBlockElement::GetList() с фильтром по SECTION_ID и сортировкой по полю CATALOG_QUANTITY или по количеству заказов из b_sale_order_basket.
Если в системе настроена система рекомендаций (модуль ml или сторонний сервис), можно запрашивать персональные рекомендации по FUSER_ID для конкретного SECTION_ID.
Агент и дедупликация
Аналогично триггеру на товар: агент в b_agent с интервалом 20–30 минут. Таблица дедупликации bl_abandoned_section_sent с уникальным ключом на (fuser_id, section_id, DATE(sent_at)) — не чаще одного срабатывания в сутки для одной пары.
Важный нюанс для многоуровневого каталога: если пользователь просматривал подраздел «Игровые ноутбуки» (дочерний от «Ноутбуки»), триггер не должен срабатывать дважды — на дочерний и родительский раздел. Решение: при поиске дублей подниматься по дереву разделов через b_iblock_section.IBLOCK_SECTION_ID и проверять, не было ли уже отправки по родительскому разделу.
Что настраиваем
- Создание таблицы
bl_catalog_viewed_sectionчерез миграцию ORM - AJAX-вызов записи просмотра из шаблона компонента
bitrix:catalog.section - Агент с логикой определения брошенных просмотров
- Запрос топ-товаров категории для подстановки в коммуникацию
- Таблицу дедупликации с учётом иерархии разделов
- Механизм исключения пользователей, уже купивших товар из этой категории







