如何在C#开发的Telegram Bot中同时发送Reply与Inline键盘?
实现C# Telegram Bot同时显示Reply键盘与Inline键盘的方案
Telegram Bot API本身不支持在单条消息中同时附加ReplyKeyboardMarkup(底部常驻键盘)和InlineKeyboardMarkup(消息内嵌键盘),但可以通过以下变通方式实现两种键盘同时显示的效果:
核心思路
将ReplyKeyboard设为会话级的常驻键盘,之后发送带InlineKeyboard的消息。此时用户界面会同时显示底部的常驻Reply键盘,以及目标消息内的Inline键盘。
代码示例
1. 设置常驻Reply键盘
先发送一条消息配置会话的Reply键盘,该键盘会一直显示,直到主动取消:
using Telegram.Bot.Types.ReplyMarkups; // 构建Reply键盘 var replyKeyboard = new ReplyKeyboardMarkup(new[] { new KeyboardButton[] { "功能菜单", "个人设置" }, new KeyboardButton[] { "帮助中心" } }) { ResizeKeyboard = true, // 自适应屏幕大小 PersistentKeyboard = true // 设为常驻键盘 }; // 发送配置消息,激活Reply键盘 await botClient.SendTextMessageAsync( chatId: chatId, text: "功能菜单已开启", replyMarkup: replyKeyboard );
2. 发送带Inline键盘的消息
之后发送的消息可以单独附加Inline键盘,此时用户界面会同时显示两种键盘:
// 构建Inline键盘 var inlineKeyboard = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("查看订单详情", "callback_order_detail"), InlineKeyboardButton.WithUrl("访问官方商城", "https://your-shop-url.com") } }); // 发送带Inline键盘的消息 await botClient.SendTextMessageAsync( chatId: chatId, text: "您的最新订单已生成", replyMarkup: inlineKeyboard );
注意事项
- 如果不需要Reply键盘常驻,可以在后续操作中通过
ReplyKeyboardRemove取消显示。 - 单条消息只能绑定一种
IReplyMarkup实现,无法在同一条消息中同时设置两种键盘,这是Telegram官方API的限制。
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

