Node Telegram bot api,在用户之间进行链接对话

Mr.*_*r.D 7 javascript node.js telegram telegram-bot

我已经开始使用这个模块为电报编写机器人逻辑

我可以像这样创建简单的问答逻辑:

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

当用户输入时,/start他将收到此消息.

我想创建像bot和用户之间的链式对话.就像用户类型/buy机器人会显示购买选项一样,在用户输入他想要购买的东西之后,机器人将显示所选产品的类型等等.

如何在用户和机器人之间创建链式对话?如何使机器人记住以前选择的命令并在时间重置它们?我需要保留在自己的数据库中才能这样做吗?

Lok*_*oki 9

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

  1. 您可以存储用户自己的"状态"
  2. 您可以使用多个可以自行运行的命令,但只是让用户感觉被引导
  3. 您可以使用ForceReplyBot API

好的.因为1.我会说你有一些好处.实际上,当用户处于正常状态时,您可以引导用户并限制对某些命令的访问.所以,假设他想要购买爆米花,但是他已经在你要求通过检查已保存的用户状态来禁止该命令.

对于2.你总是允许用户使用/buy/buy_popcorn/buy_shoe.但根据你的答案,你只需给他一些特定的选择.

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
Run Code Online (Sandbox Code Playgroud)

这是允许的,但用户必须手动编写 /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
Run Code Online (Sandbox Code Playgroud)

我想,这归结为个人偏好.但所有这些都有利有弊,你必须决定是否要在没有先决条件的情况下允许特定命令.

此列表可能不完整.可能还有其他方式,我没有想到.但这三种方式我都知道.