Налаштування email-повідомлень про покинутий кошик 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування email-повідомлень про покинутий кошик 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • 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 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування email-сповіщень про покинутий кошик 1С-Бітрікс

Email про покинутий кошик — одне з небагатьох автоматичних листів з конверсією 5–15%. Лист через 1–2 години після відходу з сайту надходить у момент, коли покупець ще не забув про товар. На 1С-Бітрікс це реалізується через агент, модуль 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__ . '();';
}

Відписка та управління згодою

За вимогами ЗУ «Про рекламу» та 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 тижні.