Email-уведомления о брошенной корзине на Битрикс: превращаем уход в продажу
Каждый второй покупатель покидает сайт, не завершив оформление. Без своевременного напоминания эти корзины остаются потерянными. Мы настраиваем цепочки email-уведомлений на Битрикс уже более 5 лет — конверсия в восстановление доходит до 18%. Реализация строится на агентах, почтовых событиях и кастомном классе AbandonedCartMailer с проверкой актуальности корзины. Для работы с корзинами используются Sale\Basket и Sale\Fuser. Анонимные пользователи идентифицируются через FUSER_ID, хранящийся в cookies. Это позволяет отправлять письма даже незарегистрированным посетителям, если они оставили email на этапе оформления. Ключевая сложность — корректно определить момент, когда корзина стала «брошенной», и не беспокоить покупателя, который уже вернулся к оформлению.
Магазины с высокой посещаемостью требуют оптимизации: агенты запускаются раз в 15 минут и обрабатывают пачки по 100 корзин, чтобы не блокировать таблицу b_sale_basket. Для отбора данных используется индексированный запрос по FUSER_ID и NULL в ORDER_ID.
Основная логика: когда отправлять и как не перегрузить клиента
Оптимальные интервалы для цепочки из трёх писем:
- Первое письмо — через 1–2 часа. Напоминание без скидки. «Вы забыли в корзине товары».
- Второе письмо — через 24 часа. Подчёркиваем ценность: «Сейчас самое время забрать».
- Третье письмо — через 72 часа. Опционально, с промокодом или указанием на истечение резервирования.
Не отправляйте все три, если пользователь уже открыл предыдущее или перешёл по ссылке. Лучше остановиться после первого клика. Для отслеживания открытий используйте пиксель-картинку или ссылку перехода с UTM-метками.
Как работает агент отправки?
Агент запускается по агент-функции sendAbandonedCartEmails() каждые 30 минут. Он выбирает корзины, обнаруженные 1–2 часа назад, со статусом new. Для каждой проверяет, не оформлен ли уже заказ, и отправляет письмо через CEvent::Send(). Если пользователь удалил товары или купил — письмо не уходит.
function sendAbandonedCartEmails(): string { $mailer = new AbandonedCartMailer(); $candidates = AbandonedCartTable::getList([ 'filter' => [ 'STATUS' => 'new', '<DETECTED_AT' => new \Bitrix\Main\Type\DateTime('-1 hour'), '>DETECTED_AT' => new \Bitrix\Main\Type\DateTime('-2 hours'), ], 'limit' => 50, ])->fetchAll(); foreach ($candidates as $row) { $sent = $mailer->send($row['USER_ID'], $row['FUSER_ID']); AbandonedCartTable::update($row['ID'], [ 'STATUS' => $sent ? 'email_sent' : 'skipped', 'EMAIL_SENT_AT' => $sent ? new \Bitrix\Main\Type\DateTime() : null, ]); } return __FUNCTION__ . '();'; } Шаблон почтового события и данные для письма
Создайте тип события ABANDONED_CART_REMINDER с полями USER_NAME, USER_EMAIL, CART_ITEMS (HTML-таблица), CART_TOTAL, CART_RESTORE_URL согласно документации почтовых событий. Шаблон:
Тема: #USER_NAME#, вы оставили товары в корзине Здравствуйте, #USER_NAME#! Вы не завершили оформление заказа. В вашей корзине: #CART_ITEMS# Итого: #CART_TOTAL# <a href="#CART_RESTORE_URL#">Вернуться к корзине</a> Класс AbandonedCartMailer::send() формирует HTML-таблицу с изображениями и ценами. Проверяет, не создавал ли пользователь заказ за последние 24 часа, и не пуста ли корзина.
Как избежать спама при отправке уведомлений?
Используйте SPF и DKIM для домена отправителя. Не отправляйте письма, если пользователь уже открыл предыдущее — для этого храните статус открытия в отдельном HL-блоке. Проверяйте, не создал ли пользователь заказ за последние 24 часа, используя CSaleOrder::GetList. Добавьте ограничение на максимальное количество писем в сутки для одного пользователя (не более 3). Все письма должны содержать ссылку на отписку, как описано ниже.
Почему важно проверять дубли отправки?
Агент может запуститься несколько раз. Используйте блокировку через AbandonedCartTable::update со статусом processing и условием STATUS='new'. Это исключит двойную отправку. Также проверяйте, что корзина не была восстановлена другой сессией — для этого сравнивайте актуальное количество товаров с моментом создания записи.
Отписка и соответствие законам
По ФЗ-38 и GDPR — обязательна ссылка на отписку в каждом письме. Добавьте в шаблон:
<a href="#UNSUBSCRIBE_URL#">Отказаться от уведомлений о корзине</a> На стороне сайта — простой обработчик, который устанавливает флаг UF_NO_CART_EMAIL. Проверяйте его в классе перед отправкой.
Что входит в настройку под ключ
| Дел | Описание |
|---|---|
| Аудит текущих шаблонов писем и логики корзины | Выявление ошибок, отсутствующих данных, неверных интервалов |
| Проектирование цепочки писем | Определение сценариев (1–3 письма, триггеры открытия/клика) |
| Реализация агента и класса | PHP-код с использованием Sale\Basket, Main\Mail, ORM |
| Настройка почтовых событий и шаблонов | Создание типов, HTML-вёрстка, UTM-метки |
| Тестирование на боевом контуре | Проверка отправки, отписок, конверсии |
| Документация по поддержке | Инструкция для администратора: как менять интервалы, добавлять промокоды |
| Срок | Этап |
|---|---|
| 1–2 дня | Аудит + проектирование |
| 2–3 дня | Разработка и тестирование |
| 1 день | Деploy и документация |
Итого: от 3 до 5 дней на базовую реализацию, до 2 недель — при интеграции с 1С или сложной бизнес-логикой.
Почему важно отслеживать результаты?
Добавьте UTM-метки в ссылку корзины: ?utm_source=email&utm_medium=abandoned_cart&utm_campaign=reminder_1h. В GA4 или Яндекс.Метрике вы увидите переходы из писем и оформления заказов. Без UTM вы не узнаете, какое письмо сработало лучше.
Для детального аудита вашей корзины свяжитесь с нашими инженерами. Получите консультацию по настройке цепочек писем — оставьте заявку в Telegram или на почту. У нас многолетний опыт и ряд успешных внедрений для 1С-Битрикс.







