Пет-проект для портфолио джуниора. Реализация

Рассмотрим реализацию квиз-чатбота на примере джавы.

Большинство java-вакансий содержат Spring/Hibernate. Этот фреймворк уже давно доминирует на рынке, и если вы его изучите, то потом легко сможете перейти на другой, потому что концепции везде одинаковые.

Предположим, что вы уже умеете писать хелловорлд на джаве и знаете все базовые конструкции языка. Как начать делать чатбота?

  1. Найти существующих ботов, посмотреть как они работают, чтобы иметь представление о конечном результате
  2. Прочитать туториал по Spring Boot, сгенерировать тестовый проект c помощью Initializr. Сделать один POST эндпоинт который будет печатать реквест в лог и в ответ отправлять {"status": "ok"}. Научиться запускать и дебажить это локально с помощью IntelliJ.
  3. Сгенерировать бота через BotFather. Установить ngrok, настроить тоннель. Подключить библиотеку для работы с телеграм или вручную, используя RestTemplate зарегистрировать вебхук. Можно делать long-poll для получения событий, но вебхук мне нравится больше
  4. Начать получать запросы от телеграма к себе на локалхост
  5. Реализовать "эхо-бота"—он отвечает то же, что ему прислали. Для этого уже нужно изучить API ботов. Важно! Нужно прочитать о переменных окружения. Ключ от вашего бота нельзя коммитить в репозиторий, потому что злоумышленник может его украсть
  6. Научиться отправлять клавиатуры. Регистрировать успешный или неуспешный ответ
  7. Найти набор вопросов. Захардкодить их прямо в программу. Написать логику которая будет сохранять "сессию" пользователя в памяти и считать его баллы
  8. У нас есть бот который уже почти готов к продакшену!
  9. Делаем аккаунт на хероку, читаем туториал "How To Deploy Spring Boot Application to Heroku"
  10. Когда получилось задеплоить вручную, читаем "How To Deploy To Heroku GitHub Actions". Пишем ямли. Вы уже знаете о E2E разработке больше, чем большинство миддлов и сеньеров! С этого момента показываете своего бота интервьюерам.
  11. Когда получилось задеплоить автоматически, нужно чтобы бот регистрировал свой вебхук при старте приложения. Это хороший момент для того чтобы сделать еще одного бота—для тестов с локалхоста.
  12. Отлично! Но после перезагрузки бот будет терять данные пользователей. Нужно иметь persistent storage. Берем постгрес на хероку, читаем туториалы по JPA и сохраняем всё туда.
  13. Создавать таблицы вручную накладно, нужно почитать о миграциях баз данных и выбрать подходящий инструмент. Все вопросы у нас захардкожены—надо перенести их в базу данных.

Можно продолжать: добавить поддержку других месенджеров, добавить абстракции для графа диалога, сделать своё приложение полностью 12-факторным, настроить мониторинг, централизованное логирование. Добавить докер-композ, сделать дашборд на графане с графиком активности пользователей, сделать сайт с топом рейтинга, сделать на сайте авторизацию через телеграм, прикрутить scheduled jobs для ежедневной отправки пользователям пуша с новостями, сделать админку или бота для добавления и редактирования вопросов.

При желании, по сложности этот проект может потягаться с тем, что вы будете делать на своей "настоящей" работе.

Алгоритм подходит для любого языка (PHP, C#, JS, Ruby). Если вы фронтендер, то вместо бота сделайте сайт, а данные храните в Firebase или FaunaDB. Мобильщики могут сделать приложение, а данные хранить там же где фронтендер.

На каждом этапе вы получите поверхностные, но достаточные знания для разработчика средней руки. Нужно уметь рассказать о каждом этапе, объяснить свои решения и зачем нужен каждый инструмент.

Джуна, который сделал такой проект, я бы взял.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred