Telegram-бот с вводом и клавиатурой

Для реализации Телеграм-бота использую telegraf. Пытаюсь сделать бота для тестов, но с вводом информации.

  1. При старте бота (/start) выдаётся приветственное сообщение с предложением ввода ФИО.
  2. После ввода, необходимо получить введённую информацию от пользователя.
  3. Бот отсылает "клавиатуру" с уровнем или квалификацией
  4. На основании выбранной квалификации бот начинает кидать тесты с вариантами ответов.

С чем на данный момент столкнулся.

Если делаю бота для получения инфы от пользователя, то клавиатура появляется, но при нажатии на кнопку бот опять ждёт ввода от пользователя или опять печатает клавиатуру.

Как организовать код для последовательного прохождения указанного процесса?

import * as dotenv from 'dotenv';
import pkg from 'telegraf';
const { Telegraf, Extra, Markup } = pkg;

dotenv.config();
const bot = new Telegraf(process.env.BOT_TOKEN);

let fio = [];

bot.start((ctx) => ctx.reply('Приветствую, введите ФИО!'));

bot.use(async (ctx, next) => {
  if ('text' in ctx.message) {
    fio = ctx.message.text.split(' ');
  }

  await next();
});

const proff = await getProfession();
const listMarkup = [];
for (const career of proff) {
  listMarkup.push(Markup.callbackButton(career.career, career.career));
}

bot.use(async (ctx) => {
  ctx.reply(
    'Выберите Ваш уровень:',
    Extra.markup(Markup.inlineKeyboard([...listMarkup]))
  );
});

bot.action('web', async (ctx) => {
  ctx.context.levels = ctx.message
  ctx.reply('/quiz')
});

bot.on('quiz', (ctx) =>
  ctx.sendPoll(
    `Для чего нужен тег 'aside'?`,
    ['True', 'False'],
    {
      correct_option_id: 0,
    }
  )
);

bot.launch();

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