PyTelegramBotApi中callback_query_handler无法触发下一步问题求助
问题原因
- 对
register_next_step_handler的功能理解有误:该方法仅负责注册触发器,用于监听用户下一次主动发送的普通消息,收到对应消息后才会执行绑定的处理函数,本身不会立刻执行绑定的get_price函数。你仅完成了注册操作没有主动触发消息发送,机器人自然不会有响应,直到用户发送任意消息触发了已注册的处理器,才会执行get_price发送询问提示。 - 回调查询未主动应答:Telegram 要求所有 inline keyboard 的回调请求必须在收到后15秒内给出应答,否则用户端的按钮会一直处于加载状态,直观表现为机器人卡顿。
修复方案
你需要在回调处理函数中先应答回调,再直接发送价格询问,最后注册下一步处理器等待用户回复价格即可,修改后的代码参考如下:
@bot.callback_query_handler(func=lambda call: True) def user_answer(call): user[call.message.chat.id].city_id = call.data # 应答回调,消除按钮加载状态 bot.answer_callback_query(call.id) # 直接调用get_price发送询问,不需要等待用户触发 get_price(call.message) def get_price(message): bot.send_message(message.chat.id, "What's the price?") bot.register_next_step_handler(message, save_price)
修改后用户点击inline按钮即可立刻收到价格询问,无需额外发送消息触发流程。
内容的提问来源于stack exchange,提问作者Vladislav Mikhailov
相关产品推荐
相关产品推荐

