BotFlux
BotFlux — Java‑фреймворк для построения диалоговых систем и чат‑ботов, работающих в нескольких каналах (Telegram, VK, Web и др.) на едином ядре.
BotFlux позволяет писать бизнес‑логику быстрее, чем при прямой работе с SDK мессенджеров, и при этом сохранять строгую архитектуру, тестируемость и возможность роста проекта.
Что такое BotFlux
BotFlux — это не SDK конкретного мессенджера и не low‑code конструктор с жёсткими ограничениями.
Это runtime и архитектурный слой, который:
- изолирует бизнес‑логику от конкретных каналов доставки сообщений
- предоставляет единый жизненный цикл компонентов
- позволяет запускать один и тот же код в нескольких каналах без переписывания логики
- обеспечивает взаимозаменяемость компонентов (например, выбор или замена JSON-сериализатора, кэша, HTTP транспорта или других инфраструктурных компонентов без изменения бизнес-логики)
Ключевые идеи
- Разделение ответственности
Gateway отвечает за интеграцию с внешним миром, Dispatcher — за обработку событий и бизнес‑логику.
- Абстрактные действия и события
Отправка сообщений, кнопок и медиа описывается через выполнение действий, а приём сообщений, нажатий кнопок и других пользовательских взаимодействий — через события, без прямых вызовов API конкретных мессенджеров
- Единый жизненный цикл
Все компоненты управляются централизованно и корректно запускаются и останавливаются.
- Абстрактные медиа
Фото, видео, аудио, голосовые сообщения и видео-заметки представлены единым типом BotMedia, который можно принимать и отправлять, а также читать и записывать на диск в реактивном виде на основе Flux<ByteBuffer>.
- Минимальный старт и тонкая настройка
Bootstrap автоматически обнаруживает компоненты через ServiceLoader, что позволяет запускать минимальный проект без дополнительной конфигурации, при этом сохраняя возможность явной настройки и замены каждого компонента при необходимости.
- Graceful shutdown
Поддерживается корректное завершение работы с таймаутами ожидания для завершения обработки событий без потери сообщений.
- Согласованное выполнение
BotFlux гарантирует согласованную работу всех gateway; при сбое одного из них BotFlux корректно останавливает остальные.
Минимальный пример
Простейший текстовый эхо-бот с одним gateway:
BotFluxBootstrap.go()
.autoInfrastructure() // (1)!
.dispatcherProvider(PipelineDispatcherProviderBuilder.builder() // (2)!
.methodHandlerFlow(flow -> flow
.when(n -> n // (3)!
.into(BotFlowUtil::getText) // (4)!
.then(BotFlowUtil::sendText)) // (5)!
.execute()) // (6)!
.build())
.gateway(telegram() // (7)!
.token(System.getenv("TELEGRAM_TOKEN")) // (8)!
.intent())
.commit() // (9)!
.create() // (10)!
.start(); // (11)!
- автоматический выбор компонентов инфраструктуры
- бизнес-логика
- вариант
- есть текст?
- вернём его (эхо-бот)
- конец вариантов
- телеграм шлюз
- телеграм токен из окружения
- последний шлюз
- создаём BF
- запускаем BF
В этом примере:
- используется Telegram как канал доставки
- логика не зависит от Telegram API
- тот же dispatcher может быть запущен с другим gateway без изменений (добавить ещё один
.gateway(...)перед вызовом.commit())
Что вы получаете из коробки
- единый runtime для нескольких каналов
- чёткие контракты между слоями системы
- реактивную модель обработки событий
- централизованный жизненный цикл компонентов
- возможность graceful shutdown
Уровни использования
BotFlux не навязывает единый стиль разработки:
- Быстрый старт
Минимальный объём кода, простые обработчики на лямбда-функциях, быстрый результат.
- Структурированная логика
Несколько gateway, управление состояниями, виртуальный URI (для MVC-подобной организации логики), переиспользуемые сценарии.
- Полный контроль
Конфигурация инфраструктурных компонентов (SSL, proxy, политики кэширования), собственные компоненты (HTTP/WS-транспорт, сериализатор, кэш), gateway для пользовательских платформ.
Куда идти дальше
- Quick Start — запуск первого бота в браузере за несколько минут
- Concepts — обзор внутреннего устройства BotFlux
- Gateways — поддерживаемые каналы и их особенности
- Testing — тестирование ботов и бизнес‑логики