2016-01-28 1 views
6

Я начал писать бот логику для телеграммы с помощью этого moduleУзел Телеграмма боты апите, сделать цепной разговор между пользователем

я могу создать простой вопрос и ответ логику как это:

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

если пользователь типы /start он получит это сообщение.

Я хочу создать нечто вроде цепного разговора между ботом и пользователем. Например, когда пользовательские типы /buy бот покажет варианты для покупки, после этого пользователь вводит то, что хочет купить, тогда бот покажет типы выбранного продукта и так далее.

Как можно создать цепочный разговор между пользователем и ботом? Как заставить бота помнить предыдущие выбранные команды и сбросить их, когда настало время? Нужно ли хранить мою собственную базу данных, чтобы сделать это?

ответ

8

Вы можете сделать это по-разному.

  1. Вы можете хранить «состояние» пользователь в себе
  2. Вы можете использовать несколько команд, которые будут работать сами по себе, но вы просто дать пользователю чувство руководствуясь
  3. Вы можете использовать ForceReply бота API

Alright. Итак, для 1. Я бы сказал, что у вас есть некоторые преимущества. Вы можете фактически управлять пользователем и ограничивать доступ к некоторым командам, когда он не находится в правильном состоянии. Итак, скажем, он хочет купить Popcorn, но он находится в shoestore, который вы бы запретили команде, проверив сохраненное состояние пользователя.

Для 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 

Это будет разрешено, но пользователю придется вручную написать /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 

Это зависит от личных предпочтений, я думаю. Но все это имеет свои плюсы и минусы, и вам нужно решить, хотите ли вы разрешать конкретные команды без предварительного условия.

Этот список может быть неполным. Может быть, есть и другие способы, о которых я не думал. Но эти 3 пути я знаю.

+0

Спасибо за ваши ответы. –

 Смежные вопросы

  • Нет связанных вопросов^_^