dd
← Назад

Последние 26 часов я делал телеграм-бота для местной РСО

admin | 14.04.22 15:33

Сегодня я очень рад и доволен собой!


Бот представляет из себя урезанный, но от того не менее полезный, функционал личного кабинета.

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

В прошлом я уже делал бота для этой компании, правда там функционал был совсем небольшой: всего лишь передача показаний по счётчикам. Тот бот был написан на коленке и как можно скорее, а потому не имел за собой никаких тестов и перед выдачей проверялся просто руками. Всё это привело к тому, что бот всё-таки работает, но развивать его нереально. В этот раз, естественно, всё делалось через тесты.


Так как изначально курс был взят на независимость от платформы, то тесты и DI показали себя здесь в полной красе. Я теперь официально в эту тему влюблён.

Все зависимости от внешних сервисов, базы и тд были вынесены за интерфейсы и через DI вместо них подключались самые простецкие заглушки.

Таким образом, мне абсолютно ничего не мешало пилить чистый функционал бота и формировать свои требования к формату входных и выходных данных, независимых от конкретного бота.


В качестве выходных данных были выбраны «сообщение» (обёртка над строкой) и «действия» (простые dto с описанием того что надо будет сделать и каким текстом это показать пользователю).

Все популярные платформы поддерживают подобные схемы в том или ином виде.

Как это выглядит в итоге в телеграме:


Кстати, разработки обёртки, которая отдаёт данные в машину и отправляет ответ пользователю, заняла около часа + ещё час ушёл на мелкие доработки, вроде удаления кнопок действия после того как пользователь выбрал одно из действий. В итоге сильно выиграем в дальнейшем при разработке ботов для других платформ.

Добавление же новых кнопок или состояний будет тоже занимать мало времени: добавляем «действие», его обработчик, пишем небольшой тест и в продакшен.


В общем, это был очень полезный опыт разработки отдельно от внешней среды. Хоть я и раньше знал как это всё делается, но пощупать в таком масштабе этот приём крайне интересно.