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

python-telegram-bot中InlineKeyboardButton点击事件响应位置与callback_data流向

python-telegram-bot 内联按钮点击事件响应说明

用户点击InlineKeyboardButton后产生的回调事件会被你注册的CallbackQueryHandler捕获,你设置的callback_data会传入这个Handler绑定的自定义处理函数中执行处理。

完整实现步骤

1. 定义回调处理函数

你需要先编写专门处理回调事件的函数,callback_data可以通过update.callback_query.data获取:

def button_callback(update: Update, context: CallbackContext) -> None:
    # 获取回调查询对象
    query = update.callback_query
    # 必须先应答回调,避免按钮长时间显示加载状态
    query.answer()
    
    # 取出按钮回传的callback_data
    callback_data = query.data
    
    # 按业务需求编写处理逻辑,示例:修改原消息显示选中的选项
    if callback_data == "1":
        query.edit_message_text(text="已选中Option 1")
    elif callback_data == "2":
        query.edit_message_text(text="已选中Option 2")
    elif callback_data == "3":
        query.edit_message_text(text="已选中Option 3")

2. 注册CallbackQueryHandler

在初始化Bot的Application实例时,要把上面写的回调函数和CallbackQueryHandler绑定后注册到实例中,才能接收到回调事件:

from telegram.ext import Application, CommandHandler, CallbackQueryHandler

def main():
    # 替换为你的Bot Token
    application = Application.builder().token("YOUR_BOT_TOKEN").build()
    
    # 你原来的start命令handler
    application.add_handler(CommandHandler("start", start))
    # 注册回调事件handler,绑定刚才编写的button_callback函数
    application.add_handler(CallbackQueryHandler(button_callback))
    
    # 启动Bot
    application.run_polling()

if __name__ == "__main__":
    main()

补充说明

  • 如果你的Bot有多种不同类型的内联按钮,可以给CallbackQueryHandler指定pattern参数,只匹配符合正则规则的callback_data,实现不同按钮对应不同处理函数,例如:
    # 仅处理callback_data为纯数字的回调
    application.add_handler(CallbackQueryHandler(handle_num_button, pattern=r'^\d+$'))
    
  • 除了query.edit_message_text,你也可以在回调处理函数中执行其他业务逻辑,比如回复新消息、调用接口、更新数据等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 02:36:03