我正在使用模块python-telegram-bot
。
我想写一个类似于@vkmusic_bot
的机器人:
.mp3
文件发送给用户 Episode II: Customizing serialization using the gson library in the Mobile Services Android client
我的问题是关于处理回调的。尤其是我对第2步感到困惑-如何创建菜单以及机器人如何解析用户的选择?
答案 0 :(得分:0)
免责声明:我使用了一个不同的框架,因此在curl
中将为您提供指向Telegram Bot API文档和示例的链接。下面的所有内容仅是示例;有很多方法可以实现您的目标。
如何制作菜单?
如果要发送与示例图片相似的菜单,请使用inline keyboard。
基本上,这里的菜单是InlineKeyboardMarkup
object,其中包含InlineKeyboardButton
objects的数组。每个按钮必须指定2个属性:
text
-这只是一个按钮的标题callback_data
-此属性保存一个文本数据,稍后它将被bot用于确定用户按下了哪个按钮。如何将信息存储在此属性中取决于您。 请注意,此属性的大小限制为64个字节。 因此callback_data
可用于标识特定的.mp3
文件。这有点像一个按钮的id
和一首歌曲的id
。也许,您应该在硬盘驱动器(例如)上的文件路径与其各自的id
的路径之间存储关联。 Bot应该能够找到具有给定id
的数据库中的文件路径,然后在磁盘上找到文件。
最后,当您的菜单准备就绪时,将其作为reply_markup
method中的sendMessage
属性发送。
简单的curl
示例:
curl -v -H "Content-Type: application/json" \
-d '{"chat_id": <YOUR_USER_ID>, "text": "Choose the song:", "reply_markup": {"inline_keyboard": [[{"text": "song 1", "callback_data": "file78435675234"}],[{"text": "song 2", "callback_data": "file789231467982134"}],[{"text": "song 3", "callback_data": "file135423854423"}]]}}' \
https://api.telegram.org/bot<YOUR_BOT_ID>/sendMessage
机器人如何解析用户的选择?
如果您使用上例中的嵌入式键盘,则bot可以从传入object的data
update的CallbackQuery
属性中检索有关用户选择的信息。
因此,当用户按下菜单中的特定按钮时,漫游器会收到该按钮的1)user_id
和2)callback_data
。
借助此信息,机器人将能够在磁盘上找到所需的.mp3
文件,然后使用sendAudio
method将此文件发送给用户。