如何在Telethon中强制使用短信验证码而非Telegram应用通知?
关于Telethon中强制短信验证码的问题解答
问题背景
使用Python的Telethon构建Telegram账号自动化工具,需要批量登录手机号(包含未注册号码),但调用send_code_request()时,Telegram优先将验证码推送至Telegram应用(SentCodeTypeApp),未注册或无活跃会话的号码无法接收验证码。已尝试弃用的force_sms=True参数无效,ResendCodeRequest有时有效但不确定可靠性。
疑问解答
ResendCodeRequest是否是现代Telethon中强制短信送达的正确且可靠方式?
是的,这是目前Telethon对接Telegram API时,唯一官方支持的切换到短信验证码的方式。但可靠性并非100%:Telegram会根据号码状态、IP/设备风控、请求频率等维度判断是否允许发送短信。只要号码符合接收条件(非风控/黑名单、非虚拟号等),且请求频率合规,该方法大概率能触发短信。存在哪些仍无法触发短信送达的边缘情况?
- 号码处于Telegram的风控/黑名单列表,被限制接收短信验证码
- 同一IP/设备短时间内多次发起验证码请求,触发反垃圾机制
- 号码所属运营商屏蔽Telegram的国际短信(部分地区运营商存在此类限制)
- 号码为虚拟号/VOIP号,Telegram默认拒绝为这类号码发送短信验证码
- 未注册号码的归属地区与当前请求IP所在地差异过大,触发地域风控
- 是否有办法在首次调用时直接请求短信,无需重发步骤?
没有。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
相关产品推荐
相关产品推荐

