You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何实现switch_inline_query按钮的文本/内嵌按钮添加及触发后消息发送?

关于Telegram Bot switch_inline_query按钮的实现方案

嘿,我来帮你一步步搞定这两个Telegram Bot开发的常见问题~

1. 如何创建带文本的switch_inline_query类型Inline按钮

其实逻辑很清晰,构造InlineKeyboardButton时只要指定两个核心参数就行:

  • text: 按钮上显示的可见文字,比如"发送我的自定义内容"
  • switch_inline_query: 触发内联模式的属性,值可以是空字符串,也可以填一个自定义查询标识(用户选择会话后会自动带入输入框,方便后续判断请求来源)

举个Python的例子(基于python-telegram-bot v20版本):

from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler

async def start(update, context):
    # 构造带switch_inline_query的按钮
    custom_button = InlineKeyboardButton(
        text="点击触发内联消息",  # 按钮显示文本
        switch_inline_query="custom_trigger_123"  # 自定义查询标识,用来区分请求
    )
    keyboard = InlineKeyboardMarkup([[custom_button]])
    await update.message.reply_text("点击下方按钮试试:", reply_markup=keyboard)

if __name__ == "__main__":
    app = ApplicationBuilder().token("你的Bot Token").build()
    app.add_handler(CommandHandler("start", start))
    app.run_polling()

如果直接调用Telegram Bot API,JSON请求格式大概是这样:

{
  "chat_id": "目标聊天ID",
  "text": "点击下方按钮触发内联模式:",
  "reply_markup": {
    "inline_keyboard": [
      [
        {
          "text": "点击触发内联消息",
          "switch_inline_query": "custom_trigger_123"
        }
      ]
    ]
  }
}

2. 按下按钮选会话后,发送带指定文本和Inline按钮的内联消息

这一步的核心是监听并处理inline_query更新:当用户点击按钮选择会话后,Telegram会给你的Bot发送inline_query事件,里面包含之前设置的switch_inline_query标识。你需要捕获这个事件,然后返回预先构造好的内联消息结果。

继续用python-telegram-bot v20的例子,添加InlineQueryHandler来处理请求:

from telegram import InlineQueryResultArticle, InputTextMessageContent, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import InlineQueryHandler

async def handle_inline_request(update, context):
    query_content = update.inline_query.query
    # 判断是否是我们的按钮触发的请求
    if query_content == "custom_trigger_123":
        # 构造要发送的消息文本
        target_text = "这是我指定的内联消息内容!"
        # 构造消息里的Inline按钮
        message_button = InlineKeyboardButton(text="点我跳转", url="https://example.com")
        message_keyboard = InlineKeyboardMarkup([[message_button]])
        # 创建内联查询结果
        result = InlineQueryResultArticle(
            id="unique_result_id",
            title="发送自定义消息",
            input_message_content=InputTextMessageContent(target_text),
            reply_markup=message_keyboard  # 给消息附加Inline按钮
        )
        # 返回结果给Telegram,cache_time设0避免缓存旧内容
        await update.inline_query.answer([result], cache_time=0)

# 在之前的代码中添加这个处理器
app.add_handler(InlineQueryHandler(handle_inline_request))

关键注意点:

  • 自定义的switch_inline_query标识可以是任意字符串,主要用来区分不同来源的内联请求;
  • 如果希望用户能自由修改查询文本,可以把switch_inline_query设为空,但固定场景下用自定义标识更可靠;
  • cache_time设为0可以确保每次请求都返回最新内容,适合动态更新的场景。

这样一套流程走下来,用户点击按钮选择会话后,就能看到Bot提供的内联选项,选择后就会发送带指定文本和Inline按钮的消息啦~

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

火山引擎 最新活动