手工账户注册是任何可扩展操作的瓶颈。当需要每天100+注册时,人工成为主要成本。虚拟号码API是从手工到自动的桥梁:脚本获取号码、接收短信、解析代码、完成注册无需人类干预。

自动化注册架构

基本流程

每次自动注册经过以下步骤:

  1. 脚本通过API请求虚拟号码(指定服务和国家)
  2. 服务返回号码和激活ID
  3. 脚本在目标服务注册表单中输入号码
  4. 目标服务发送包含OTP代码的短信
  5. 脚本通过API轮询入站短信
  6. API从短信返回代码
  7. 脚本输入代码,完成注册
  8. 脚本释放号码(或等待过期)

与turbon API交互:主要端点

获取号码

第一步是请求需要服务和国家的可用号码:

GET /api/getNumber?api_key=YOUR_KEY&service=telegram&country=ru 响应: { "status": "success", "id": 12345678, "phone": "79991234567" }

等待短信

向目标服务发送号码后——轮询获取代码:

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——报告短信已收且一切正常

实现示例

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中注册... code = turbon.wait_sms(act_id) # ...输入代码... 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'); }

并行注册

工作线程池模式

为并行注册100账户,使用工作线程池模式: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]

错误处理和重试

典型错误

错误原因解决方案 NO_NUMBERS服务/国家无可用号码30–60秒后重试或更换国家 STATUS_CANCEL短信未收,激活已取消获取新号码,重复 BANNEDAPI账户被锁检查余额和限额 TimeoutError短信晚于超时到达增加超时,添加重试

指数退避

NO_NUMBERS错误时——不轰炸API,使用递增间隔暂停:5秒→10秒→20秒→40秒。这降低负载,增加高需求时获取号码的机会。

与反检测浏览器集成

Playwright或Selenium启动浏览器配置→脚本通过turbon API获取号码→通过自动化在表单中输入号码→通过API获取代码→在浏览器中输入。无需人类干预的完整周期。

关键时刻:获取号码和输入短信代码间应有5–30秒延迟(模拟"读短信"的真实用户)。无延迟,某些平台检测自动化。

自动化最佳实践

  • 始终确认号码使用(status=6)——帮助改进池质量
  • 直到注册表单准备就绪前不请求号码——号码可能过期
  • 记录每次激活及结果——为服务成功分析
  • 对不同平台使用不同国家——减少模式
  • 不超过合理API请求速度——尊重限流

总结

通过虚拟号码API自动化注册是从手工到可扩展流程的转变。10行代码替代10分钟操作员工作。turbon.rent提供API进行自动号码获取、短信接收和激活管理——集成到脚本和管道所需一切。