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

Архитектура автоматизированной регистрации

Базовый флоу

Каждая автоматическая регистрация проходит следующие шаги:

  1. Скрипт запрашивает виртуальный номер через API (указывает сервис и страну)
  2. Сервис возвращает номер и ID активации
  3. Скрипт вводит номер в форму регистрации целевого сервиса
  4. Целевой сервис отправляет SMS с OTP-кодом
  5. Скрипт polling-ом запрашивает входящие SMS через API
  6. API возвращает код из SMS
  7. Скрипт вводит код, завершает регистрацию
  8. Скрипт освобождает номер (или ждёт истечения)

Работа с API turbon: основные эндпоинты

Получение номера

Первый шаг — запрос доступного номера для нужного сервиса и страны:

GET /api/getNumber?api_key=YOUR_KEY&service=telegram&country=ru

Ответ:
{
  "status": "success",
  "id": 12345678,
  "phone": "79991234567"
}

Ожидание SMS

После отправки номера на целевой сервис — polling для получения кода:

GET /api/getStatus?api_key=YOUR_KEY&id=12345678

Ответ (ожидание):
{"status": "STATUS_WAIT_CODE"}

Ответ (код получен):
{"status": "STATUS_OK", "code": "12345"}

Подтверждение использования

GET /api/setStatus?api_key=YOUR_KEY&id=12345678&status=6
# status=6 — сообщить, что SMS получена и всё OK

Примеры реализации

Python: базовый класс для работы с API

import requests
import time

class TurbonAPI:
    BASE_URL = "https://turbon.rent/api"

    def __init__(self, api_key):
        self.api_key = api_key

    def get_number(self, service, country="ru"):
        r = requests.get(f"{self.BASE_URL}/getNumber", params={
            "api_key": self.api_key,
            "service": service,
            "country": country
        })
        data = r.json()
        if data["status"] == "success":
            return data["id"], data["phone"]
        raise Exception(f"Failed to get number: {data}")

    def wait_sms(self, activation_id, timeout=120, interval=5):
        deadline = time.time() + timeout
        while time.time() < deadline:
            r = requests.get(f"{self.BASE_URL}/getStatus", params={
                "api_key": self.api_key,
                "id": activation_id
            })
            data = r.json()
            if data["status"] == "STATUS_OK":
                return data["code"]
            if "CANCEL" in data["status"]:
                raise Exception("Activation cancelled")
            time.sleep(interval)
        raise TimeoutError(f"SMS not received in {timeout}s")

    def confirm(self, activation_id):
        requests.get(f"{self.BASE_URL}/setStatus", params={
            "api_key": self.api_key,
            "id": activation_id,
            "status": 6
        })

# Использование:
turbon = TurbonAPI("your_api_key")
act_id, phone = turbon.get_number("telegram")
# ... регистрация в Telegram с номером phone ...
code = turbon.wait_sms(act_id)
# ... ввод кода code ...
turbon.confirm(act_id)

JavaScript/Node.js: асинхронный вариант

const axios = require('axios');

async function getNumber(apiKey, service, country = 'ru') {
  const { data } = await axios.get('https://turbon.rent/api/getNumber', {
    params: { api_key: apiKey, service, country }
  });
  if (data.status !== 'success') throw new Error(data.status);
  return { id: data.id, phone: data.phone };
}

async function waitSms(apiKey, id, timeout = 120000) {
  const deadline = Date.now() + timeout;
  while (Date.now() < deadline) {
    await new Promise(r => setTimeout(r, 5000));
    const { data } = await axios.get('https://turbon.rent/api/getStatus', {
      params: { api_key: apiKey, id }
    });
    if (data.status === 'STATUS_OK') return data.code;
    if (data.status.includes('CANCEL')) throw new Error('Cancelled');
  }
  throw new Error('Timeout');
}

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

Паттерн Worker Pool

Для регистрации 100 аккаунтов параллельно используется паттерн worker pool: N воркеров работают одновременно, каждый выполняет полный цикл регистрации. При N=10 время регистрации 100 аккаунтов сокращается в 10 раз.

from concurrent.futures import ThreadPoolExecutor
import time

def register_account(turbon, service, registrar):
    act_id, phone = turbon.get_number(service)
    registrar.start_registration(phone)
    code = turbon.wait_sms(act_id)
    account = registrar.complete_registration(code)
    turbon.confirm(act_id)
    return account

# Параллельный запуск
with ThreadPoolExecutor(max_workers=10) as executor:
    futures = [
        executor.submit(register_account, turbon, "telegram", registrar)
        for _ in range(100)
    ]
    accounts = [f.result() for f in futures]

Обработка ошибок и retry

Типичные ошибки

ОшибкаПричинаРешение
NO_NUMBERSНет доступных номеров для сервиса/страныRetry через 30–60 сек или смена страны
STATUS_CANCELSMS не пришла, активация отмененаПолучить новый номер, повторить
BANNEDАккаунт API заблокированПроверить баланс и лимиты
TimeoutErrorSMS пришла позже таймаутаУвеличить timeout, добавить retry

Exponential backoff

При ошибках NO_NUMBERS — не бомбардировать API, а делать паузы с возрастающим интервалом: 5с → 10с → 20с → 40с. Это снижает нагрузку и повышает шанс получить номер при высоком спросе.

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

Playwright или Selenium запускает браузерный профиль → скрипт получает номер через API turbon → вводит номер в форму через автоматизацию браузера → получает код через API → вводит в браузере. Полный цикл без участия человека.

Ключевой момент: между получением номера и вводом SMS-кода должна быть задержка 5–30 секунд (имитация реального пользователя, который «читает SMS»). Без задержки некоторые платформы детектируют автоматизацию.

Best Practices при автоматизации

  • Всегда подтверждайте использование номера (status=6) — это помогает улучшать качество пула
  • Не запрашивайте номер, пока форма регистрации не готова к вводу — номер может истечь
  • Логируйте каждую активацию с результатом — для анализа успешности по сервисам
  • Используйте разные страны для разных платформ — снижает паттерны
  • Не превышайте разумную скорость запросов к API — соблюдайте rate limits

Заключение

Автоматизация регистрации через API виртуальных номеров — это переход от ручного труда к масштабируемому процессу. 10 строк кода заменяют 10 минут ручной работы оператора. turbon.rent предоставляет API для автоматического получения номеров, приёма SMS и управления активациями — всё необходимое для интеграции в ваши скрипты и пайплайны.