如何获取Telegram Bot自身通过sendMessage发送的消息?
Telegram Bot 获取自身发送消息的问题解答
问题背景
我查阅过Telegram Bot文档,了解到getUpdates接口可获取手动发送给Bot的消息信息:当webhook禁用时,用户手动向Bot发送消息后,通过https://api.telegram.org/<token>/getUpdates能获取到这些消息,示例返回如下:
{"ok":true,"result":[{"update_id":301215553, "message":{"message_id":31,"from":{"id":1235349470,"is_bot":false,"first_name":"XYZ","username":"ABC","language_code":"en"},"chat":{"id":1235349470,"first_name":"XYZ","username":"ABC","type":"private"},"date":1669990759,"text":"/help","entities":[{"offset":0,"length":5,"type":"bot_command"}]}} }
但使用sendMessage接口(请求地址:https://api.telegram.org/<token>/sendMessage?chat_id=-1001659408929&text=my sample text)让Bot自身发送的消息,无法通过getUpdates接口获取到——执行请求后,在getUpdates的返回结果里找不到这条"my sample text"消息。想咨询:是否有办法从Telegram获取这类消息,还是Telegram不支持?
解答
Telegram的getUpdates接口不会返回Bot自身发送的消息,这是官方的设计逻辑。如果需要获取Bot发送的消息,有两种实用方案:
- 调用
sendMessage时直接保存返回结果:调用该接口成功后,Telegram会直接返回这条消息的完整数据(包含message_id、发送时间、聊天信息等),你可以直接把这个返回结果存储下来,无需后续再通过其他接口获取。示例返回结构如下:
{"ok":true,"result":{"message_id":123,"from":{"id":你的BotID,"is_bot":true,"first_name":"你的Bot名称","username":"你的Bot用户名"},"chat":{"id":-1001659408929,"title":"群组名称","type":"supergroup"},"date":1669990759,"text":"my sample text"}}
- 使用
getChatHistory接口追溯历史消息:如果需要获取Bot之前发送的历史消息,可以调用getChatHistory接口(需要Bot具备对应聊天的权限,且接口有消息数量限制),通过指定聊天ID,并筛选发送者为Bot自身的消息来获取。
内容的提问来源于stack exchange,提问作者Visrut
相关产品推荐
相关产品推荐

