Как корректно управлять Телеграм Бот-Общением в многопотоке?

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 495
Благодарностей
1 304
Баллы
113
Всем доброго времени. Посоветуйте, пожалуйста. Создал допустим я телеграм бот и через getUpdates?offset получаю последние сообщения от пользователей. После того, как боту кто-то напишет, либо нажмет на заготовленные кнопки в боте, бот делает определенные действия и отвечает человеку. А как быть, если допустим бот настроен на многопоточную обработку сообщений и для приема заданий от пользователей, им (пользователям) нужно оставить определенные данные. Допустим, человек нажал кнопку в боте - заказать услугу. Бот в ответ задает перечень вопросов, на которые человек должен ответить, например:
Бот: Ваше Имя?
- Человек отвечает: Иван
Бот: Отправьте мне ваш URL
- Человек отвечает: https://zennolab.com/
Бот:
Верно ли я записал ваши данные?
Имя: Иван
URL: https://zennolab.com/

И дальше уже бот выставляет две кнопки - Да - Нет.

Тут вопрос вот в чем. Если запустить такого бота, то в общение с одним человеком, еще куда не шло, т.е. бот задает вопрос и ждет от него ответ на этапе вопроса, который задал, но как быть, если пишут параллельно несколько человек боту, и у каждого может быть свой этап вопроса от бота, допустим для Пользователя (Андрей) - вопрос про Имя, для пользователя (Юрий) - вопрос про ссылку и в результате мы получаем, что каждому вопрос мы задали, но как контролировать, кто из пользователей и на какой вопрос ответил в данный момент, что бы потом оперативно боту продолжить задавать последовательные вопросы? Т.е. боту нужно понимать, что сейчас он ждет от Пользователя (Андрея) на протяжении 12 часов именно имя, а не ссылку или что-то еще, а от пользователя (Юрия) мы 12 часов ждем именно ссылку, а не имя и т.д?

В голову приходит только 1 вариант, это в блокноте или в базе данных хранить последний этап общения с пользователем и когда пользователь что-то напишет, мы по его user_id сверяем что же он последний раз спрашивал и тогда соответственно отталкиваясь от этого - будет отвечать.
 

dmitriy1384

Client
Регистрация
04.11.2013
Сообщения
377
Благодарностей
133
Баллы
43
Я делаю так:
Записываю в БД последнее действие, которое произвел пользователь.
При следующем нажатии кнопки этим пользователем проверяю, где он остановился и исходя из этого выдаю ему ответ и дальше опять записываю последнее действие.
 
  • Спасибо
Реакции: Gunjubasik

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)