Задать вопрос
@jenya7771

Как сделать несколько сценариев цепочек сообщений Telegraf.js?

Здравствуйте, как в зависимости от ответа изменить следующий вопрос или действие бота. Например если пользователь выберет сортировку по расстоянию, то как ему подсунуть вопрос с просьбой отправить геопозицию?
const categoriesWizard = new WizardScene('categories', (ctx) => {

	const keyboard = 
	Markup.keyboard(['Категория 1', 'Категория 2'], {
		columns: parseInt(2)
	})
	.oneTime()
	.resize()
	.extra()

	ctx.reply('Выбери категорию', keyboard)
	return ctx.wizard.next()
}, (ctx) => {

	const message = ctx.update.message.text

	ctx.session.categorise = {
		cat: message
	}

	const keyboard = 
	Markup.keyboard(['подкатегория 1', 'подкатегория 2'], {
		columns: parseInt(2)
	})
	.oneTime()
	.resize()
	.extra()

	ctx.reply('Выбери подкатегорию', keyboard)
	return ctx.wizard.next()
}, (ctx) => {

	const message = ctx.update.message.text

	ctx.session.categorise.sub_cat = message

	const keyboard = 
	Markup.keyboard(['По расстоянию', 'По цене'], {
		columns: parseInt(2)
	})
	.oneTime()
	.resize()
	.extra()

	ctx.reply('Как сортировать скидки?', keyboard)
	return ctx.wizard.next()
}, (ctx) => {

	const message = ctx.update.message.text

	ctx.session.categorise.sort = message

	ctx.reply(`Категория: ${ctx.session.categorise.cat}\nПодкатегория: ${ctx.session.categorise.sub_cat}\nСортировка: ${ctx.session.categorise.sort}`)
	return ctx.scene.leave()
})

Как после ответа можно валидировать ответ пользователя, спасибо!
  • Вопрос задан
  • 7400 просмотров
Подписаться 3 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Смотрите в сторону bot.hears(/какой-то regexp/) и/или bot.command('command') ну вот по памяти, можете еще доки посмотреть какие-то еще есть handler'ы.
Да, есть разница где ставить handler'ы т.к. telegraf запущен в цикле (если очень просто) и выполняет все написанное последовательно, команда за командой.
Если очень припечет, свяжитесь со мной, посмотрим ваш код, может что-то помогу )
Ответ написан
Комментировать
Можете использовать Composer.
Вот пример, так реализуете то, что Вам нужно!
https://github.com/telegraf/telegraf/blob/master/d...

Сообщите, если проблема не решится)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы