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

Telegram机器人InlineKeyboard可显示但无响应 新手技术求助

解决Telegram机器人InlineKeyboard点击无响应的问题

嘿,我来帮你排查这个问题!你遇到的点击无响应情况,大概率是因为python-telegram-bot版本的API差异,或者代码里漏掉了几个关键步骤,我给你一步步梳理清楚:

核心问题分析

你的代码用的是旧版本的函数参数写法(bot, update),但如果是python-telegram-bot v13及以上的版本,API已经更新为update, context的参数结构;另外,处理回调查询时必须调用query.answer(),否则Telegram客户端会一直处于加载状态,看起来就像点击没反应。

修正后的可运行代码

我写了一个完整的示例,你可以直接参考使用:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler

def start(update, context):
    update.message.reply_text('发送 /test 就能看到测试键盘啦!')

def choice(update, context):
    # 构造Inline键盘
    keyboard = [
        [InlineKeyboardButton('1st question', callback_data='1'),
         InlineKeyboardButton('2nd question', callback_data='2')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('Test:', reply_markup=reply_markup)

def button(update, context):
    query = update.callback_query
    # 必须调用这个方法,告诉Telegram服务器已收到回调请求
    query.answer()
    # 编辑原消息显示选中的选项
    query.edit_message_text(text=f"Selected option: {query.data}")

def main():
    # 替换成你自己的机器人Token
    updater = Updater("YOUR_BOT_TOKEN_HERE")
    dp = updater.dispatcher

    # 注册命令和回调处理器
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("test", choice))
    dp.add_handler(CallbackQueryHandler(button))

    # 启动机器人 polling
    updater.start_polling()
    # 保持机器人运行直到按下Ctrl+C
    updater.idle()

if __name__ == '__main__':
    main()

关键修正点说明

  • 参数结构调整:把原来的(bot, update)改成(update, context),这是v13+版本的强制要求,旧的参数写法已经被官方废弃
  • 添加query.answer():这是最容易漏掉的一步!如果不调用这个方法,Telegram不会结束回调请求,客户端会一直显示加载状态,看起来就像点击没响应
  • 完整的机器人启动流程:确保你调用了updater.start_polling()updater.idle(),很多新手会忘记这部分,导致机器人根本没启动
  • 变量命名规范:我把函数名改成了小写(比如Choicechoice),这是Python的通用规范,方便后续代码维护

额外检查项

  1. 先确认你的python-telegram-bot版本:运行pip show python-telegram-bot,如果版本低于v13,建议升级到最新稳定版:pip install --upgrade python-telegram-bot
  2. 检查你的机器人Token是否正确,有没有在BotFather那里获取到有效Token
  3. 确保你的机器人已经启动,没有被防火墙或网络问题阻挡

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

火山引擎 最新活动