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

Python开发Telegram机器人如何实现点击按钮触发对应操作?

实现方案

你的代码存在两个核心问题:

  1. Inline按钮点击后返回的是CallbackQuery类型的更新,不会触发你写的普通消息处理函数,你把回调判断逻辑写在消息处理函数里根本不会执行
  2. 你写的if(callback_data='press')存在语法错误,单等号是赋值操作,判断相等需要用双等号,且你没有正确获取回调数据的变量

修正实现(以pyTelegramBotAPI库为例)

你需要单独注册回调查询处理函数,分开处理普通消息和按钮点击事件:

import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton

# 替换为你自己的机器人Token
BOT_TOKEN = "你的机器人TOKEN"
telegram_bot = telebot.TeleBot(BOT_TOKEN)

# 处理普通文本消息,发送带按钮的提示
@telegram_bot.message_handler(func=lambda msg: True)
def action(msg):
    chat_id = msg.chat.id
    keyboard = InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text='Off', callback_data='press')],
    ])
    telegram_bot.send_message(chat_id, 'Click to stop looping', reply_markup=keyboard)

# 专门处理Inline按钮的回调事件
@telegram_bot.callback_query_handler(func=lambda call: True)
def handle_button_click(call):
    chat_id = call.message.chat.id
    # 判断回调数据
    if call.data == 'press':
        # 必须先响应回调,否则客户端按钮会一直处于加载状态
        telegram_bot.answer_callback_query(call.id)
        # 发送对应反馈消息
        telegram_bot.send_message(chat_id, 'loop end')

if __name__ == '__main__':
    telegram_bot.infinity_polling()

注意事项

  • 回调数据存放在回调对象的data属性中,不要直接写callback_data取变量
  • 收到回调后必须调用answer_callback_query接口回应用户的点击操作,否则Telegram客户端的按钮会持续显示加载动画,超时后还会弹出报错提示
  • 如果用的是python-telegram-bot v13+版本,逻辑一致,只是回调注册和方法名有少量差异,调整对应API调用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:03