Рассмотрим реализацию квиз-чатбота на примере джавы.
Большинство java-вакансий содержат Spring/Hibernate. Этот фреймворк уже давно доминирует на рынке, и если вы его изучите, то потом легко сможете перейти на другой, потому что концепции везде одинаковые.
Предположим, что вы уже умеете писать хелловорлд на джаве и знаете все базовые конструкции языка. Как начать делать чатбота?
- Найти существующих ботов, посмотреть как они работают, чтобы иметь представление о конечном результате
- Прочитать туториал по Spring Boot, сгенерировать тестовый проект c помощью Initializr. Сделать один
POST
эндпоинт который будет печатать реквест в лог и в ответ отправлять{"status": "ok"}
. Научиться запускать и дебажить это локально с помощью IntelliJ. - Сгенерировать бота через BotFather. Установить ngrok, настроить тоннель. Подключить библиотеку для работы с телеграм или вручную, используя RestTemplate зарегистрировать вебхук. Можно делать long-poll для получения событий, но вебхук мне нравится больше
- Начать получать запросы от телеграма к себе на локалхост
- Реализовать "эхо-бота"—он отвечает то же, что ему прислали. Для этого уже нужно изучить API ботов. Важно! Нужно прочитать о переменных окружения. Ключ от вашего бота нельзя коммитить в репозиторий, потому что злоумышленник может его украсть
- Научиться отправлять клавиатуры. Регистрировать успешный или неуспешный ответ
- Найти набор вопросов. Захардкодить их прямо в программу. Написать логику которая будет сохранять "сессию" пользователя в памяти и считать его баллы
- У нас есть бот который уже почти готов к продакшену!
- Делаем аккаунт на хероку, читаем туториал "How To Deploy Spring Boot Application to Heroku"
- Когда получилось задеплоить вручную, читаем "How To Deploy To Heroku GitHub Actions". Пишем ямли. Вы уже знаете о E2E разработке больше, чем большинство миддлов и сеньеров! С этого момента показываете своего бота интервьюерам.
- Когда получилось задеплоить автоматически, нужно чтобы бот регистрировал свой вебхук при старте приложения. Это хороший момент для того чтобы сделать еще одного бота—для тестов с локалхоста.
- Отлично! Но после перезагрузки бот будет терять данные пользователей. Нужно иметь persistent storage. Берем постгрес на хероку, читаем туториалы по JPA и сохраняем всё туда.
- Создавать таблицы вручную накладно, нужно почитать о миграциях баз данных и выбрать подходящий инструмент. Все вопросы у нас захардкожены—надо перенести их в базу данных.
Можно продолжать: добавить поддержку других месенджеров, добавить абстракции для графа диалога, сделать своё приложение полностью 12-факторным, настроить мониторинг, централизованное логирование. Добавить докер-композ, сделать дашборд на графане с графиком активности пользователей, сделать сайт с топом рейтинга, сделать на сайте авторизацию через телеграм, прикрутить scheduled jobs для ежедневной отправки пользователям пуша с новостями, сделать админку или бота для добавления и редактирования вопросов.
При желании, по сложности этот проект может потягаться с тем, что вы будете делать на своей "настоящей" работе.
Алгоритм подходит для любого языка (PHP, C#, JS, Ruby). Если вы фронтендер, то вместо бота сделайте сайт, а данные храните в Firebase или FaunaDB. Мобильщики могут сделать приложение, а данные хранить там же где фронтендер.
На каждом этапе вы получите поверхностные, но достаточные знания для разработчика средней руки. Нужно уметь рассказать о каждом этапе, объяснить свои решения и зачем нужен каждый инструмент.
Джуна, который сделал такой проект, я бы взял.
Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred