Последовательность ответов-вопросов телеграм бота node.js

Делаю телеграм бота, который может поддержать беседу с человеком, но не знаю как сделать так, чтобы бот задавал вопрос и только следующее сообщения после этого вопроса воспринимал как ответ и отвечал соответственно. Например в моем коде, бот задает вопрос "Чем занимаешься?" и я хочу чтобы только следующее сообщение воспринималось как ответ, и бот отвечал что-то типа "Очень интересное занятие!"

Мой код:

if (text.toLowerCase()==='давай') { 
            await bot.sendMessage(chatId, 'Чем занимаешься?')
        }

Я хотел написать в этой же ветке новое условие if, но бот пишет сообщение из новой ветки, не дождавшись ответа пользователя

if (text.toLowerCase()==='давай') { 
            await bot.sendMessage(chatId, 'Чем занимаешься?')
                if (text) {
                   return await bot.sendMessage(chatId, 'Очень интересное занятие!')
                }
        }

Уже не знаю как внедрить такой функционал, искал подобные вопросы, но не нашел в них подходящего для меня ответа, надеюсь на помощь


Ответы (1 шт):

Автор решения: Rudi

Можешь что-то типа этого сделать. Вообще "поддержать беседу" довольно сложная задача, чтобы бот не казался "деревянным".. Для примера вопрос о любимом цвете, но анализ текста гораздо сложнее, чем просто условия if else.. Вопрос больше касается не телеграм ботов, а азов программирования, их стоит подтянуть. Области видимости, циклы и т.д. потому, что не сегодня - завтра понадобятся.

let marker = ""
bot.on('message', function(msg) {
  let chatId = msg.from.id, text = msg.text;

  if (text.toLowerCase() === 'давай') {
    bot.sendMessage(chatId, 'Чем занимаешься?');
    text = null;
    marker = "marker_0";
  }

  if (text && marker === "marker_0") {
    bot.sendMessage(chatId, 'Очень интересное занятие! Какой твой любимый цвет?');
    text = null;
    marker = "marker_1";
  }

  if (text && marker === "marker_1") {
    let txt = defineColor(text);
    bot.sendMessage(chatId, `${txt} Ты любишь пешие походы?`);
    text = null;
    marker = "marker_2";
  }
  
});


function defineColor(text) {
  let txt = text.toLowerCase();
  if (txt.includes("чёрный") || txt.includes("чeрный") || txt.includes("чорный")) { // учти что могут быть ошибки, другие языки да кто знает, как человек ответит..
    return "Вау! И я люблю черный!";
  }else {
    return "Круто! А я люблю черный!";
  }
}

→ Ссылка