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

Pyrogram构建Telegram Bot遇msg_id过低同步错误求助

解决Pyrogram机器人BadMsgNotification: [16] The msg_id is too low错误

原因分析与修复方案

  • 会话文件时钟偏移累积:Pyrogram 1.0+依赖内部时钟,但会话文件会持久化存储时钟状态。若机器人频繁异常退出(强制终止、崩溃),内部时钟的偏移会被保存,下次启动就会触发msg_id过低的报错。

    • 临时修复:启动前自动删除会话文件(仅应急,会导致每次重新登录),代码示例:
      import os
      from pyrogram import Client
      
      SESSION_PATH = "your_bot_session.session"
      if os.path.exists(SESSION_PATH):
          os.remove(SESSION_PATH)
      
      app = Client(SESSION_PATH, api_id=你的API_ID, api_hash=你的API_HASH)
      # 后续业务代码
      
    • 长期解决:实现优雅退出逻辑,让Pyrogram有机会保存正确的时钟状态,代码示例:
      import signal
      from pyrogram import Client
      
      app = Client("your_bot_session", api_id=你的API_ID, api_hash=你的API_HASH)
      
      def graceful_exit(signum, frame):
          print("开始优雅退出...")
          app.stop()
          exit(0)
      
      # 捕获终止信号
      signal.signal(signal.SIGINT, graceful_exit)
      signal.signal(signal.SIGTERM, graceful_exit)
      
      with app:
          app.run()
      
  • 旧版本Pyrogram的bug:1.4.16属于较旧版本,可能存在内部时钟处理的遗留问题。尝试升级到最新稳定版(升级前记得备份会话文件):

    pip install --upgrade pyrogram
    
  • GCP环境时钟漂移:即使本地时间同步,GCP实例或容器环境可能存在NTP同步延迟。可手动强制同步时间:

    sudo systemctl restart systemd-timesyncd
    # 若安装了ntpdate,也可执行
    sudo ntpdate pool.ntp.org
    

    容器部署时,确保挂载宿主机时钟(以Docker为例):

    docker run -v /etc/localtime:/etc/localtime:ro 你的镜像名
    
  • 会话文件损坏:反复删除会话文件能解决问题,说明会话文件可能已损坏。可改用内存会话(无状态部署,每次启动需重新登录):

    from pyrogram import Client
    
    # 使用内存会话,不生成本地会话文件
    app = Client(":memory:", api_id=你的API_ID, api_hash=你的API_HASH)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:05