Я хотел бы иметь небольшого бота Telegram на python, где команда выдается пользователем, бот задает вопрос и реагирует в зависимости от ответа. В официальном API Telegram упоминается, что это возможно с помощью ForceReply(), например, для создания опросов шаг за шагом, см. Здесь Официальный API Telegram # ForceReply.
Я написал следующий код:
def test_function(update: Update, context: CallbackContext) -> None: msg = context.bot.send_message(chat_id=update.message.chat_id, text=»Please enter some text.», reply_markup=telegram.ForceReply(True)) if __name__ == ‘__main__’: dispatcher.add_handler(CommandHandler(«test», test_function)) updater.start_polling() updater.idle()
Так когда /test выдается пользователем, ему предлагается ввести какой-то текст и из-за ForceReply(True) , пользователь вынужден ответить на сообщение. Но как мне получить результат этого ответа, то есть текст, на который ответил пользователь? В документации API нет намека, и я также потратил некоторое время на поиск в Интернете и на SO, но ничего не нашел. Поэтому, скорее всего, ответ прост и понятен, но я его пока не понимаю.
Creating and using a Telegram Bot with Java
Любая помощь приветствуется.
user12463491 19 ноя ’20 в 20:00 2020-11-19 20:00
2020-11-19 20:00
2 ответа
рамки айограммы уже решили вашу задачу
Каждый шаг — это состояние пользователя.
Это называется FSM ( finite state machine ).
Вам даже не нужно что-то делать с ForceReply .
пример
Источник: stackru.com
используйте опцию ForceReply для получения ввода от пользователя без ответа в телеграмме
Как использовать ForceReply в боте Telegram
Я разрабатываю бот для телеграмм, используя php и веб-крючок. Все нормально, но иногда хочется «дождаться ответа» от пользователя. Например:
Если клиент пишет / info без каких-либо параметров, я хотел бы показать сообщение об использовании, а также запросить и дождаться параметра идентификатора.
Я знаю, что есть свойство ForceReply для принудительного ответа, но когда я его настраиваю, ничего не происходит, и я не знаю, как узнать, является ли сообщение клиента ответом на мой вопрос.
Должен ли я приостанавливать работу моего php-сервера? (Я думаю, это будет плохой практикой) Нужно ли мне ждать какого-то сообщения?
aleksdj 10 Июл 2015 в 00:03
1 ответ
Лучший ответ
Когда вы используете getUpdates или получаете обновления через веб-перехватчик, сообщение об обновлении будет содержать поле, подобное полю reply_to_message . Вы можете использовать это, чтобы сравнить его с отправленным вами сообщением.
Если вы запускаете свой сценарий через веб-перехватчики, я бы предположил, что он выполняется только при получении сообщения. Если это так, я бы посоветовал вам использовать что-то вроде memcache / redis для хранения сообщения, на которое вы ожидаете ответа, а затем, когда он придет, вы можете сравнить его с сохраненным значением:
How to create Telegram Bot in Java
reply_to_message == $cache->get(‘original.message.id’))
В приведенном выше примере показан «псевдокод», который можно использовать в веб-перехватчике для проверки ответа на конкретное сообщение.
Источник: question-it.com