我无法向 Telegram API 发送请求

问题描述 投票:0回答:1

我正在实现设置机器人对用户消息的响应的功能(最近在 Telegram 中发布了新版本的机器人 api,其中出现了此功能)。

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

但是,我收到错误:Error: 400 可能是什么?

我还检查了删除reaction和is_big字段时,请求是成功的,但在这种情况下,该功能没有用。

python-requests python-telegram-bot telegram-api
1个回答
0
投票

问题的根本原因是

reaction
setMessageReaction
确实需要一个
ReactionType
类型的对象数组,而不是一个简单的字符串。所以你应该定义

reaction = [{"type": "emoji", "emoji": "👍"}]

Telegram 确实提供了一条错误消息,作为

response
的一部分帮助查找此问题。如果您在异常情况下也打印
response.json()
,您将看到信息

{'ok': False, 'error_code': 400, 'description': "错误请求:无法解析反应类型 JSON 对象"}

此外,让我指出,您可以通过使用

message.get_bot().token
来避免使用令牌的全局变量 - 有关此方面的文档,请参阅 herehere


免责声明:我目前是

python-telegram-bot
的维护者。

© www.soinside.com 2019 - 2024. All rights reserved.