Настройка email-уведомлений о брошенной корзине 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка email-уведомлений о брошенной корзине 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1250
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    849
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    582
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    983

Настройка email-уведомлений о брошенной корзине 1С-Битрикс

Email о брошенной корзине — одно из немногих автоматических писем с конверсией 5–15%. Письмо через 1–2 часа после ухода с сайта попадает в момент, когда покупатель ещё не забыл о товаре. На Битрикс это реализуется через агент, модуль main.mail и шаблоны почтовых событий.

Основная логика: когда отправлять

Оптимальные временны́е интервалы:

  • Первое письмо — через 1–2 часа. «Вы забыли в корзине». Без скидки.
  • Второе письмо — через 24 часа (если не оформил). Подчёркиваем ценность товара.
  • Третье письмо — через 72 часа (опционально). Со скидкой или истечением резервирования.

Не отправляйте все три письма подряд — это создаёт негативный опыт. Остановитесь после первого, если пользователь открыл письмо, или после второго, если кликнул по ссылке.

Шаблон почтового события

Создайте тип почтового события в Битрикс: Настройки → Почтовые события → Типы событий → Добавить.

  • Код события: ABANDONED_CART_REMINDER
  • Поля: USER_NAME, USER_EMAIL, CART_ITEMS (HTML-таблица с товарами), CART_TOTAL, CART_RESTORE_URL, SITE_URL

Шаблон письма (Почтовые события → Шаблоны → Добавить):

Тема: #USER_NAME#, вы оставили товары в корзине

Здравствуйте, #USER_NAME#!

Вы не завершили оформление заказа. В вашей корзине:

#CART_ITEMS#

Итого: #CART_TOTAL# руб.

<a href="#CART_RESTORE_URL#">Вернуться к корзине</a>

Формирование данных для письма

class AbandonedCartMailer
{
    public function send(int $userId, int $fuserId): bool
    {
        $user = \Bitrix\Main\UserTable::getById($userId)->fetch();
        if (!$user || !$user['EMAIL']) return false;

        // Проверяем, не оформил ли уже заказ
        if ($this->hasRecentOrder($userId)) return false;

        // Получаем позиции корзины
        $basket = \Bitrix\Sale\Basket::loadItemsForFUser($fuserId, SITE_ID);
        if ($basket->isEmpty()) return false;

        $cartItems = $this->buildCartItemsHtml($basket);
        $cartTotal = number_format($basket->getPrice(), 0, '.', ' ');

        // URL для восстановления корзины (просто URL корзины — товары уже там)
        $cartUrl = SITE_SERVER_NAME . '/basket/';

        \CEvent::Send('ABANDONED_CART_REMINDER', SITE_ID, [
            'USER_NAME'        => $user['NAME'],
            'USER_EMAIL'       => $user['EMAIL'],
            'CART_ITEMS'       => $cartItems,
            'CART_TOTAL'       => $cartTotal . ' руб.',
            'CART_RESTORE_URL' => $cartUrl,
            'SITE_URL'         => SITE_SERVER_NAME,
        ]);

        return true;
    }

    private function buildCartItemsHtml(\Bitrix\Sale\Basket $basket): string
    {
        $html = '<table width="100%" style="border-collapse:collapse">';
        foreach ($basket as $item) {
            $name  = htmlspecialchars($item->getField('NAME'));
            $qty   = (int)$item->getField('QUANTITY');
            $price = number_format($item->getPrice() * $qty, 0, '.', ' ');
            $img   = $this->getProductImage($item->getProductId());

            $html .= "<tr>
                <td width='80'><img src='{$img}' width='70' height='70'></td>
                <td>{$name}<br>Кол-во: {$qty}</td>
                <td align='right'>{$price} руб.</td>
            </tr>";
        }
        $html .= '</table>';
        return $html;
    }

    private function hasRecentOrder(int $userId): bool
    {
        $cutoff = new \Bitrix\Main\Type\DateTime();
        $cutoff->add('-24 hours');

        $order = \Bitrix\Sale\Order::getList([
            'filter' => ['USER_ID' => $userId, '>DATE_INSERT' => $cutoff],
            'select' => ['ID'],
            'limit'  => 1,
        ])->fetch();

        return (bool)$order;
    }
}

Агент для запуска рассылки

// Агент запускается каждые 30 минут
function sendAbandonedCartEmails(): string
{
    $mailer = new AbandonedCartMailer();

    // Берём корзины, обнаруженные 1–2 часа назад, первое письмо ещё не отправлено
    $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__ . '();';
}

Отписка и управление согласием

По требованиям ФЗ-38 «О рекламе» и GDPR — пользователь должен иметь возможность отказаться. Добавьте в шаблон письма ссылку отписки:

<a href="#UNSUBSCRIBE_URL#">Отказаться от уведомлений о корзине</a>

На стороне Битрикс — обработчик /local/api/cart-unsubscribe.php, который устанавливает пользовательское поле UF_NO_CART_EMAIL = Y. Перед отправкой проверяйте это поле.

Отслеживание результатов

Добавьте UTM-метки к ссылке на корзину в письме:

$cartUrl = SITE_SERVER_NAME . '/basket/?utm_source=email&utm_medium=abandoned_cart&utm_campaign=reminder_1h';

В GA4 и Метрике будет видно, сколько пользователей перешло из письма и сколько из них оформило заказ.

Сроки: создание шаблона письма, агент, логика отправки — 3–5 дней. С многоступенчатой цепочкой писем, управлением согласием и отчётностью — 1–2 недели.