Telegram Bot API跨聊天回复报错400:目标消息未找到
解答
1. 参数正确仍报错的原因
核心问题是机器人无法访问目标频道的指定消息,哪怕频道是公开的,机器人也需要满足访问条件才能引用消息:
- 机器人未加入目标公开频道:即使是公开频道,机器人作为独立账号,必须先成为频道成员(可由管理员添加或自行订阅),才能获取到频道内消息的引用权限。
- 目标消息过旧:Telegram会对公开频道的历史消息做缓存限制,过旧的消息机器人无法直接引用。
你测试的forwardMessage/copyMessage能成功,是因为用户1已经将目标消息转发给机器人,机器人是基于用户提供的消息上下文操作,而非直接访问频道内的原始消息。
2. 遗漏的设置或限制
你忽略了两个关键限制:
- 跨聊天回复的权限要求:机器人必须具备读取目标聊天消息的权限。对于公开频道,机器人需要先加入频道;对于私有群组/聊天,机器人必须是成员且拥有读取消息权限。
- 消息可访问范围:部分官方频道或特殊频道的消息可能有额外引用限制,同时过旧的消息会因Telegram的缓存策略无法被机器人引用。
另外,再次确认参数:确保reply_parameters中的chat_id是带-100前缀的正确频道ID,message_id是该频道内未被删除的有效消息ID。
3. 是否为Telegram Bot API自身问题?
不是,这个400 Bad Request是标准的权限/消息不可访问提示。你可以通过以下步骤验证并解决:
- 让目标频道管理员将机器人添加为频道成员(普通成员即可)。
- 调用
getChatHistory接口尝试获取目标message_id对应的消息,若能成功获取,再调用sendMessage进行跨聊天回复。 - 若仍报错,尝试引用该频道的最新消息(比如刚发送的测试消息),排除旧消息的缓存问题。
内容的提问来源于stack exchange,提问作者ixsalimo
相关产品推荐
相关产品推荐

