Настройка уведомления о поступлении товара 1С-Битрикс
Представьте: популярный товар закончился, и потенциальный покупатель уходит, не оставив контактов. Вы теряете продажи, а клиенты — нервы. Встроенного функционала уведомлений о поступлении в 1С-Битрикс нет — стандартный компонент «Подписка» не предусмотрен. Мы решаем эту задачу через кастомную разработку, используя отдельную таблицу подписок или модуль subscribe. Экономия на покупке готового модуля достигает $450–650, а срок окупаемости — менее месяца.
Почему стандартный модуль подписок не подходит?
Модуль subscribe предназначен для рассылок, и его адаптация под подписки на товары — компромисс. Каждый товар (или SKU) регистрируется как «рубрика», а подписка — как подписка на рубрику. При появлении остатков отправляется письмо вручную или через агент. Недостатки: отсутствие привязки к конкретному товару, сложность управления, риск дублирования писем. Для небольших магазинов с десятком товаров вариант приемлем, но для каталогов с тысячами позиций лучше использовать кастомная таблица подписок. В одном проекте мы столкнулись с ситуацией, когда модуль subscribe отправлял 3 одинаковых письма одному подписчику — из-за отсутствия уникальности. После миграции на кастомную таблицу проблема исчезла.
Как настроить уведомление о поступлении товара?
Вариант 1: Через модуль подписок
Модуль subscribe можно адаптировать, но это требует дополнительной логики. Пример: при смене остатков агент проверяет подписки на соответствующий товар и отправляет письма. Однако такой подход не даёт гибкости: нет возможности хранить дату отправки, статус, уникальность подписки. Времени на адаптацию уходит примерно столько же, сколько на кастомную таблицу, а результат — хуже.
Вариант 2: Кастомная таблица подписок
Это более правильное решение — создаётся отдельная таблица product_availability_notify с полями PRODUCT_ID, EMAIL, USER_ID, DATE_ADD, DATE_SENT, IS_SENT. Уникальность по паре товар-email исключает дубли. Форма подписки — простая HTML-форма с AJAX, появляется при QUANTITY = 0. При появлении остатков срабатывает обработчик события OnProductUpdate. Ссылка на официальную документацию события OnProductUpdate.
| Характеристика | Модуль subscribe | Кастомная таблица |
|---|---|---|
| Сложность реализации | Низкая | Средняя |
| Гибкость хранения | Низкая | Высокая |
| Уникальность подписок | Не гарантирована | Гарантирована |
| Возможность расширения | Ограничена | Полная |
Триггер отправки уведомлений
Событие OnProductUpdate из модуля catalog вызывается при изменении поля QUANTITY. В обработчике проверяем, если QUANTITY стал больше нуля, а раньше был нулём — выбираем всех подписчиков и отправляем письма через почтовое событие. Пример кода:
AddEventHandler('catalog', 'OnProductUpdate', function($productId, $fields) { if (isset($fields['QUANTITY']) && (float)$fields['QUANTITY'] > 0) { $subscribers = NotifyTable::getList([ 'filter' => ['=PRODUCT_ID' => $productId, '=IS_SENT' => false], ])->fetchAll(); foreach ($subscribers as $subscriber) { \Bitrix\Main\Mail\Event::send([ 'EVENT_NAME' => 'PRODUCT_AVAILABLE_NOTIFY', 'LID' => SITE_ID, 'C_FIELDS' => [ 'EMAIL' => $subscriber['EMAIL'], 'PRODUCT_NAME' => $fields['NAME'], 'PRODUCT_URL' => $fields['DETAIL_PAGE_URL'], ], ]); } NotifyTable::updateMulti(['IS_SENT' => true], ['PRODUCT_ID' => $productId]); } }); Шаблон письма
Шаблон почтового события создаётся в Настройки → Почтовые события → Типы событий. Тип события PRODUCT_AVAILABLE_NOTIFY с полями EMAIL, PRODUCT_NAME, PRODUCT_URL. Настройка занимает 1-2 часа.
Агент для периодической проверки
Если событие OnProductUpdate не срабатывает (например, остатки меняются не через стандартные методы), настраивается агент Битрикс, запускаемый раз в час. Он проверяет наличие остатков у товаров, на которые есть подписчики, и отправляет письма. Агент — надёжная альтернатива.
Какие ошибки возникают при настройке?
Ошибка №1: забывают очищать флаг IS_SENT при повторном появлении остатка. Если товар снова закончился и появился, подписчик должен получить второе уведомление. В кастомной таблице это решается сбросом флага при обнулении остатка. Ошибка №2: путаница с привязкой подписки к торговому предложению (SKU). Мы подписываемся на конкретный SKU, а не на родительский товар. Ошибка №3: неверный маппинг почтовых полей — письмо приходит с пустыми данными. Все эти ошибки мы исправляем в процессе тестирования.
Этапы настройки и трудозатраты
| Этап | Описание | Время (часы) |
|---|---|---|
| 1. Создание таблицы | Миграция для таблицы подписок | 1-2 |
| 2. Форма подписки | HTML + AJAX на странице товара | 2-3 |
| 3. Обработчик события | OnProductUpdate с проверкой остатков | 2-3 |
| 4. Почтовое событие | Создание типа и шаблона | 1-2 |
| 5. Тестирование | Проверка на 3-5 товарах | 1-2 |
| 6. Документация | Руководство по эксплуатации | 1 |
Что входит в работу?
- Форма подписки (HTML + AJAX) на странице товара
- Кастомная таблица подписок с миграцией
- Обработчик события
OnProductUpdate(или агент) - Почтовое событие и шаблон письма
- Документация по эксплуатации
- Обучение администратора (30 мин)
- Гарантия корректной работы 6 месяцев
Сроки и стоимость
Базовая настройка (форма + обработчик + письмо) — 4–8 часов. Если нужна страница управления подписками в личном кабинете — ещё 2–3 часа. Стоимость рассчитывается индивидуально в зависимости от сложности, но экономия от отказа от покупки готового модуля может превышать $450–650. Вы получаете стабильное решение с возможностью расширения.
Наш опыт: более 5 лет разработки под Битрикс, 50+ проектов по кастомизации интернет-магазинов. Настроим уведомление о поступлении товара под ключ с гарантией стабильной работы. Свяжитесь с нами для оценки вашего проекта — получите консультацию бесплатно.
Как работает агент?
Агент запускается один раз в час. Запрос: выбирает товары с подписчиками, где IS_SENT = false, и проверяет их остатки через CIBlockElement::GetList. Если остаток > 0 — отправляет письма тем же способом, что и в обработчике.







