Node Telegram bot api,在用户之间进行连锁对话

我已经开始使用这个模块来编写电报的bot逻辑

我可以创build这样简单的问题和回答逻辑:

bot.onText(/\/start/, function(msg, match){ bot.sendMessage(msg.chat.id, "Hello this is great bot"); }); 

当用户键入/start他将收到此消息。

我想创build类似bot和用户之间的链接对话。 就像当用户input/buy机器人会显示购买选项时,在用户input他想要购买的机器之后,机器人将显示所选产品的types等等。

如何创build用户和机器人之间的链接对话? 如何让机器人记住以前select的命令,并重新设置时间? 为了做到这一点,我需要保留在自己的数据库中吗?

你可以用不同的方式做到这一点。

  1. 您可以存储用户在自己的“状态”
  2. 你可以使用多个独立工作的命令,但是你只需要给用户引导的感觉
  3. 您可以使用Bot API的ForceReply

好的。 所以为了1.我会说你有一些好处。 实际上,您可以指导用户,并在他不处于正确状态时限制对某些命令的访问。 所以我们假设他想买爆米花,但是他通过检查保存的用户状态来禁止命令。

对于2.你总是允许用户使用/buy/buy_popcorn/buy_shoe 。 但是,根据你的答案,你只要给他一个特定数量的可能的select。

 User: /buy What do you want to buy? /shoes or /food :Bot User: /food How about some Popcorn? Use /buy_popcorn :Bot User: /buy_shoe Alright. Shoes added to cart :Bot 

这将被允许,但用户将不得不手动编写/buy_shoe

3.可能的方法是使用ForceReply 。 用户将自动获得消息的answer to 。 所以当他使用/buy_shoe他会回答机器人发送的最后一条消息。 您还将从api的消息中获得用户回答的消息。 您可以检查用户回答的消息是否是该命令的正确的前提条件/正确的消息,然后限制或允许该命令。

 User: /buy What do you want to buy? /shoes or /food :Bot User: [Answer to: What do you...] /food How about some Popcorn? Use /buy_popcorn :Bot User: [Answer to: How about some...] /buy_shoe Sorry, but you're currently in the Food Store :Bot 

我想,这归结于个人偏好。 但所有这一切都有利有弊,你必须决定是否允许没有先决条件的特定命令。

本列表可能不完整。 也许还有其他的方法,我没有想过。 但是这三个是我所知道的。