You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telethon中强制使用短信验证码而非Telegram应用通知?

关于Telethon中强制短信验证码的问题解答

问题背景

使用Python的Telethon构建Telegram账号自动化工具,需要批量登录手机号(包含未注册号码),但调用send_code_request()时,Telegram优先将验证码推送至Telegram应用(SentCodeTypeApp),未注册或无活跃会话的号码无法接收验证码。已尝试弃用的force_sms=True参数无效,ResendCodeRequest有时有效但不确定可靠性。


疑问解答

  1. ResendCodeRequest是否是现代Telethon中强制短信送达的正确且可靠方式?
    是的,这是目前Telethon对接Telegram API时,唯一官方支持的切换到短信验证码的方式。但可靠性并非100%:Telegram会根据号码状态、IP/设备风控、请求频率等维度判断是否允许发送短信。只要号码符合接收条件(非风控/黑名单、非虚拟号等),且请求频率合规,该方法大概率能触发短信。

  2. 存在哪些仍无法触发短信送达的边缘情况?

  • 号码处于Telegram的风控/黑名单列表,被限制接收短信验证码
  • 同一IP/设备短时间内多次发起验证码请求,触发反垃圾机制
  • 号码所属运营商屏蔽Telegram的国际短信(部分地区运营商存在此类限制)
  • 号码为虚拟号/VOIP号,Telegram默认拒绝为这类号码发送短信验证码
  • 未注册号码的归属地区与当前请求IP所在地差异过大,触发地域风控
  1. 是否有办法在首次调用时直接请求短信,无需重发步骤?
    没有。Telegram的API设计逻辑就是优先使用APP通道推送验证码,官方已移除了旧版的force_sms参数,目前没有任何合法参数可以跳过APP验证直接请求短信。必须先调用send_code_request()获取初始验证码(即使是APP类型),再通过ResendCodeRequest尝试切换到短信通道。

额外实用提示

  • 调用ResendCodeRequest前,先检查send_code_request()返回的SentCode对象中的next_type字段,如果不是SentCodeTypeSms,说明当前状态下无法切换到短信,无需发起重发请求
  • 严格控制验证码请求频率,建议每个号码的请求间隔不少于1分钟,避免触发Telegram的风控限制
  • 优先使用实体手机号,尽量避免使用虚拟号/VOIP号,这类号码几乎无法触发短信验证码

内容的提问来源于stack exchange,提问作者PouyaKH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 22:24:50