Як уникнути втрати транзакційних SMS: інтеграція SMSC
Кожне п'яте транзакційне SMS-повідомлення не доходить до клієнта через неправильне кодування, відсутність fallback-каналів або ігнорування статусів доставки. Типова картина: після реєстрації користувач не отримує OTP, втрачає доступ до акаунту та йде до конкурентів. Ми вирішували ці проблеми у 30+ проєктах — від інтернет-магазинів до банківських систем. SMSC — російський агрегатор, чиї тарифи на 20% нижчі за середньоринкові, а підтримка мультиканальних каскадів (Viber + SMS) економить до 30% бюджету на розсилки. Без правильної інтеграції ці переваги обертаються головним болем.
Проблеми інтеграції SMSC та їх вирішення
Неправильне кодування кирилиці. Якщо не передати charset=utf-8, SMSC за замовчуванням використовує CP-1251 — текст перетворюється на кракозябри. Рішення: явно вказувати charset у кожному запиті. Згідно з документацією SMSC, параметр charset обов'язковий для кириличних повідомлень. Докладніше про кодування UTF-8.
Перевищення лімітів. SMSC обмежує кількість повідомлень за хвилину на одну IP-адресу. При масовій розсилці без черги частина листів втрачається. Ми додаємо чергу (Laravel Queue або Redis) та налаштовуємо троттлінг з паузами між пачками по 50 повідомлень.
Необроблені помилки. API повертає помилки, але багато розробників не перевіряють відповідь. Ми завжди парсимо JSON, логуємо error_code та відправляємо повтор при таймауті.
Чому важливий charset=utf-8 при відправці кирилиці?
Якщо забути про charset=utf-8, SMSC за замовчуванням кодує текст у CP-1251. Більшість сучасних сайтів працюють у UTF-8 — у результаті абонент бачить нечитабельні символи. Ми в кожному запиті явно передаємо charset=utf-8 і fmt=3 для JSON-відповіді. Це гарантує коректне відображення кирилиці у 100% випадків.
Способи інтеграції
HTTP API
$response = Http::get('https://smsc.ru/sys/send.php', [
'login' => env('SMSC_LOGIN'),
'psw' => env('SMSC_PASSWORD'),
'phones' => $phone,
'mes' => $message,
'charset' => 'utf-8',
'fmt' => 3, // JSON відповідь
'sender' => env('SMSC_SENDER_NAME')
]);
$result = $response->json();
// ['id' => 1, 'cnt' => 1] — успіх
// ['error' => 'Помилка', 'error_code' => X] — помилка
Офіційна бібліотека
SMSC надає PHP-клас smsc_api.php:
require 'smsc_api.php';
$smsc = new SMSC_API();
$smsc->init(env('SMSC_LOGIN'), env('SMSC_PASSWORD'));
[$n_phones, $n_sms, $cost, $balance] = $smsc->send_sms(
$phone,
$message,
0, // translit
'', // time (delayed)
0, // id
0, // format (0=normal)
env('SMSC_SENDER_NAME')
);
Мультиканальні розсилки та статуси доставки
SMSC підтримує каскадні відправки: спочатку Viber (дешевше), при невдачі — SMS:
Http::get('https://smsc.ru/sys/send.php', [
// ...
'viber' => 1, // спробувати через Viber
'vk' => 1, // потім VK
'phones' => $phone,
'mes' => $message
]);
Як обробляти статуси доставки, щоб не втратити повідомлення?
SMS не завжди доходить — абонент поза зоною, телефон вимкнено, номер заблоковано. Без статусів ви не дізнаєтесь, що повідомлення не доставлено. SMSC надає API перевірки статусу та callback (вебхуки). Ми налаштовуємо отримання статусів і при невдачі задіюємо інший канал (Viber, WhatsApp) або повторюємо відправку через 30 хвилин. У 95% випадків повідомлення доставляється з першої спроби, але решта 5% потребують автоматичної обробки.
| Код | Статус | Опис |
|---|---|---|
| -3 | В дорозі | Повідомлення відправлено, очікує доставки |
| 1 | Доставлено | Успішно доставлено абоненту (95% випадків) |
| 3 | Закінчився термін | Повідомлення не доставлено за 24 години |
| 20 | Неможливо доставити | Номер неактивний або заблоковано |
Що дає мультиканальний каскад Viber+SMS?
Viber — дешевий канал з високою відкриваністю, але не всі абоненти ним користуються. SMSC дозволяє налаштувати каскад: спочатку відправка через Viber, при невдачі — SMS. Це знижує витрати на розсилку в середньому на 30% і підвищує доставляємість до 99%. У налаштуваннях достатньо передати параметр viber=1.
Як уникнути перевищення лімітів при масовій розсилці?
Масова розсилка — основна причина блокувань. SMSC встановлює ліміт 100 повідомлень за секунду для тарифу «Індивідуальний». Якщо перевищити, API поверне помилку error_code=6. Рішення: розбити відправку на пачки по 50 повідомлень і робити паузу між ними.
$batch = array_chunk($phones, 50);
foreach ($batch as $chunk) {
$response = Http::get('https://smsc.ru/sys/send.php', [...]);
if ($response['error'] ?? false) {
// логуємо і чекаємо 1 секунду
sleep(1);
}
}
Як ми налаштовуємо SMSC
Наш стандартний стек: Laravel (PHP 8.3), Guzzle для HTTP-запитів, Redis для черг. Конфіги виносимо в .env. Ми використовуємо офіційну PHP-бібліотеку smsc_api.php, але обертаємо її в service-клас з обробкою помилок. Для мультиканальних каскадів (спочатку Viber, при невдачі SMS) використовуємо параметр viber=1.
Процес роботи
- Аналітика — вивчаємо вашу архітектуру, визначаємо точки відправки SMS (реєстрація, підтвердження замовлення, сповіщення).
- Проєктування — обираємо метод інтеграції (HTTP API або бібліотека), налаштовуємо чергу та троттлінг.
- Реалізація — пишемо код, обробляємо всі кейси помилок, налаштовуємо callback для статусів.
- Тестування — відправляємо тестові повідомлення, перевіряємо доставку на різні номери, імітуємо збої.
- Деплой — запускаємо на продакшені, налаштовуємо моніторинг (логи, алерти).
Терміни та вартість інтеграції
Базова інтеграція (один канал, без черг) займає кілька годин. Якщо потрібні мультиканальні розсилки, черги та кастомні звіти — до двох днів. Точну вартість розраховуємо після аналізу вашого проєкту. Отримайте консультацію для оцінки. Зв'яжіться з нами, щоб обговорити деталі.
Типові помилки при інтеграції SMSC
| Код помилки | Опис | Рішення |
|---|---|---|
| 2 | Невірний логін або пароль | Перевірити .env |
| 4 | Недостатньо коштів | Поповнити баланс |
| 6 | Перевищено ліміт | Зменшити частоту відправки |
Також поширені помилки:
- Не вказано
charset=utf-8— кирилиця перетворюється на кракозябри. - Пароль або логін передаються у відкритому вигляді — використовуйте змінні оточення.
- Не обробляється відповідь API — пропущені помилки, повідомлення не доходять.
- Відсутній fallback на інший канал — при збої SMS клієнт залишається без сповіщення.
- Не налаштовано чергу — при масовій розсилці перевищуєте ліміти SMSC.
Що входить у роботу
- Повна інтеграція SMSC з вашим сайтом на Laravel або іншому фреймворку.
- Налаштування черг і троттлінгу для масових розсилок.
- Обробка статусів доставки через callback або HTTP-запити.
- Документація з інтеграції та доступів.
- Навчання вашої команди роботі з системою.
- Гарантія 30 днів після запуску — оперативно виправляємо будь-які проблеми.
За час роботи ми провели понад 30 успішних інтеграцій із SMSC для інтернет-магазинів, банків і сервісів доставки. Якщо вам потрібна надійна відправка транзакційних SMS, замовте консультацію — ми оцінимо ваш проєкт і запропонуємо оптимальне рішення. Отримайте безкоштовну оцінку вартості вже сьогодні.







