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

Telegram Bot callback_query_handler未触发问题求助

Telegram Bot callback_query_handler未触发问题求助

我最近在用telebot开发Telegram机器人时碰到了个棘手的问题:点击发送的inline按钮后,对应的callback_query_handler完全没触发,控制台没有任何报错,机器人的polling进程也一直在正常运行。

具体情况是:/start命令能正常执行,机器人会发送带inline按钮的消息,但点击按钮后毫无反应,回调函数里的打印语句根本没输出。我的代码如下:

from telebot import TeleBot, types

bot = TeleBot("MY_BOT_TOKEN")

@bot.message_handler(commands=["start"])
def start(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton("📤 Test", callback_data="post_0"))
    bot.send_message(message.chat.id, "Click the button", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: call.data.startswith("post_"))
def callback(call):
    print(f"Callback received: {call.data}")
    bot.answer_callback_query(call.id, "Button clicked!")

bot.polling()

可能的解决方向,你可以逐一排查:

  • 明确指定监听的更新类型
    默认情况下bot.polling()可能不会监听所有类型的更新,试试加上allowed_updates参数明确包含callback_query:

    bot.polling(allowed_updates=['message', 'callback_query'])
    

    这能确保机器人捕获到回调查询的更新请求。

  • 检查Bot Token与权限
    确认你的MY_BOT_TOKEN是从BotFather那里正确获取的,没有拼写错误。如果是在群聊中测试,还要确保机器人被添加到群里,并且拥有读取消息、发送消息的权限。

  • 更新pyTelegramBotAPI版本
    老版本的库可能存在回调处理的bug,建议升级到最新版:

    pip install pytelegrambotapi --upgrade
    
  • 简化回调处理器测试
    暂时去掉过滤条件,写一个通用的回调处理器测试是否能触发:

    @bot.callback_query_handler(func=lambda call: True)
    def test_callback(call):
        print("Callback triggered!")
        bot.answer_callback_query(call.id, "Test success")
    

    如果这个能触发,说明之前的startswith("post_")过滤逻辑可能有问题,仔细检查callback_data的拼写是否和过滤条件匹配。

  • 排查网络环境
    如果机器人在本地运行,确保你的网络能正常连接Telegram服务器,没有被防火墙、代理拦截回调请求。

备注:内容来源于stack exchange,提问作者Entasa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:08:00