Налаштування відстеження кинутих кошиків 1С-Бітрікс

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

Налаштування відстеження покинутих кошиків 1С-Бітрікс

Покинутий кошик — товар додано, але замовлення не оформлено. За статистикою, 65–75% кошиків кидають. Повернути хоча б 10% з них — означає підняти виручку без збільшення трафіку. Перший крок — налаштувати відстеження: зрозуміти, скільки кошиків кидається, хто ці користувачі і що в них лежало.

Де зберігаються дані кошика в Бітрікс

Кошик у 1С-Бітрікс пов'язаний з віртуальним користувачем (fuser) — анонімним ідентифікатором сесії.

  • b_sale_fuser — запис для кожного відвідувача (анонімного та авторизованого)
  • b_sale_basket — позиції кошика, прив'язані до FUSER_ID
  • b_sale_basket.DATE_INSERT, b_sale_basket.DATE_UPDATE — дата додавання та останнього змінення

При авторизації FUSER_ID сесії пов'язується з реальним користувачем: b_sale_fuser.USER_ID. До авторизації USER_ID = null.

Визначення «покинутого» кошика

Кошик вважається покинутим, якщо:

  1. У b_sale_basket є позиції
  2. Немає оформленого замовлення за цим FUSER_ID за останні N годин
  3. Останнє оновлення кошика (DATE_UPDATE) було більше M годин тому
// Вибираємо покинуті кошики: позиції додані більше 1 години тому, замовлення не оформлено
$cutoffTime = new \Bitrix\Main\Type\DateTime();
$cutoffTime->add('-1 hour');

$abandonedFusers = \Bitrix\Sale\BasketTable::getList([
    'filter' => [
        '<DATE_UPDATE' => $cutoffTime,
        '=ORDER_ID'    => false, // не прив'язані до замовлення
    ],
    'group'  => ['FUSER_ID'],
    'select' => ['FUSER_ID'],
])->fetchAll();

Після отримання FUSER_ID — перевіряємо, чи є у нього USER_ID (авторизований користувач):

foreach ($abandonedFusers as $row) {
    $fuser = \Bitrix\Sale\FuserTable::getList([
        'filter' => ['=ID' => $row['FUSER_ID']],
        'select' => ['USER_ID', 'DATE_UPDATE'],
    ])->fetch();

    if (!$fuser || !$fuser['USER_ID']) continue; // анонімний — немає контакту для комунікації

    // Отримуємо email користувача
    $user = \Bitrix\Main\UserTable::getById($fuser['USER_ID'])->fetch();
    $email = $user['EMAIL'] ?? '';

    if (!$email) continue;

    // Записуємо в чергу для відправки сповіщення
    AbandonedCartQueue::push($fuser['USER_ID'], $row['FUSER_ID']);
}

Відстеження через аналітику (GA4 / Яндекс.Метрика)

Паралельно з серверним відстеженням налаштуйте клієнтські події:

// При додаванні товару до кошика
BX.addCustomEvent('onBasketItemAdded', function(data) {
    gtag('event', 'add_to_cart', {
        currency: 'RUB',
        value:    data.price * data.quantity,
        items: [{
            item_id:   data.productId,
            item_name: data.productName,
            price:     data.price,
            quantity:  data.quantity,
        }],
    });
    ym(METRIKA_ID, 'reachGoal', 'add_to_cart');
});

// При видаленні з кошика
BX.addCustomEvent('onBasketItemDeleted', function(data) {
    gtag('event', 'remove_from_cart', { /* ... */ });
});

У GA4: Reports → Monetisation → Checkout journey — покаже воронку від додавання до кошика до покупки з відсотками відвалу на кожному кроці.

Агент для регулярного виявлення покинутих кошиків

Запускайте агент кожні 30–60 хвилин:

// У файлі /local/php_interface/init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'main', 'OnBeforeLocalRedirect', // або реєструйте через агенти
    function() {}
);

// Агент (Налаштування → Агенти)
function checkAbandonedCarts(): string
{
    AbandonedCartService::processNew();
    return __FUNCTION__ . '();'; // повертаємо для повторного виклику
}

AbandonedCartService::processNew() — ваш клас, який вибирає нові покинуті кошики (не позначені як оброблені) і записує їх у чергу сповіщень.

Зберігання статусу обробки

Створіть таблицю для зберігання статусу покинутих кошиків:

class AbandonedCartTable extends \Bitrix\Main\ORM\Data\DataManager
{
    public static function getTableName(): string { return 'local_abandoned_cart'; }

    public static function getMap(): array
    {
        return [
            new \Bitrix\Main\ORM\Fields\IntegerField('ID',      ['primary' => true, 'autocomplete' => true]),
            new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'),
            new \Bitrix\Main\ORM\Fields\IntegerField('FUSER_ID'),
            new \Bitrix\Main\ORM\Fields\StringField('STATUS'),   // new, email_sent, sms_sent, recovered
            new \Bitrix\Main\ORM\Fields\DatetimeField('DETECTED_AT'),
            new \Bitrix\Main\ORM\Fields\DatetimeField('EMAIL_SENT_AT'),
            new \Bitrix\Main\ORM\Fields\DatetimeField('SMS_SENT_AT'),
            new \Bitrix\Main\ORM\Fields\FloatField('CART_VALUE'),
        ];
    }
}

Коли користувач оформляє замовлення — оновлюйте статус на recovered через подію OnSaleOrderSaved.

Звітність: скільки повертається

Після кількох тижнів роботи у вас є дані: скільки кошиків виявлено, скільки комунікацій надіслано, скільки конверсій відбулося після комунікації. Будуйте простий звіт:

SELECT
    DATE(detected_at) AS date,
    COUNT(*) AS detected,
    SUM(CASE WHEN status = 'recovered' THEN 1 ELSE 0 END) AS recovered,
    ROUND(SUM(CASE WHEN status = 'recovered' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS recovery_rate
FROM local_abandoned_cart
GROUP BY DATE(detected_at)
ORDER BY date DESC;

Терміни виконання: базове серверне відстеження та агент — 1–2 дні. Клієнтські події GA4/Метрика — 4 години. Таблиця статусів і звітність — ще 1 день.