手动SMS代码检索是任何大规模验证流程中的瓶颈。当您需要注册500个账户或在生产系统中自动处理传入的OTP时,虚拟号码提供商API成为关键工具。让我们检查集成架构、典型场景和实际代码示例。
虚拟号码API的基本概念
两种操作模式
大多数API提供商支持两种根本不同的模式:
- 轮询(询问)——您的应用程序定期请求SMS状态。更易于实现,但会产生延迟和API负载
- Webhook(推送)——提供商在SMS到达时本身向您的端点发送HTTP请求。即时、高效,推荐用于生产
通过API的电话号码生命周期
- GET /numbers/available——获取按国家/服务列出的可用号码列表
- POST /numbers/activate——租赁/激活号码
- GET /sms/{activation_id}——检查传入的SMS(轮询)
- POST /numbers/{id}/status——确认SMS接收或取消
- DELETE /numbers/{id}——释放号码
集成示例:Python+轮询
用于在服务注册期间接收OTP代码的基本脚本:
- 请求所需服务的号码(例如,Instagram)
- 将号码传递给网站注册流程
- 每5秒轮询5分钟
- 使用正则表达式从SMS正文中提取代码
- 确认收据(因此号码不会重复收费)
关键激活请求参数:
参数类型描述 countrystring国家代码:"us"、"gb"、"de"、"ru" servicestring服务标识符:"instagram"、"google"、"fb" operatorstring(可选)具体运营商:"att"、"tmobile" forward_urlstring(可选)推送通知的Webhook URLWebhook集成架构
交互方案
用于高负载系统的生产架构:
- Nginx在HTTPS端点上从提供商接收webhook请求
- FastAPI/Express解析请求正文,检查Secret签名
- 消息放入队列(Redis/RabbitMQ)用于异步处理
- Worker使用正则表达式提取OTP代码,在DB中更新状态
- 主注册流程通过回调或Redis轮询获取代码
来自提供商的示例有效负载
典型的webhook请求结构:
- activation_id——提供商系统中的激活ID
- phone——接收SMS的电话号码
- from——发件人(例如,"GOOGLE"或"+18005551234")
- text——完整的SMS文本
- created_at——收据的Unix时间戳
平行大规模注册
同时100+注册的架构
朴素方法——顺序注册——每分钟给出1个账户。并行架构:
组件技术功能 任务队列Celery / BullMQ注册任务队列 Workers10–50并行每个进行1次注册 API池速率限制器+重试控制提供商限制 SMS监听器Webhook + Redis pub/sub向workers分发SMS 存储PostgreSQL / MongoDB账户、状态、日志使用50个并行worker和平均注册时间3分钟——每小时1000个账户。限制因素:API提供商速率限制和目标站点速度。
错误处理和重试逻辑
典型API错误
- SMS未在超时内到达(5分钟)——号码需要取消和新请求。原因:服务将SMS发送到不同号码或运营商延迟
- 此服务的号码已被使用——提供商应该控制这一点,但有时会错过。检测:服务说"这个号码已注册"
- API速率限制——实现带抖动的指数退避:1s、2s、4s、8s...
- 临时提供商不可用——断路器模式:3次连续错误后等待30秒再尝试
通过Playwright/Selenium与反检测浏览器的集成
完整注册自动化=号码API+headless浏览器:
- Python脚本通过API请求号码
- Playwright使用所需的指纹和代理打开浏览器
- 填写注册表格,插入接收到的号码
- Webhook或轮询等待带代码的SMS
- Playwright在验证表单中输入代码
- 账户与登录/密码/号码/代理一起保存在DB中
速率限制和最佳实践
建议为什么重要 缓存可用号码列表(TTL 60秒)减少API负载,加快工作 验证webhook请求签名防止伪造SMS 记录所有SMS包括无法识别的帮助调试和纠纷 不要将激活的号码保留超过20分钟而无SMS避免未使用激活的充电 为HTTP客户端使用连接池通过并行请求降低延迟SDK和现成库
大多数专业提供商为Python、Node.js、PHP、Go提供官方SDK。这节省了编写HTTP包装器和错误处理的时间。在选择提供商时检查SDK可用性——显示API成熟度。
turbon.rent API文档包括主要语言中的代码示例、所有端点和webhooks的描述——足以在几小时内集成。
虚拟号码API不仅仅是便利,它是企业扩展100倍和手动劳动达到性能上限之间的区别。