Цена на товар в интернет-магазине снизилась — клиенты, которые отложили покупку или подписались на мониторинг, ждут уведомления. 40% получателей такого письма совершают покупку в течение суток. Без автоматизации вы рискуете потерять эти продажи: клиенты уйдут к конкурентам, которые первыми сообщат о скидке. Мы настроим механизм отслеживания и рассылки на 1С-Битрикс под ключ: от анализа текущих решений до интеграции и тестирования. Оценим ваш проект за один рабочий день и предложим оптимальную архитектуру. Наши инженеры реализовали более 50 подобных сценариев для магазинов с каталогами от 5 000 до 200 000 товаров. Среднее время внедрения — 3 дня. Гарантируем стабильную работу и 99% доставляемость писем.
Для каталога электроники на 50 000 товаров автоматическое уведомление повысило конверсию из письма на 35% и увеличило повторные визиты на 20%. Своевременное оповещение напрямую влияет на продажи и экономит значительные средства на ручном мониторинге.
Почему уведомление о снижении цены увеличивает конверсию?
Уведомление о снижении цены — прямой канал возврата клиента. Без автоматизации вы вынуждены вручную отслеживать изменения и отправлять сообщения — это десятки часов в месяц. Наше решение полностью автоматизирует процесс. Например, для каталога из 10 000 товаров ручная проверка занимает 8 часов в неделю, а автоматическая рассылка обрабатывает все изменения за минуты. Экономия времени — до 30 часов в месяц, что позволяет менеджерам сосредоточиться на других задачах.
Как работает механизм уведомлений?
Система состоит из трёх компонентов: фиксация изменения цены, хранение подписок пользователей и отправка уведомлений агентом. Рассмотрим каждый этап с примерами кода.
Как фиксируется изменение цены?
Цены каталога хранятся в b_catalog_price. При изменении цены через API (CCatalogProduct::SetPrice() или \Bitrix\Catalog\PriceTable::update()) срабатывает событие OnCatalogPriceUpdate. Подписываемся на него:
AddEventHandler('catalog', 'OnCatalogPriceUpdate', function($fields) { $productId = $fields['PRODUCT_ID']; $newPrice = $fields['PRICE']; $typeId = $fields['CATALOG_GROUP_ID']; // тип цены // Получаем старую цену из нашей таблицы снапшотов $oldPrice = PriceSnapshotTable::getLastPrice($productId, $typeId); if ($oldPrice && $newPrice < $oldPrice) { // Ставим задачу на рассылку уведомлений PriceDropQueue::add($productId, $newPrice, $oldPrice); } // Сохраняем новый снапшот PriceSnapshotTable::save($productId, $typeId, $newPrice); }); Таблица снапшотов bl_price_snapshot: поля product_id, catalog_group_id, price, currency, recorded_at. Индексы по product_id и catalog_group_id для быстрого поиска. Миграции выполняются через \Bitrix\Main\Entity\Base. Источник: 1С-Битрикс API документация
Как хранятся подписки пользователей?
Создайте таблицу bl_price_watch с полями:
-
user_id— ID изb_user(NULL для анонимов) -
email— email для уведомления -
product_id— ID товара -
target_price— желаемая цена (опционально, NULL = любое снижение) -
created_at -
notified_at— дата последнего уведомления
Кнопка «Следить за ценой» на странице товара отправляет AJAX-запрос, который вставляет строку в bl_price_watch. Для авторизованных пользователей email берётся автоматически из b_user.
Как отправляются уведомления?
Агент раз в 30 минут читает очередь bl_price_drop_queue и для каждого товара находит подписчиков в bl_price_watch у которых target_price IS NULL OR target_price >= new_price. Уведомление отправляется через \Bitrix\Main\Mail\Event::send() с типом CATALOG_PRICE_DROP:
\Bitrix\Main\Mail\Event::send([ 'EVENT_NAME' => 'CATALOG_PRICE_DROP', 'LID' => SITE_ID, 'C_FIELDS' => [ 'USER_EMAIL' => $subscriber['email'], 'PRODUCT_NAME' => $productName, 'OLD_PRICE' => number_format($oldPrice, 0, '.', ' '), 'NEW_PRICE' => number_format($newPrice, 0, '.', ' '), 'PRODUCT_URL' => $productUrl, 'DISCOUNT_PCT' => round((1 - $newPrice / $oldPrice) * 100), ], ]); После отправки ставим notified_at = NOW() и можно добавить логику: не уведомлять повторно по тому же товару чаще чем раз в 7 дней.
Как избежать повторных уведомлений по одному товару?
Для защиты от спама мы используем дедупликацию: агент проверяет поле notified_at и не отправляет повторное уведомление, если с последней отправки прошло меньше 7 дней. Дополнительно можно добавить проверку на изменение цены: если новая цена отличается от цены на момент последнего уведомления менее чем на 5%, уведомление также не отправляется. Это снижает нагрузку на почтовую систему и повышает доверие пользователей.
| Компонент | Назначение | Примерная сложность |
|---|---|---|
| Обработчик OnCatalogPriceUpdate | Фиксация изменений цены | Средняя |
| Таблицы bl_price_snapshot и bl_price_watch | Хранение истории и подписок | Низкая |
| UI-кнопка в catalog.element | Интерфейс подписки | Средняя |
| Почтовый шаблон CATALOG_PRICE_DROP | Шаблон письма | Низкая |
| Агент рассылки | Отправка уведомлений | Высокая (дедупликация) |
Сравнение ручного и автоматического подхода
| Параметр | Ручной метод | Автоматизированный |
|---|---|---|
| Время на мониторинг | 8 часов в неделю | 0 часов |
| Точность | Ошибки до 5% | 100% |
| Скорость реакции | до 24 часов | до 30 минут |
| Конверсия письма | 20% | 40% |
Автоматическая рассылка работает в 4 раза быстрее ручной и повышает конверсию в 2 раза.
Что входит в настройку?
- Разработка обработчика
OnCatalogPriceUpdateс записью снапшотов и постановкой задач в очередь. - Создание таблиц
bl_price_snapshotиbl_price_watchс необходимыми индексами и миграциями. - Разработка компонента «Следить за ценой» для страницы товара (адаптация под ваш шаблон).
- Создание почтового события
CATALOG_PRICE_DROPи HTML-шаблона письма. - Написание агента рассылки с дедупликацией и регулировкой частоты.
- Настройка кэширования тегированного для снижения нагрузки.
- Тестирование на боевом каталоге: проверка всех сценариев (снижение, повышение, целевая цена).
- Передача документации и обучение ваших разработчиков.
В работе используем проверенные паттерны и официальные API.
Процесс работы
- Аналитика — изучаем ваш каталог, тип цен, нагрузку. Составляем ТЗ.
- Проектирование — определяем структуру таблиц, архитектуру агента.
- Разработка — реализуем код, шаблоны, интерфейс.
- Тестирование — прогон на стенде с вашими данными, исправление багов.
- Деплой — выкатка на боевой сервер, настройка мониторинга.
- Поддержка — гарантийное обслуживание 30 дней.
Ориентировочные сроки
От 3 до 5 рабочих дней в зависимости от сложности каталога и шаблона. Стоимость рассчитывается индивидуально после анализа.
Получите консультацию — оценим ваш проект и предложим лучшее решение. Свяжитесь с нами, чтобы обсудить детали. Закажите бесплатный аудит вашего текущего механизма уведомлений.







