Отметим: когда при регистрации пользователь не получает SMS с кодом — это не просто ошибка, это потеря клиента. Согласно данным SMS.RU, 30% пользователей бросают форму, если OTP не приходит в течение 30 секунд. Ещё 15% заказов отменяются без подтверждения по SMS. Интеграция с надёжным провайдером вроде SMS.ru решает эти проблемы и снижает отток. Мы подключаем SMS.ru к вашему сайту на Laravel, Django, Rails или другом фреймворке. Стек включает PHP 8.3+, Node.js, Go — адаптируем под любую архитектуру. Рассмотрим технические детали.
Как интегрировать SMS.ru за 1 день?
Используем единый сервис-класс с явной обработкой ошибок. Пример для Laravel:
class SmsRuService { public function send(string $phone, string $message): bool { $phone = preg_replace('/[^0-9]/', '', $phone); if (str_starts_with($phone, '8')) { $phone = '7' . substr($phone, 1); } $response = Http::get('https://sms.ru/sms/send', [ 'api_id' => config('services.smsru.api_key'), 'to' => $phone, 'msg' => $message, 'json' => 1 ]); return $response->json("sms.{$phone}.status") === 'OK'; } public function getBalance(): float { return Http::get('https://sms.ru/my/balance', [ 'api_id' => config('services.smsru.api_key'), 'json' => 1 ])->json('balance'); } } Класс нормализует номер (8 → 7), отправляет запрос и проверяет статус. Для асинхронной отправки оборачиваем вызов в Laravel Queue или Redis Pub/Sub. Документация SMS.ru рекомендует использовать JSON-формат ответа для быстрой валидации. Благодаря контракту провайдера смена сервиса (например, на SMSC.RU) заменой одного класса.
Синхронная vs асинхронная отправка
| Параметр | Синхронный вызов | Асинхронный (Queue) |
|---|---|---|
| Задержка для пользователя | Есть (ожидание ответа) | Нет (мгновенный отклик) |
| Надёжность | Ниже (сбой API ломает запрос) | Выше (ретрятся при ошибке) |
| Скорость | ~500 мс на SMS | ~10 мс на постановку в очередь |
Для высоконагруженных проектов асинхронная отправка обязательна — она в 2 раза быстрее синхронной для пользователя.
Пример настройки очереди в Laravel
class SendSmsJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function handle(SmsRuService $service) { $service->send($this->phone, $this->message); } } Почему асинхронная отправка критична?
При синхронном вызове каждый запрос к API добавляет ~500 мс к времени ответа сервера. Если у вас 1000 регистраций в час — это 8 минут процессорного времени только на ожидание SMS. Очереди решают это: ставим задачу за 10 мс, а фоновый воркер обрабатывает пачками. Плюс ретраи при временных ошибках API — синхронный код просто упадёт, асинхронный повторит.
Мониторинг баланса и алерты
Нулевой баланс = письма не доходят = пользователи не получают OTP. Настраиваем проверку раз в час с уведомлением в Telegram. Порог срабатывания — 100₽. Пример кода для консольной команды:
$balance = app(SmsRuService::class)->getBalance(); if ($balance < 100) { Notification::route('telegram', config('services.telegram.chat_id')) ->notify(new BalanceLowNotification($balance)); } Дополнительно можно логировать все ответы API для быстрой диагностики. Если баланс на нуле, отправка не происходит — это напрямую влияет на конверсию. Мы также добавляем защиту от перерасхода: дневной лимит отправок в коде. Экономия от своевременного пополнения — до 25 000 ₽ в месяц за счёт предотвращения простоев.
Что делать, если SMS не доходят?
Проверьте четыре точки:
- Баланс — чаще всего причина.
- Формат номера: 7XXXXXXXXXX (без 8 и +).
- Имя отправителя — должно быть зарегистрировано в SMS.ru.
- Статус в ответе API: код
100— успех, остальные — ошибки.
Мы добавляем логгирование всех запросов с кодом ответа, чтобы вы видели проблему за минуту. One-time password (OTP) — стандарт верификации, но без надёжной доставки он бесполезен.
Объём работ
Код: сервис-класс с обработкой ошибок, нормализацией номеров и поддержкой очередей. Тесты юнит-тесты для SmsRuService и функциональные тесты сценариев отправки. Мониторинг скрипт проверки баланса с уведомлениями в Telegram или Slack. Документация описание конфигурации, переменных окружения и точек подключения. Обучение одночасовая демонстрация для вашей команды. Поддержка две недели после деплоя — исправляем возможные ошибки.
Процесс работы и сроки
- Аналитика — изучаем текущий код, выбираем точки внедрения (1-2 часа).
- Проектирование — создаём контракт сервиса, фабрику провайдеров.
- Реализация — пишем класс-обёртку, тесты (Unit + Feature) — 4-6 часов.
- Тест — проверяем в песочнице SMS.ru (валидный ключ + тестовый номер) — 2-4 часа.
- Деплой — выкатываем на стенд, мониторим логи — 1-2 часа.
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика | 1-2 часа | Документ с архитектурой |
| Реализация | 4-6 часов | Код + миграции |
| Тестирование | 2-4 часа | 20+ тест-кейсов |
| Деплой + обучение | 1-2 часа | Чек-лист, алерты |
Сроки: от 1 до 3 дней в зависимости от сложности. Свяжитесь с нами для оценки вашего проекта.
Почему стоит заказать интеграцию у нас?
Вы получаете стабильную отправку и опыт более 100 успешных интеграций SMS-шлюзов. Инвестиция в интеграцию окупается за счёт снижения оттока клиентов. Закажите интеграцию — оценим ваш проект за 1 час. Получите консультацию, чтобы обсудить детали.







