В прошлой статье я рассказывал о фреймворке Alice-ktx, и с тех пор в нём появилось много нового. Давайте разберём ключевые изменения.
Документация
Первое, что стоит отметить — с момента прошлой статьи появилась полноценная документация, которая упрощает работу с фреймворком.
Environment
При использовании Handler вы работаете в так называемом окружении. Существует два типа окружения:
-
ShouldRequestEnvironment — используется в методе shouldHandle.
-
ProcessRequestEnvironment — наследует ShouldRequestEnvironment и применяется в processRequest.
interface ShouldRequestEnvironment { val message: MessageRequest // Тело запроса. val context: ReadOnlyFSMContext // FSM Context (только для чтения). val dialogApi: DialogApi? // Методы взаимодействия с API Диалогов. fun isValidFor(filter: Filter): Boolean = filter.checkFor(this) } interface ProcessRequestEnvironment : ShouldRequestEnvironment { override val context: MutableFSMContext // FSM Context с возможностью изменения. }
Методы Handler
-
shouldHandle — определяет, подходит ли хэндлер для обработки текущего сообщения.
-
processRequest — выполняет обработку и формирует ответ.
interface Handler { suspend fun shouldHandle(request: ShouldRequestEnvironment): Boolean suspend fun processRequest(request: ProcessRequestEnvironment): MessageResponse }
окружение используется не только в Handler, но и в:
-
NetworkErrorHandler — для обработки ошибок.
-
Middleware — для промежуточной обработки запросов.
Фильтры
Добавлены фильтры для удобного определения условий обработки.
Пример использования isValidFor из ShouldRequestEnvironment:
message({ isValidFor(Filter.Authorized and Filter.NewSession) }) { response { text = messageText } }
Storage и FSMContext
Раньше FSMContext полностью отвечал за хранение данных, совмещая логику состояния диалога с механизмами сохранения. В новой версии произошло важное изменение:
-
Storage — теперь отвечает за механизм хранения данных (персистентность, сериализацию)
-
FSMContext — стал тоньше и теперь фокусируется только на работе с состоянием диалога
Реализации Storage
Фреймворк предоставляет три варианта:
-
MemoryStorage — хранит данные в оперативной памяти (используется по умолчанию).
-
ApiStorage — сохраняет данные на стороне Алисы.
-
RedisStorage — использует Redis для хранения.
Новые возможности FSMContext
Теперь в FSMContext можно хранить не только строки, но и любые типы данных благодаря Kotlinx Serialization.
Новые хэндлеры
Добавлены новые хэндлеры, использующие окружение. Подробнее о них можно узнать в документации.
Заключение
За последние полгода Alice-ktx значительно улучшился. Официальная документация содержит подробные примеры и руководства.
ссылка на оригинал статьи https://habr.com/ru/articles/896964/
Добавить комментарий