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

调用telebot的edit_message_text方法时报错期望inline keyboard如何解决

报错原因

  • edit_message_text 方法的 reply_markup 参数仅支持 InlineKeyboardMarkup 类型的内联键盘,你定义的 main_keyboard() 返回的是 ReplyKeyboardMarkup 类型的底部普通回复键盘,不符合Telegram API参数要求,因此触发报错。
  • 其他位置调用该键盘正常,是因为调用场景为send_message等发送新消息的方法,这类方法的reply_markup参数支持传入普通回复键盘。

解决方案

根据你的使用需求选择对应方案即可,无需替换原有键盘方法,原有方法可继续在发送新消息的场景中使用:

方案1:仍需要使用底部普通回复键盘

拆分操作逻辑,先编辑消息文本,再单独发一条消息带出普通回复键盘即可,代码示例:

elif (merchant_id == 2):
    # 仅编辑消息文本,不传入reply_markup参数
    bot.edit_message_text(
        chat_id=call.message.chat.id, 
        message_id=call.message.message_id, 
        text='Your request was accepted', 
        parse_mode="Markdown"
    )
    # 发送新消息带出普通回复键盘
    bot.send_message(
        chat_id=call.message.chat.id,
        text="请选择后续操作:",
        reply_markup=keyboard.main_keyboard()
    )

方案2:需要在编辑后的消息下方直接附带键盘

额外定义一个内联键盘方法,在编辑消息时传入该内联键盘即可,代码示例:

# 新增内联键盘定义
def main_inline_keyboard():
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton('Hello', callback_data='hello')
    btn2 = types.InlineKeyboardButton('Start', callback_data='start')
    btn3 = types.InlineKeyboardButton('Add', callback_data='add')
    btn4 = types.InlineKeyboardButton('Stop', callback_data='stop')
    markup.add(btn1, btn3)
    markup.add(btn2)
    markup.add(btn4)
    return markup

# 编辑消息时传入内联键盘
elif (merchant_id == 2):
    bot.edit_message_text(
        chat_id=call.message.chat.id, 
        message_id=call.message.message_id, 
        text='Your request was accepted', 
        parse_mode="Markdown", 
        reply_markup=keyboard.main_inline_keyboard()
    )

内容的提问来源于stack exchange,提问作者Саша Афти

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:04