Уважаемые товарищи! Помогите пожалуйста разобраться. Имеется телеграм бот, нужно сделать вопрос (от бота) ответ (от администратора), т.е. к примеру бот спрашивает: "Введите текст оповещения" и пока администратор не ввел текст чтобы ничего не происходило, после ввода текста - следующий вопрос: "Отправьте картинку" и т.д. Я так понял, что нужно делать сеанс, но как это делается - я не могу сообразить, примеров тоже не нашел. Может кто то сможет подсказать или пример кода скинуть. Может можно без сеанса как то сделать, буду рад любому ответу!
bobrui4anin, что такое сеанс для вас? У вас должен быть список разрешенных команд. Когда админ присылает одну из них, вы реагируете. Если нет, молчите или делаете дефолтное действие.
> "Введите текст оповещения" и пока администратор не ввел текст чтобы ничего не происходило
С чего вы взяли, что что-то будет происходить, если пользователь ничего не введет? Бот не заработает, пока его не пнуть.
> так понял, что нужно делать сеанс, но как это делается - я не могу сообразить, примеров тоже не нашел.
Хранить последнюю команду в базе и сравнивать ее с пришедшей от админа.
mad_maximus, Спасибо за ответ. Т.е. это примерно будет выглядеть - как с callback_query. А записывать в базу - Вы имеете ввиду, к примеру: 'text' => '/something' ...
bobrui4anin, неважно, callback_query или обычные команды. Вы просто отслеживаете прогресс через нажатые команды. Если пользователь нажал какую-то команду (допустим, /start), вы совершаете соответствующие действия, сохраняете команду в базу в поле (last_command, допустим), и дальше проверяете, какая последняя команда в таблице у этого пользователя и соответственно ей показываете другие команды. Суть в том, что если какое-то действие зафейлится, вы так же можете его обработать правильно, потому что точно знаете, на какой итерации находитесь.
У каждого клиента есть его идентификатор.
Я, когда делал такого бота, сохранял лог общения с ботом в БД. И когда на сервер приходил запрос, я проверял, что этот пользователь ответил на предыдущий вопрос и отправлял соответствующее сообщение.
Идентификатор - Вы имеете ввиду чат ID (он же ['from']['ID']. Хорошо, а можно пример сохранения лога в бд (что именно сохраняли, может флаги какие то ставили) и ожидания ответа (приходила идея вечного цикла до получения ответа (но она вроде не реализуема)) и переключения вопроса на следующий. У меня была еще идея на callback_query сделать, но ничего красивого не вышло... Спасибо за ответ!
bobrui4anin, Пример не найду. Давно делал.
Да, речь идет о ['from']['ID'].
У вас ведь при ответе от пользователя, приходит запрос на вебхук, вы получаете какие-то данные: что за кнопку пользователь нажал, что он в ответ ввел и тп.
Вышеуказанную информацию нужно писать в БД, то есть записывать id пользователя, действие, которое он совершил, время и любую другую нужную информацию. При следующем запросе, вы на сервере получаете id пользователя, делаете запрос в БД и вот у вас вся история общения с этим пользователем, то есть как бы сеанс.
UPD вечный цикл вам не поможет, потому что сервер у вас один, а клиентов много. Сервер просто реагирует на поступающий запрос и не хранит никакой истории.