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

如何同时发送带InlineKeyboardMarkup和ReplyKeyboardRemove的消息?

解决Telegram Bot同时移除自定义键盘并发送Inline键盘的问题

可行替代方案:

方案1:分两步发送消息(推荐)

先发送一条带ReplyKeyboardRemove的消息(可以是简短提示文本,比如“操作已切换”),这条消息会自动移除用户当前的自定义键盘。紧接着发送带InlineKeyboardMarkup的目标消息。

示例逻辑:

# 第一步:移除自定义键盘
bot.send_message(
    chat_id=chat_id,
    text="已切换至快捷操作模式",
    reply_markup=ReplyKeyboardRemove(remove_keyboard=True)
)
# 第二步:发送带Inline键盘的消息
bot.send_message(
    chat_id=chat_id,
    text="请选择后续操作:",
    reply_markup=InlineKeyboardMarkup([
        [InlineKeyboardButton("选项1", callback_data="opt1")],
        [InlineKeyboardButton("选项2", callback_data="opt2")]
    ])
)

用户端体验:自定义键盘会立即消失,随后看到带Inline键盘的消息,逻辑清晰且符合API规则。

方案2:编辑原自定义键盘消息(适用于需要覆盖原消息的场景)

如果机器人之前发送过带自定义键盘的消息,可以直接调用EditMessageText接口,将原消息的文本替换为目标内容,并把reply_markup改为InlineKeyboardMarkup。这样原自定义键盘会被直接替换成Inline键盘,无需发送新消息。

注意:仅能编辑机器人自身发送的消息,且原消息需满足可编辑条件(Telegram API允许编辑带ReplyKeyboard的消息,只要是机器人发送的)。

示例逻辑:

# 假设original_message_id是之前发送的带自定义键盘的消息ID
bot.edit_message_text(
    chat_id=chat_id,
    message_id=original_message_id,
    text="请选择后续操作:",
    reply_markup=InlineKeyboardMarkup([
        [InlineKeyboardButton("选项1", callback_data="opt1")],
        [InlineKeyboardButton("选项2", callback_data="opt2")]
    ])
)

方案3:极简提示移除键盘

如果不需要单独发送提示消息,可以在发送带Inline键盘的消息前,先发送一条仅含ReplyKeyboardRemove的极简提示(比如单个表情符号),再发送目标消息。这种方式能减少用户看到的冗余消息数量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:23:29