tregor
@tregor
Middle PHP Backend developer

Как лучше организовать Telegram бота с несколькими экранами?

Приветствую!

Задача такова - имеем несколько экранов бота телеграм, между которыми надо передвигаться. Для примера возьмём следующую структуру:
Главная -> Баланс -> История платежей.
На экране "История платежей" мы можем ввести текстом дату и бот должен показать платежи за эту дату. Бот, получив сообщение, сначала должен понять что это сообщение с экрана "История платежей", а потом уже парсить полученный текст на предмет корректной даты.

Теперь вопрос - как это всё организовать?
Пока единственный вариант, который есть в голове, это хранить какой то Step пользователя. Типа таблицы в БД, где есть UserID и Step, в Step храним соответственно текущую страницу пользователя (страница "Баланс" к примеру)
И когда мы вводим дату мы берем этот Step, видим, что находится юзер на странице "История платежей" и соответственно парсим текст. Либо юзер на другой странице, и там соответственно другие действия.

Но как то это всё дерьмово выглядит, неудобно хранится, ненадёжно, легко ломается (если юзер сделает простейшую манипуляцию типа рестарта бота)
Есть ли у кого либо решения?

P.S.: Да, интерес в самом алгоритме, а не в реализации. Так что можете приводить примеры хоть на Java, но лучше не стоит)

UPD: К сожалению, решений удобных не нашёл. В своём проекте остановился на единственном, описанном выше решении - хранить user_step в БД.
  • Вопрос задан
  • 409 просмотров
Пригласить эксперта
Ответы на вопрос 2
Danya_Violet
@Danya_Violet
Системный администратор
Можно использовать Inline Keyboard для создания меню

Пример GIF
Ответ написан
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
Как вариант можно саму команду редактировать. я не знаю как устроено api у телеги, но к примеру:
1) Человек написал дату будучи на странице "История платежей"
2) Мы парсим текст и формируем для себя по сути что-то типа url'a. И сам текст спаршенный уже записываем к себе в виде: '/История платежей?date="дата, которую ввел юзер"'
3) Дальше уже эту команду отправляем дальше и обрабатываем по все канонам.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы