Настройка уведомления о поступлении товара 1С-Битрикс
Когда товар заканчивается, вместо кнопки «Купить» нужно предложить покупателю подписаться на уведомление. Встроенного компонента для этого в стандартном Битрикс нет — функционал реализуется через подписки (модуль subscribe) или кастомную таблицу с обработчиком изменения остатков.
Вариант 1: Через модуль подписок
Модуль subscribe предназначен для рассылок, но его можно адаптировать для подписок на товары. Покупатель подписывается на «рубрику», которая соответствует конкретному товару (или SKU). При появлении остатков — ручная или автоматическая отправка.
Это не самый чистый подход, но работает без дополнительных таблиц.
Вариант 2: Кастомная таблица подписок
Более правильное решение — отдельная таблица:
CREATE TABLE product_availability_notify (
ID SERIAL PRIMARY KEY,
PRODUCT_ID INT NOT NULL,
EMAIL VARCHAR(255) NOT NULL,
USER_ID INT NULL, -- NULL для гостей
DATE_ADD TIMESTAMP DEFAULT NOW(),
DATE_SENT TIMESTAMP NULL,
IS_SENT BOOLEAN DEFAULT FALSE,
UNIQUE(PRODUCT_ID, EMAIL)
);
Форма подписки — простая HTML-форма с AJAX-отправкой, появляется при QUANTITY = 0 на странице товара.
Триггер отправки уведомлений
Отправка при поступлении товара — через обработчик события изменения остатков. Событие вызывается при обновлении поля QUANTITY в b_catalog_product:
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.
Агент для периодической проверки
Альтернатива событию — агент Битрикс, запускаемый по расписанию (раз в час), который сам проверяет появление остатков у товаров с подписчиками:
Настройки → Инструменты → Агенты
Сроки выполнения
Форма подписки + обработчик + письмо — 4–8 часов. Если нужна страница управления подписками в личном кабинете — ещё 2–3 часа.







