Ручное получение SMS-кодов — узкое место любого масштабного процесса верификации. Когда нужно зарегистрировать 500 аккаунтов или автоматически обрабатывать входящие OTP в production-системе, API провайдера виртуальных номеров становится ключевым инструментом. Разбираем архитектуру интеграции, типовые сценарии и практические примеры кода.

Базовые концепции API виртуальных номеров

Два режима работы

Большинство API провайдеров поддерживают два принципиально разных режима:

  • Polling (опрос) — ваше приложение периодически запрашивает статус SMS. Проще в реализации, но создаёт задержку и нагрузку на API
  • Webhook (push) — провайдер сам отправляет HTTP-запрос на ваш эндпоинт при поступлении SMS. Мгновенно, эффективно, рекомендуется для production

Жизненный цикл номера через API

  • GET /numbers/available — получить список доступных номеров по стране/сервису
  • POST /numbers/activate — арендовать/активировать номер
  • GET /sms/{activation_id} — проверить входящие SMS (polling)
  • POST /numbers/{id}/status — подтвердить получение SMS или отменить
  • DELETE /numbers/{id} — освободить номер

Пример интеграции: Python + polling

Базовый скрипт для получения OTP-кода при регистрации в сервисе:

  • Запрос номера для нужного сервиса (например, Instagram)
  • Передача номера в процесс регистрации на сайте
  • Polling каждые 5 секунд в течение 5 минут
  • Извлечение кода из тела SMS регуляркой
  • Подтверждение получения (чтобы номер не списался повторно)

Ключевые параметры запроса активации:

ПараметрТипОписание
countrystringКод страны: "us", "gb", "de", "ru"
servicestringИдентификатор сервиса: "instagram", "google", "fb"
operatorstring (optional)Конкретный оператор: "att", "tmobile"
forward_urlstring (optional)Webhook URL для push-уведомлений

Архитектура webhook-интеграции

Схема взаимодействия

Production-архитектура для высоконагруженной системы:

  • Nginx принимает webhook-запросы от провайдера на HTTPS-эндпоинт
  • FastAPI/Express разбирает тело запроса, проверяет подпись Secret
  • Сообщение кладётся в очередь (Redis/RabbitMQ) для асинхронной обработки
  • Worker извлекает OTP-код регуляркой, обновляет статус в БД
  • Основной процесс регистрации получает код через callback или polling Redis

Пример payload от провайдера

Типичная структура webhook-запроса:

  • activation_id — ID активации в системе провайдера
  • phone — номер телефона, получивший SMS
  • from — отправитель (например, "GOOGLE" или "+18005551234")
  • text — полный текст SMS
  • created_at — Unix timestamp получения

Параллельная массовая регистрация

Архитектура для 100+ регистраций одновременно

Наивный подход — последовательная регистрация — даёт 1 аккаунт в минуту. Параллельная архитектура:

КомпонентТехнологияФункция
Task QueueCelery / BullMQОчередь задач регистрации
Workers10–50 параллельныхКаждый ведёт 1 регистрацию
API PoolRate limiter + retryКонтроль лимитов провайдера
SMS ListenerWebhook + Redis pub/subРаспределяет SMS по воркерам
StoragePostgreSQL / MongoDBАккаунты, статусы, логи

При 50 параллельных воркерах и среднем времени регистрации 3 минуты — 1000 аккаунтов за 1 час. Лимитирующий фактор: rate limit API провайдера и скорость целевого сайта.

Обработка ошибок и retry-логика

Типовые ошибки при работе с API

  • SMS не пришло за таймаут (5 мин) — номер нужно отменить и запросить новый. Причина: сервис отправил SMS на другой номер или произошла задержка оператора
  • Номер уже использован для этого сервиса — провайдер должен это контролировать, но иногда пропускает. Детект: сервис говорит «этот номер уже зарегистрирован»
  • Rate limit API — реализуйте exponential backoff с jitter: 1s, 2s, 4s, 8s...
  • Временная недоступность провайдера — circuit breaker паттерн: после 3 ошибок подряд ждать 30 секунд перед следующей попыткой

Интеграция с антидетект-браузером через Playwright/Selenium

Полная автоматизация регистрации = API номеров + headless browser:

  • Python-скрипт запрашивает номер через API
  • Playwright открывает браузер с нужным fingerprint и прокси
  • Заполняет форму регистрации, вставляет полученный номер
  • Webhook или polling ждёт SMS с кодом
  • Playwright вводит код в форму верификации
  • Аккаунт сохраняется в БД с логином/паролем/номером/прокси

Rate limits и best practices

РекомендацияПочему важно
Кешируйте список доступных номеров (TTL 60 сек)Снижает нагрузку на API, ускоряет работу
Проверяйте подпись webhook-запросовЗащита от поддельных SMS
Логируйте все SMS, включая нераспознанныеПомогает при отладке и спорных ситуациях
Не держите активированный номер дольше 20 мин без SMSИзбегаете списания за неиспользованные активации
Используйте connection pooling для HTTP-клиентаСнижает латентность при параллельных запросах

SDK и готовые библиотеки

Большинство профессиональных провайдеров предоставляют официальные SDK для Python, Node.js, PHP, Go. Это экономит время на написание HTTP-обёрток и обработку ошибок. Проверяйте наличие SDK при выборе провайдера — это показатель зрелости API.

Документация API turbon.rent включает примеры запросов на основных языках, описание всех эндпоинтов и webhooks — достаточно для интеграции в течение нескольких часов.

API виртуальных номеров — это не просто удобство, это разница между бизнесом, который масштабируется в 100x, и ручным трудом, который упирается в потолок производительности одного человека.