Python电报机器人:按钮数据无效

Python电报机器人:按钮数据无效,python,telegram,telegram-bot,python-telegram-bot,telegram-webhook,Python,Telegram,Telegram Bot,Python Telegram Bot,Telegram Webhook,我正在尝试使用PTB制作一个超级简单的电报机器人。机器人有一个按钮,当我点击按钮时,机器人应该向web发出http请求(不打开浏览器)。并显示响应数据。下面是我正在使用的一段代码: def get_data(): response = requests.get('https://jsonplaceholder.typicode.com/posts/1').json() return response['body'] def start(update, context) ->

我正在尝试使用PTB制作一个超级简单的电报机器人。机器人有一个按钮,当我点击按钮时,机器人应该向web发出http请求(不打开浏览器)。并显示响应数据。下面是我正在使用的一段代码:

def get_data():
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1').json()
    return response['body']

def start(update, context) -> None:
    inline_button = [
        [
            InlineKeyboardButton('test callback', callback_data=get_data())
        ]
    ]

    reply_markup = InlineKeyboardMarkup(inline_button)
    update.message.reply_text("Please choose:", reply_markup=reply_markup)

def button(update, context) -> None:
    query = update.callback_query
    query.answer()
    
    TEXT = f"<h3>{query.data}</h3>"
    query.edit_message_text(text=TEXT, parse_mode=ParseMode.HTML) 
    # context.bot.send_message(chat_id=update.effective_chat.id, text=f'{query.data}')

我相信这是因为电报限制了64字节的文本?但在这种情况下,一些机器人如何在一条消息中显示数千个字符的数据?我到底做错了什么?

您正试图将从网站获取的json数据作为
回调_数据
传递给按钮。但是您实际想要的(从您的描述中)是仅在按下按钮时获取json数据。您只需将
callback\u data
设置为某个字符串,该字符串告诉您该按钮是哪个按钮(例如
callback\u data='fetch\u json'
),当您收到
CallbackQuery
(即在
按钮
函数中)时,调用
获取\u数据
,并使用结果编辑消息文本

如果确实希望在发送按钮之前发出请求,则必须将长文本存储在某个位置,并在收到
CallbackQuery
时检索它
python电报bot
有一个用于存储数据的内置功能,请参见此



免责声明:我目前是python telegram bot的维护者,或者,你可以,你知道,接受telegram并不希望你一次发送那么多文本的暗示,因为它对真正需要看到它的人来说很糟糕。
telegram.error.BadRequest: Button_data_invalid