You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python-telegram-bot:CallbackQueryHandler触发方法能否用ReplyKeyboardMarkup?

在CallbackQueryHandler中使用ReplyKeyboardMarkup的解决方案

可以在CallbackQueryHandler触发的方法里使用ReplyKeyboardMarkup,但不能通过query.edit_message_text()绑定,这正是你遇到报错的原因。

报错原因

Telegram API明确规定:edit_message_text方法的reply_markup参数仅支持InlineKeyboardMarkup(内联键盘),不允许传入ReplyKeyboardMarkup(普通回复键盘),所以会抛出"text buttons are unallowed in the inline keyboard"的错误。

正确实现方式

在CallbackQuery的处理方法中,通过query.message.reply_text()发送带有ReplyKeyboardMarkup的新消息即可。示例代码如下:

from telegram import ReplyKeyboardMarkup
from telegram.ext import CallbackQueryHandler

def params_set(update, context):
    query = update.callback_query
    # 必须先调用answer()确认回调,否则Telegram会提示用户"无法加载按钮"
    query.answer()
    
    # 构建普通回复键盘
    keyboard = [["参数A", "参数B"], ["重置参数"]]
    reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True, one_time_keyboard=True)
    
    # 发送新消息并绑定回复键盘
    query.message.reply_text("请选择要设置的参数:", reply_markup=reply_markup)

# 注册回调处理器,pattern根据你的实际回调数据调整
dispatcher.add_handler(CallbackQueryHandler(params_set, pattern=r"^params_set$"))

补充说明

如果你的需求是修改原有消息的键盘,那只能改用InlineKeyboardMarkup类型的内联键盘,Telegram API不支持给已发送的消息替换或添加普通回复键盘。

内容的提问来源于stack exchange,提问作者BaruchLi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:20