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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:27