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

Python-Telegram-Bot向Telegram超级群发消息报错如何排查

问题成因

普通群组升级为超级群后触发「Chat cannot be found」报错,即便更换过群ID、设置了机器人管理员也无法解决,本质是踩中了Telegram超级群的机制规则问题,和你贴出的核心发消息逻辑无关:

  • 最常见原因是拿到的超级群ID格式错误。普通群组ID为-开头的短数字(比如你代码里写的-1111111111就是典型普通群格式),但超级群ID固定为-100开头的长数字,多数人从第三方工具、历史消息里拿到的ID缺失100前缀,本质还是已经失效的旧普通群ID,请求时自然无法匹配到对应聊天。
  • 机器人隐私模式导致会话不同步。默认新建的机器人是开启隐私模式的,这种状态下即便机器人显示在群成员列表里,群组升级为超级群的迁移过程中,Telegram服务端不会把机器人自动同步到新超级群的成员列表中,发消息时会直接判定机器人不在群内。
  • 长连接实例缓存了旧群信息。普通群转超级群本质是后台生成了一个全新的聊天实体,旧普通群会被标记为销毁,如果你的Bot实例是升级前初始化的、长期保持长连接,会一直缓存旧普通群的请求地址,不会自动切换到新超级群的接口。
修复步骤

按顺序操作,每步完成后可直接测试,无需全部执行:

  • 获取正确的超级群ID
    不要使用第三方工具、历史消息留存的ID,先把机器人从群组移除再重新拉进群(先给普通成员权限即可,不用提前设管理员),在群内随便发一条消息,调用机器人的getUpdates接口拉取最新更新,在返回结果的chat字段下找到id值,完整复制-100开头的整段长数字,这才是有效的超级群ID。
  • 关闭机器人隐私模式
    找到@BotFather,发送/setprivacy指令,选中你使用的机器人,点击Disable按钮关闭隐私模式,之后再把机器人重新拉进群一次,确保权限生效。
  • 修正代码问题
    你贴的代码有两个细节问题需要调整:一是chat_id参数建议传整数类型而非字符串,二是补全函数缺失的参数,避免无关报错,修正后的参考代码如下:
    from textwrap import dedent
    from telegram import Bot
    
    # 群升级后建议重新初始化Bot实例,清空旧连接缓存
    bot = Bot(token='替换为你的机器人Token')
    # 替换为你从getUpdates拿到的-100开头的正确超级群ID,用整数类型
    SUPER_GROUP_CHAT_ID = -1001234567890
    
    # 原代码缺失subject参数,记得补上
    def post(subject, message):
        msg = dedent(f'''\
            On subject {subject}: {message}
            ''')
        bot.send_message(chat_id=SUPER_GROUP_CHAT_ID, text=msg)
    

补充说明:普通发消息不需要给机器人管理员权限,只有需要踢人、删消息、设置群公告这类管理操作时才需要给对应管理员权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:45:41