Есть ли какие-то общепринятые шаблоны для написания ботов?
Пишу бота для телеграмма. Как не гуглил, а везде лишь мануалы по отправке сообщений и прочего. Меня интересует архитектура бота.
Мой бот простой и по сути заменяет UI программы. Я сделал что-то вроде state-machine, но без явных переходов от одного состояния к другому. Т.е. у меня есть куча классов-наследников BaseBotState класса с методом Activate.
Текущее состояние хранится в объекте, описывающем пользователя.
Функция Activate изменяет текущее состояние пользователя и при следующем сообщении вызывается уже другой State.
Есть ли более правильные подходы похожие на мой? Этакий best-practices?
Извиняюсь, если вопрос не совсем конкретный.
Ответы (1 шт):
В свое время тоже задавался этим вопросом. Бота правда так и не написал. Но мысль была примерно следующая.
Есть такие вещи как WorkflowEngine. Их много, от очень старых, предложенных Microsoft до OpenSource реализаций. В нем мы можем задавать состояния в которых находится "таска" и куда она может перейти в зависимости от условий.
По сути наш диалог с ботом это и есть переходы по состояниям (по дереву состояний). Это и есть конечный автомат с набором состояний и переходов. Но чтобы самому не изобретать велосипед, я бы взял за основу какой-нибудь WorkflowEngine. А для работы с данными и внешними сервисами можно использовать обычную монолитную архитектуру с типовыми Provider'ами и Service'ами работающими через IoC контейнер.
Боты обычно не сильно сложные а потому нет смысла городить какие-то микросервисы.