如何通过Telegram机器人唤起「选择群组」对话框?
如何通过Telegram机器人唤起「选择群组」对话框
刚好我之前研究过这个问题,其实你不用再用switch_inline_query打开全部聊天了——Telegram Bot API在v5.0版本之后,专门提供了唤起指定类型聊天选择框的能力,完美匹配你要的「仅选择群组」需求。下面是具体的实现思路和示例:
核心逻辑
关键是用KeyboardButton的request_chat参数来配置按钮,当用户点击这个按钮时,Telegram客户端会直接弹出仅筛选群组/超级群的选择对话框,而不是显示所有聊天类型。
具体实现步骤
1. 配置「选择群组」按钮的参数
request_chat是一个配置对象,你可以精确控制允许用户选择的聊天类型,核心参数包括:
request_id: 自定义的唯一整数ID(后续用来识别用户这次选择对应的请求)chat_is_channel: 设为False,直接排除频道类型chat_is_group+chat_is_supergroup: 都设为True,确保只显示群组和超级群- 其他可选参数:比如
chat_is_forum可以限制仅选论坛群组,按需设置就行
2. 构造回复键盘并发送消息
以Python的python-telegram-bot库为例,给你写个可直接参考的代码片段:
from telegram import ReplyKeyboardMarkup, KeyboardButton from telegram.ext import Updater, CommandHandler, MessageHandler, Filters def send_group_select_btn(update, context): # 创建带请求配置的按钮 select_group_btn = KeyboardButton( text="点击选择群组", request_chat={ "request_id": 1001, # 随便整个唯一的数字就行,后续识别用 "chat_is_channel": False, "chat_is_group": True, "chat_is_supergroup": True, "chat_is_forum": False # 不需要限制论坛的话就设为False } ) # 组装回复键盘,one_time_keyboard=True表示选完就收起键盘 reply_keyboard = ReplyKeyboardMarkup([[select_group_btn]], one_time_keyboard=True) # 发送带键盘的提示消息 update.message.reply_text("请从下方选择一个群组:", reply_markup=reply_keyboard) def handle_group_selection(update, context): # 监听用户选完群组后的回调消息 selected_chat = update.effective_message.chat_shared # 通过之前设置的request_id匹配对应的请求 if selected_chat.request_id == 1001: # 这里可以拿到选中群组的chat_id,后续就能针对这个群组操作了 context.bot.send_message( chat_id=update.effective_chat.id, text=f"你选的群组ID是:{selected_chat.chat_id}" ) def main(): # 替换成你的机器人Token updater = Updater("YOUR_BOT_TOKEN_HERE") dp = updater.dispatcher # 触发命令,比如用户发/start就弹出选择按钮 dp.add_handler(CommandHandler("start", send_group_select_btn)) # 监听chat_shared类型的消息,处理用户的选择 dp.add_handler(MessageHandler(Filters.chat_shared, handle_group_selection)) updater.start_polling() updater.idle() if __name__ == "__main__": main()
3. 处理用户的选择结果
当用户选完群组后,Telegram会给机器人发一条带chat_shared字段的消息,你只需要监听这个消息类型,通过request_id匹配之前的请求,就能拿到选中群组的chat_id,后续就可以基于这个ID做各种操作了。
小提醒
- 确保你的Bot API版本不低于v5.0,现在主流的Bot库(比如python-telegram-bot、telegraf)都已经支持这个特性了
request_id要保证唯一,如果有多个不同的选择请求(比如选群组、选频道),要用不同的ID区分开- 要是用其他语言的库(比如Node.js的telegraf),思路完全一样:构造带
request_chat的按钮,监听chat_shared事件就行
内容的提问来源于stack exchange,提问作者MOHW
相关产品推荐
相关产品推荐

