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

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

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

SMS про покинутий кошик — більш агресивний інструмент, ніж email: його відкривають у 95% випадків проти 20–30% для email. Саме тому використовувати його потрібно обережно: лише для користувачів, які дали явну згоду, і лише один раз у циклі — без нагадувань через SMS.

Коли SMS виправданий

SMS-канал для покинутих кошиків дає результат у кількох сценаріях:

  • Висока середня вартість замовлення (від 3 000 грн) — цінність нагадування перекриває вартість SMS
  • Користувач не відкрив email протягом 3–4 годин
  • Категорії товарів з високим «імпульсним» попитом (електроніка, одяг)

Для дешевих товарів вартість SMS-каналу нівелює прибуток від повернення кошиків.

Отримання телефону користувача з Бітрікс

Телефон береться з профілю користувача. 1С-Бітрікс зберігає його в користувацьких полях (b_user_field) або у властивостях замовлення (b_sale_order_props_value):

function getUserPhone(int $userId): string
{
    // Спосіб 1: з користувацького поля UF_PHONE
    $user = \Bitrix\Main\UserTable::getById($userId)->fetch();
    if (!empty($user['UF_PHONE'])) return $user['UF_PHONE'];

    // Спосіб 2: з останнього замовлення користувача
    $order = \Bitrix\Sale\Order::getList([
        'filter' => ['USER_ID' => $userId],
        'order'  => ['DATE_INSERT' => 'DESC'],
        'limit'  => 1,
        'select' => ['ID'],
    ])->fetch();

    if (!$order) return '';

    $orderObj = \Bitrix\Sale\Order::load($order['ID']);
    foreach ($orderObj->getPropertyCollection() as $prop) {
        if ($prop->getField('CODE') === 'PHONE') {
            return (string)$prop->getValue();
        }
    }

    return '';
}

Підключення SMS-шлюзу

1С-Бітрікс має вбудований модуль розсилки SMS (main.smsmanager), але він орієнтований на стандартні сповіщення. Для покинутих кошиків краще використовувати прямий API SMS-провайдера.

Популярні провайдери з REST API: SMS.ru, SMSC.ru, МТС Комунікатор, SMPP.

Приклад інтеграції з SMS.ru:

class SmsRuClient
{
    private string $apiId;

    public function __construct(string $apiId)
    {
        $this->apiId = $apiId;
    }

    public function send(string $phone, string $message, string $from = 'SHOP'): bool
    {
        $phone = preg_replace('/[^0-9]/', '', $phone);
        if (strlen($phone) === 10) $phone = '7' . $phone;

        $ch = curl_init('https://sms.ru/sms/send');
        curl_setopt_array($ch, [
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query([
                'api_id' => $this->apiId,
                'to'     => $phone,
                'msg'    => $message,
                'from'   => $from,
                'json'   => 1,
            ]),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_TIMEOUT => 10,
        ]);

        $response = json_decode(curl_exec($ch), true);
        curl_close($ch);

        return isset($response['status']) && $response['status'] === 'OK';
    }
}

Текст SMS про покинутий кошик

SMS обмежено 160 символами (кирилиця — 70 символів на частину). Текст має бути коротким і містити пряме посилання:

function buildCartSmsText(string $userName, float $cartTotal, string $cartUrl): string
{
    $shortUrl = shortenUrl($cartUrl); // скорочувач посилань або ваш домен
    $total    = number_format($cartTotal, 0, '.', ' ');

    return "{$userName}, у вашому кошику товари на {$total} грн. Оформіть замовлення: {$shortUrl}";
}

Не згадуйте конкретні товари — 70 символів не вистачить. Вказуйте суму — це створює контекст.

Агент відправки SMS

function sendAbandonedCartSms(): string
{
    $smsClient = new SmsRuClient(getenv('SMSRU_API_ID'));

    // Беремо кошики: email вже надіслано 3 години тому, SMS ще немає
    $candidates = AbandonedCartTable::getList([
        'filter' => [
            'STATUS'         => 'email_sent',
            '<EMAIL_SENT_AT' => new \Bitrix\Main\Type\DateTime('-3 hours'),
            '=SMS_SENT_AT'   => false,
        ],
        'limit' => 20, // не більше 20 за раз — контролюємо навантаження на шлюз
    ])->fetchAll();

    foreach ($candidates as $row) {
        // Перевіряємо згоду на SMS
        $user = \Bitrix\Main\UserTable::getById($row['USER_ID'])->fetch();
        if (empty($user['UF_SMS_CONSENT'])) continue;

        $phone = getUserPhone($row['USER_ID']);
        if (!$phone) continue;

        // Перевіряємо, чи не оформив замовлення після email
        if (hasRecentOrder($row['USER_ID'])) {
            AbandonedCartTable::update($row['ID'], ['STATUS' => 'recovered']);
            continue;
        }

        $basket  = \Bitrix\Sale\Basket::loadItemsForFUser($row['FUSER_ID'], SITE_ID);
        if ($basket->isEmpty()) continue;

        $smsText = buildCartSmsText($user['NAME'], $basket->getPrice(), '/basket/');
        $sent    = $smsClient->send($phone, $smsText);

        AbandonedCartTable::update($row['ID'], [
            'STATUS'     => $sent ? 'sms_sent' : 'sms_failed',
            'SMS_SENT_AT' => $sent ? new \Bitrix\Main\Type\DateTime() : null,
        ]);
    }

    return __FUNCTION__ . '();';
}

Управління згодою

Поле згоди на SMS-маркетинг (UF_SMS_CONSENT) має встановлюватися при реєстрації або в особистому кабінеті — явним чекбоксом «Хочу отримувати SMS з персональними пропозиціями». Без явної згоди відправка SMS порушує законодавство про рекламу.

Терміни: налаштування SMS-шлюзу та агента відправки — 1–2 дні. З управлінням згодою та інтеграцією у форму реєстрації — 2–3 дні.