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

点击后如何隐藏或删除内联按钮?尝试hide_keyboard: true未生效

解决Telegram内联按钮点击后隐藏/删除的问题

我来帮你搞定这个问题~首先得明确:你尝试的hide_keyboard: true是给**常规回复键盘(reply_keyboard)**用的,完全不适用于inline_keyboard,所以它没效果是正常的。针对内联按钮,我们有两种常用的处理方式:

方法一:编辑原消息,移除内联键盘

这是最常用的方案——当用户点击内联按钮后,直接修改原来那条带按钮的消息,把内联键盘替换成空数组,按钮就会立刻消失。

首先你需要添加回调事件的处理逻辑,捕获用户的按钮点击行为:

bot.on('callback_query', (callbackQuery) => {
  const targetMsg = callbackQuery.message;
  // 编辑消息,将内联键盘设为空数组,实现隐藏效果
  bot.editMessageReplyMarkup(
    { inline_keyboard: [] },
    { chat_id: targetMsg.chat.id, message_id: targetMsg.message_id }
  );

  // 这里添加你的业务逻辑,比如更新计数、触发下一个问题
  const userId = callbackQuery.from.id;
  countMap.set(userId, (countMap.get(userId) || 0) + 1);
  newQuestion(callbackQuery); // 继续发送下一个问题
});

另外还要修正你newQuestion函数里的一个小错误:你把parse_mode写在reply_markup的JSON里了,这是不对的,应该把它作为sendMessage的独立参数,修正后的代码片段:

var options = {
  parse_mode: 'Markdown',
  reply_markup: JSON.stringify({
    inline_keyboard: arr.buttons,
  })
};

方法二:删除原消息,发送新消息(不带键盘)

如果你不需要保留原来的消息内容,可以直接删除带按钮的消息,再发送一条新的不带键盘的消息:

bot.on('callback_query', (callbackQuery) => {
  const chatId = callbackQuery.message.chat.id;
  const msgId = callbackQuery.message.message_id;

  // 删除原来带按钮的消息
  bot.deleteMessage(chatId, msgId);

  // 发送新的无键盘消息(这里可以替换成你需要的内容)
  bot.sendMessage(chatId, "已收到你的选择~", { parse_mode: 'Markdown' });

  // 继续你的业务逻辑
  newQuestion(callbackQuery);
});

两种方法各有适用场景:如果需要保留原消息内容,选方法一;如果不需要保留,方法二更直接。

内容的提问来源于stack exchange,提问作者Павел Squad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:33