Багато інтернет-магазинів на 1С-Бітрікс втрачають до 70% покинутих кошиків після email-розсилок. SMS-канал дає 95% відкриваності, але тільки при грамотному налаштуванні — інакше гроші на шлюз витрачаються даремно. Нещодавно до нас звернувся клієнт з каталогом електроніки на 50 000 товарів: після email повертали лише 5% кошиків, а після підключення SMS з тригодинним інтервалом — 18%. Довелося точно розраховувати бюджет, оскільки кожне повідомлення коштувало 3-5 грн. Ми налаштовували такі сценарії для десятків проектів і знаємо, як уникнути типових помилок: від дублювання повідомлень до блокування номера через перевищення лімітів.
SMS виправдані для кошиків із середнім чеком від 3000 грн. та товарів імпульсного попиту (електроніка, одяг). Email не доходить до клієнта — спам-фільтри, неактивні скриньки. SMS бачать всі, але ціна за повідомлення змушує рахувати кожен сценарій.
| Критерій | SMS | |
|---|---|---|
| Відкриваність | 20-30% | 95% |
| Вартість за повідомлення | близько 0.5 грн. | 3-8 грн. |
| Обмеження довжини | 1000+ символів | 160 символів (кирилиця — 70) |
| Ризик спаму | Високий | Низький |
| Згода клієнта | Формальна | Обов'язкова явна (ФЗ-38) |
Чому SMS ефективніші за email для повернення кошиків?
Email-листи часто потрапляють у спам. SMS бачать майже одразу, але це дорогий канал. Тому ми застосовуємо SMS тільки коли користувач не відкрив email за 3-4 години — точний інтервал налаштовується під каталог. Згідно з ФЗ-38 «Про рекламу», для SMS-маркетингу потрібна попередня згода, що ми обов'язково реалізуємо.
Які технічні складнощі ховаються за SMS-розсилкою?
Головна проблема — точне отримання номера телефону. Якщо в профілі користувача немає UF_PHONE, доводиться парсити останнє замовлення, а це сповільнює агент. Друга складність — нормалізація номера: різні маски вводу (сім-495-123-45-67) перетворюємо в єдиний формат 74951234567. Третя — дотримання лімітів провайдера: не більше 100 повідомлень на хвилину на акаунт, інакше блокування.
Отримання телефону користувача
Телефон може зберігатися в полях користувача (b_user_field) або у властивостях замовлення. Наш стандартний підхід — перевіряти спочатку UF_PHONE, потім останнє замовлення:
function getUserPhone(int $userId): string { $user = \Bitrix\Main\UserTable::getById($userId)->fetch(); if (!empty($user['UF_PHONE'])) return $user['UF_PHONE']; $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-шлюзу через API
Бітрікс має вбудований модуль main.smsmanager, але він не гнучкий для покинутих кошиків. Ми використовуємо прямий API провайдера — 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?
Покрокове налаштування:
- Створити таблицю
abandoned_cartз полями USER_ID, FUSER_ID, STATUS, EMAIL_SENT_AT, SMS_SENT_AT. - Написати агент, який вибирає записи зі статусом
email_sent, у яких минуло 3 години. - В агенті перевіряти згоду
UF_SMS_CONSENTта наявність актуального телефону. - Відправляти SMS через
SmsRuClient, оновлювати статус. - Зареєструвати агент з періодичністю 10 хвилин.
| Етап | Дія | Термін |
|---|---|---|
| 1. Аналіз | Збір вимог, вибір шлюзу | 0.5 дня |
| 2. Інтеграція | Підключення API, тестовий запуск | 1-2 дня |
| 3. Налаштування агента | Створення агента із захистом від дублювання | 1 день |
| 4. Тестування | Перевірка на кошиках різних розмірів | 0.5 дня |
| 5. Деплой | Запуск на бой, моніторинг | 0.5 дня |
Що входить в роботу?
При замовленні налаштування SMS-повідомлень про покинуті кошики ви отримуєте:
- Аудит поточного збору телефонів та згод на розсилку.
- Інтеграцію обраного SMS-шлюзу (SMS.ru, SMSC.ru, МТС Комунікатор) з тестовим запуском.
- Створення агента відправки із захистом від дублювання та обробкою лімітів.
- Налаштування поля
UF_SMS_CONSENTта форми згоди в особистому кабінеті. - Документацію з підтримки та моніторингу.
- Навчання адміністраторів.
Як часто відправляти SMS?
SMS відправляємо тільки один раз, через 3 години після email, якщо лист не відкрито. Агент обробляє не більше 20 кошиків за раз, щоб не перевантажити шлюз:
function sendAbandonedCartSms(): string { $smsClient = new SmsRuClient(getenv('SMSRU_API_ID')); $candidates = AbandonedCartTable::getList([ 'filter' => [ 'STATUS' => 'email_sent', '<EMAIL_SENT_AT' => new \Bitrix\Main\Type\DateTime('-3 hours'), '=SMS_SENT_AT' => false, ], 'limit' => 20, ])->fetchAll(); foreach ($candidates as $row) { $user = \Bitrix\Main\UserTable::getById($row['USER_ID'])->fetch(); if (empty($user['UF_SMS_CONSENT'])) continue; $phone = getUserPhone($row['USER_ID']); if (!$phone) continue; 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__ . '();'; } Типові помилки при налаштуванні
- Відправка без перевірки згоди — порушення ФЗ-38, блокування провайдером.
- Дублювання повідомлень — агент без прапорця відправки. Використовуйте статуси
email_sent,sms_sent. - Невірна нормалізація номера:
+7 (495) 123-45-67->74951234567. Помилка в коді призведе до пустої відправки. - Занадто часті відправки — шлюз може заблокувати акаунт. Обмежте агент лімітом 20 кошиків за раз.
Як керувати згодою на SMS-маркетинг?
Поле UF_SMS_CONSENT повинно встановлюватися при реєстрації або в особистому кабінеті — явним чекбоксом «Хочу отримувати SMS з персональними пропозиціями». Без явної згоди відправка SMS порушує ФЗ-38. Ми гарантуємо дотримання законодавства при налаштуванні.
Рішення підходить як для 1С-Бітрікс, так і для Бітрікс24. Наша команда має багаторічний досвід роботи з Бітрікс та сертифікацію «1С-Бітрікс: Розробник». Ми реалізували понад 50 проектів з налаштуванням оповіщень. Отримайте консультацію по вашому проекту — напишіть нам. Замовте налаштування SMS-повідомлень і поверніть до 20% покинутих кошиків.







