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

Telethon调用ImportContactsRequest失效,返回retry_contacts求助

问题原因分析

你遇到的是Telegram API的反滥用限流机制触发。retry_contacts返回传入的client_id,明确说明你的请求因系统限制被拦截,无法完成联系人导入操作。

这种情况通常是因为:

  • 批量导入联系人属于高风险操作,Telegram对该接口的请求频率、单次请求数量有严格阈值;
  • 你的定时任务(15分钟一次,每次35个手机号)可能超过了账号的允许请求额度,尤其是如果你的账号是新号或仅用于批量操作、缺乏正常用户行为的话,更容易触发限流;
  • 重复使用固定的client_id也可能被系统判定为重复/自动化操作,加剧限流触发概率。
解决方案

1. 改用专用的手机号验证接口

导入联系人的初衷是添加好友,并非专门的手机号注册状态验证。Telegram提供了CheckPhoneNumberRequest接口,专门用于验证手机号是否已注册Telegram,该接口的限流阈值更宽松,也更符合你的需求:

from telethon.tl.functions.users import CheckPhoneNumberRequest

async def verify_phone_registration(phone_number):
    try:
        response = await client(CheckPhoneNumberRequest(phone=phone_number))
        return response.phone_registered  # 返回True表示已注册,False表示未注册
    except Exception as e:
        # 处理限流、格式错误等异常
        print(f"验证手机号 {phone_number} 失败: {str(e)}")
        return None

2. 调整请求频率与批次大小

如果坚持使用导入联系人的方式,必须严格控制请求强度:

  • 降低单次请求的手机号数量:从35个减少到5-10个/批次,分散请求压力;
  • 延长请求间隔:将15分钟的固定间隔调整为30分钟以上,或在批次之间添加随机延迟(比如每个批次后等待1-3分钟,避免固定时间点的自动化操作被识别);
  • 每个请求使用唯一的client_id:比如用UUID生成随机ID,避免重复值被系统标记:
    import uuid
    contact = InputPhoneContact(client_id=int(uuid.uuid4()), phone='+39XXXXXXXXX', first_name='', last_name='')
    

3. 提升账号信任等级

Telegram对活跃的真实用户账号会给予更高的请求额度:

  • 用该账号进行正常的Telegram操作:发送消息、加入公开群组、浏览内容、添加真实联系人等;
  • 避免仅用该账号执行批量验证操作,让账号行为更贴近普通用户。

4. 处理重试逻辑

针对已触发的限流,不要立即重试,遵循Telegram的提示,至少等待1-2小时后再恢复请求,避免进一步触发更严格的限制(比如临时封禁API权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:02:19