Telegram Bot API调用setMessageReaction接口返回400错误求助
Telegram Bot setMessageReaction 返回400错误的原因及解决办法
问题描述
我正在实现Telegram机器人对用户消息添加反应的功能(基于Telegram新版Bot API),但调用setMessageReaction接口时返回400错误。测试发现删除reaction和is_big字段后请求能成功,但这样就无法实现添加反应的功能。代码如下:
def send_react(message): global TOKEN chat_id = message.chat.id message_id = message.message_id reaction = '👍' url = f'https://api.telegram.org/bot{TOKEN}/setMessageReaction' data = { 'chat_id': chat_id, 'message_id': message_id, 'reaction': reaction, 'is_big': False } response = requests.post(url, json=data) if response.status_code == 200: result = response.json() if result['ok']: print('ok') else: print('not ok:', result['description']) else: print('error:', response.status_code) return
可能的原因及解决办法
Reaction字段格式不符合API要求
Telegram Bot API的setMessageReaction接口中,reaction参数要求是一个数组,数组内的每个元素是包含type属性的对象,而不是直接传入单个emoji字符串。正确的格式应该是[{"type": "emoji", "emoji": "👍"}],而非单独的"👍"。Is_big字段的依赖条件不满足
is_big字段仅当reaction是单个emoji类型的对象时才有效,若reaction格式错误,这个字段会进一步触发参数校验失败,导致400错误。
修正后的代码
将reaction参数调整为符合API要求的数组格式即可解决问题:
def send_react(message): global TOKEN chat_id = message.chat.id message_id = message.message_id url = f'https://api.telegram.org/bot{TOKEN}/setMessageReaction' data = { 'chat_id': chat_id, 'message_id': message_id, 'reaction': [{"type": "emoji", "emoji": "👍"}], 'is_big': False } response = requests.post(url, json=data) if response.status_code == 200: result = response.json() if result['ok']: print('ok') else: print('not ok:', result['description']) else: print('error:', response.status_code) return
额外检查点:确保你的Bot使用的是支持setMessageReaction功能的Bot API版本(需为v6.2及以上),如果你的Bot是旧版本,可通过@BotFather确认并升级API权限。
内容的提问来源于stack exchange,提问作者Nevidimka
相关产品推荐
相关产品推荐

