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

Pyrogram收到updatesTooLong响应后停止处理更新如何解决?

Pyrogram UpdatesTooLong 错误修复方案

UpdatesTooLong 是Telegram服务端返回的标准状态,意为bot离线/断连时间过长,服务端缓存的待推送更新数量超过阈值,不再主动推送新消息,需要客户端主动同步更新恢复正常监听。

修复步骤

1. 优先使用框架内置处理逻辑

Pyrogram已经内置了该场景的自动处理能力,仅需在初始化Client时配置对应参数即可,无需额外写代码:

from pyrogram import Client

app = Client(
    "session_name",
    api_id=你的API_ID,
    api_hash="你的API_HASH",
    # 开启takeout模式,自动处理大批次更新同步
    takeout=True,
    # 断连后最大等待阈值,单位秒,超过阈值自动触发全量更新同步
    sleep_threshold=300
)

2. 自定义异常捕获处理(适配特殊业务场景)

如果你需要自行控制更新同步逻辑,可以通过全局异常捕获手动处理:

from pyrogram.errors import UpdatesTooLong

@app.on_raw_update()
async def raw_update_handler(client, update, users, chats):
    try:
        # 正常的更新处理逻辑
        pass
    except UpdatesTooLong:
        # 方案A:需要处理积压的历史消息
        # 拉取最多200条积压更新,可根据业务需求调整limit值
        pending_updates = await client.get_updates(limit=200)
        for upd in pending_updates:
            # 调用你原有业务逻辑处理拉取到的历史更新
            await your_update_process_func(upd)
        # 确认最新更新偏移量,避免重复拉取
        if pending_updates:
            await client.get_updates(offset=pending_updates[-1].update_id + 1)
        
        # 方案B:不需要处理积压的历史消息,直接同步到最新状态
        # await client.get_updates(offset=-1)

3. 长期运行优化建议

  • 搭配进程守护工具(systemd、pm2等)部署bot,进程异常退出后自动重启
  • 每24小时主动调用一次await client.get_updates(limit=1)校验同步状态,避免长时间运行出现同步偏移
  • 如果仅需要监听实时消息,不需要处理断连期间的历史消息,建议选择上述方案B跳过积压更新,减少不必要的性能消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:15:03