Как избежать потери транзакционных 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, закажите консультацию — мы оценим ваш проект и предложим оптимальное решение. Получите бесплатную оценку стоимости уже сегодня.







