Найти тему
Django | Python

9. Выстраиваем диалог между пользователем и Telegram ботом.

Создаем анкету (опрос), пользователь должен пройти последовательность шагов, где Handler сообщает системе, каким должен быть следующий шаг. В зависимости от ответа, последовательность может меняться.

Для этого используется обработчик ConversationHandler — позволяет строить (описывать) диалоги со сложной логикой. У каждого ConversationHandler есть:

entry_points — запускает данный диалог, точка входа.

states — шаги диалога, у каждого шага есть название и обработчик на который этот шаг реагирует.

fallbacks — выход из диалога или можно использовать при некорректном вводе информации пользователем.

1. В файле utility.py создадим дополнительную кнопку «Заполнить анкету».

-2

2. В файл bot.py импортируем ConversationHandler, и создаем базовую структуру обработчика.

-3

Вход в диалог — это один или несколько обработчиков, после срабатывания диалог будет считаться начатым.

3. Сделаем так чтобы диалог начинался с фразы «Заполнить анкету» или при нажатии кнопки «Заполнить анкету».

-4

4. В файле handlers.py создаем функцию anketa_start(). Функция будет убирать основную клавиатуру с помощью ReplyKeyboardRemove и определять следующий шаг диалога по ключу user_name.

-5

5. Добавим ключ user_name в словарь states файла bot.py, указав следующий шаг функция anketa_get_name().

-6

6. В файле handlers.py создаем (описываем) функцию anketa_get_name() и в ней укажем ключ user_age. 

-7

7. Следующий шаг ссылается на функцию anketa_get_age(). В файле handlers.py создаем (описываем) функцию anketa_get_age() и в ней укажем ключ evalution. Для реализации клавиатуры понадобится импортировать ReplyKeyboardMarkup.

-8

8. Следующий шаг ссылается на функцию anketa_get_evalution(). В файле handlers.py создаем (описываем) функцию anketa_get_evalution() и в ней укажем ключ comment.

-9

9. Завершаем нашу анкету (диалог) создав две функции anketa_exit_comment() и anketa_comment().

-10

10. Что бы избежать получения от пользователя текста вместо цифр или цифр не указанных на шаге, где пользователь оценивает статью нажимая на кнопки от 1 до 5. Используем Failback для проверки введенных данных и создадим функцию реагирующую на неправильный ответ. 

-11

11. Для того чтобы в телефонном клиенте клавиатура не растягивалась на пол экрана, добавим resize_keyboard=True.

-12

Запускаем Telegram бота и проверяем работоспособность.

Фиксируем изменения программы в Git репозиторий и по необходимости выкладываем на сайт GitHub. Написанный код в этой статье можно скачать (скопировать) на GitHub.

Предыдущие статьи из серии Python Telegram Bot:

8. Рефакторинг кода Telegram бота.

7. Telegram бот запрашивает местоположение и контакты пользователя.

6. Добавим клавиатуру и научим Telegram бота рассказывать анекдоты.

5. Выкладываем код Telegram бота на GitHub.

4. Учим Telegram бота обрабатывать текстовые сообщения.

3. Научим Telegram бота сообщать о его запуске и здороваться.

2. Создаем и регистрируем бота в BotFather.

1. Создаем проект и настраиваем Git репозиторий.