В прошлой статье я рассказывал о фреймворке 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 значительно улучшился. Официальная документация содержит подробные примеры и руководства.