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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка SMS-уведомлений о брошенной корзине 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

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

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

Когда SMS оправдан

SMS-канал для брошенных корзин даёт результат в нескольких сценариях:

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

Для дешёвых товаров стоимость SMS-канала (3–8 руб. за сообщение) нивелирует прибыль от возврата корзин.

Получение телефона пользователя из Битрикс

Телефон берётся из профиля пользователя. Битрикс хранит его в пользовательских полях (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-шлюза

Битрикс имеет встроенный модуль рассылки 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 нарушает ФЗ-38.

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