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

Telebot多进程环境下编辑消息失败:Chat Not Found错误

Telegram编辑消息出现“chat not found”错误的排查与解决

核心原因分析

  • 多进程TeleBot实例冲突:你使用multiprocessing创建子进程时,父进程的bot对象会被复制到子进程,但TeleBot并非进程安全,子进程的bot实例可能无法正确建立API连接上下文,导致请求时无法识别聊天ID。
  • 聊天ID类型错误:你的gpid是字符串类型,而Telegram API要求聊天ID必须为整数,字符串形式的ID会被判定为无效聊天对象。
  • 消息过期或被删除:编辑前等待了1200秒(20分钟),这段时间内目标消息可能被用户删除或被bot清理,导致API找不到对应消息/聊天。

具体解决步骤

1. 修正聊天ID类型

将gpid改为整数类型,移除引号:

gpid = 123456789  # 替换为你的实际聊天ID,确保是整数

同时检查所有bot.send_message和bot.edit_message_text调用中的chat_id参数,确保统一使用整数格式。

2. 为每个子进程单独初始化TeleBot

多进程环境下不要共享父进程的bot实例,每个进程独立创建新的TeleBot对象:

  • 在startloop函数开头添加初始化代码:
def startloop(queue):
    global gpid, Token
    bot = telebot.TeleBot(Token)  # 子进程专属的bot实例
    # 后续原有代码保持不变
  • 在send_message_process函数开头同样初始化:
def send_message_process(queue__):
    global gpid, Token
    bot = telebot.TeleBot(Token)  # 子进程专属的bot实例
    # 后续原有代码保持不变

3. 增加消息存在性校验(可选)

编辑消息前先验证聊天和消息是否存在,避免无效请求:

# 在send_message_process的编辑逻辑前添加
try:
    bot.get_chat(gpid)
    bot.get_message(gpid, msg_id)
except telebot.apihelper.ApiTelegramException as e:
    print(f"聊天或消息不存在: {e}")
    continue

4. 优化等待逻辑或容错机制

如果20分钟等待时间过长,可适当缩短;若编辑失败,改为发送新消息替代:

# 编辑失败的异常处理中修改
except Exception as e:
    print(f"编辑失败,发送新消息替代: {e}")
    bot.send_message(gpid, resultmsg_green)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:32