我正在为房地产中介制作机器人。Bot发送包含有关公寓信息的消息。Bot可以一次发送多个消息,供用户从中选择。如何执行选择消息之一的过程?当我在邮件上创建一个内联按钮时,当用户单击该按钮时,由于某种原因,最后一条消息的ID返回给该漫游器,也就是说,如果漫游器已使用“选择”按钮发送了三则消息,然后,当单击第一个时,将返回最后一个。我想这样做,以便例如用户可以回复一条消息,从而选择一个特定的消息,但是我不明白如何将用户的消息与他回复的消息相关联。我该如何做得更好?
当用户单击它时,由于某种原因,最后一条消息的ID将返回给机器人
如果您要发送3个包含内联按钮键盘的不同消息,则这不是预期的行为,单击任何按钮后,都会创建一个新的回调查询更新,其中包含用户也单击其按钮的消息ID。您应该检查一下以确保。
您需要的是callback_data
:
InlineKeyboardButton具有callback_data
字段。那是专门为您准备的,您可以放入apartment_id callback_data
,然后当用户单击任何按钮时,您还将收到,callback_data
并且您将知道该apartment_id
用户单击了哪个按钮。
您没有提到要使用哪个库,但是请在python库中检查此示例。
def start(update: Update, context: CallbackContext) -> None:
keyboard = [
[
InlineKeyboardButton("Option 1", callback_data='1'),
InlineKeyboardButton("Option 2", callback_data='2'),
],
[InlineKeyboardButton("Option 3", callback_data='3')],
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Please choose:', reply_markup=reply_markup)
def button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
# CallbackQueries need to be answered, even if no notification to the user is needed
# Some clients may have trouble otherwise. See https://core.telegram.org/bots/api#callbackquery
query.answer()
query.edit_message_text(text="Selected option: {}".format(query.data))
def main():
# Create the Updater and pass it your bot's token.
# Make sure to set use_context=True to use the new context based callbacks
# Post version 12 this will no longer be necessary
updater = Updater("TOKEN", use_context=True)
updater.dispatcher.add_handler(CommandHandler('start', start))
updater.dispatcher.add_handler(CallbackQueryHandler(button))
在示例中,如果用户单击第一个按钮,Option 1
则query
内部button
功能将为“ 1”。如果他们点击第二个按钮Option 2
,然后你会收到2
的query
。现在不是1
和2
你可以存储每间公寓的ID。如果您有用于多种用途的按钮,则可以使用短短语(例如apartment_id:1
或)来区分它们close_button
。在处理更新时,您可以将查询分隔为:
,如果split[0]
是,则进行apartment_id
处理,split[2]
否则您将知道用户单击了其他按钮。
因此callback_data
,有限的数据库可以解决此类问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句