umbot
    Preparing search index...

    Версия 3.0.0 — это крупное обновление с фокусом на модульность, гибкость и современные стандарты. Мы перешли на плагинную архитектуру, обновили требования к среде выполнения и упростили расширение функционала. Ниже — список ключевых изменений и инструкция по миграции.

    Версия 2.x.x находится в фазе поддержки: принимаются только исправления критических ошибок.

    Следующая стабильная версия станет 3.0.0, в версии ожидаются следующие доработки:

    1. Плагинная архитектура — работа с платформами теперь вынесена в отдельные плагины. Это позволяет гибко подключать только нужные интеграции и расширять функциональность через сторонние модули (например, валидацию запросов или ограничение частоты команд)
    2. Возможность указать свою реализацию регулярок - С версии 2.2.0 фреймворк из коробки стал поддерживать работу re2. Однако вы можете подключить свою реализацию регулярных выражений.
    3. Поддержка активных рассылок - Сейчас приложение работает по принципу Запрос → Ответ, из-за чего нет возможность сделать рассылку. Будут добавлены методы, чтобы отправить запрос определенному пользователю, а также сделать запрос всем пользователям определенной платформы.
    4. Возможность указать кастомный NLU-провайдер - Добавить гибкости в использовании приложения
    5. Поддержка внешнего i18n - Позволит создавать приложения с локализацией без лишних усилий
    6. Меняются зависимости. Минимальная версия nodeJs становится 20. У версии 18 закончилась официальная поддержка, поэтому необходимость в ее поддержке как минимальной отпадает.
    7. Оптимизация поиска команд по регулярным выражениям — исследуем возможность ускорения матчинга. Результаты повлияют на финальный набор фич в 3.0.
    8. Команды(добавленные через addStep), привязанные к имени шага или сценария (через controller.oldIntentName), теперь обрабатываются напрямую без дополнительного поиска по списку команд. Это ускоряет обработку таких случаев.
    9. Обработчики команд теперь могут быть асинхронными (async/await), что упрощает работу с внешними API или базами данных.
    10. Добавить возможность переопределить ответ сервера на запрос.

    Статусы:

    Задача статус Комментарий
    Плагинная архитектура готово Базовые плагины находятся в umbot/plugins
    Кастомный RegExp готово Добавляется разработчиком через взаимодействие с appContext.plugins.regExp
    Поддержка активных рассылок готово Добавлен метод send
    Указание NLU-провайдера готово Добавляется разработчиком через взаимодействие с appContext.plugins.nlu
    Поддержка i18n готово Добавляется разработчиком через взаимодействие с appContext.plugins.i18n
    Обновление версии nodeJS готово Также обновлен typescript
    Оптимизация поиска по regex В работе
    Команда по имени шага/сценария готово Добавлен метод addStep
    Переопределить ответ webhook готово В метода run и webhook добавлен 3 callback аргумент

    Список доработок будет обновляться. Ориентировочная дата релиза: 12 апреля 2026 г.

    До версии 3.0, вся работа с платформами была заложена в логику самого фреймворка. В версии 3.0 мы перешли на архитектуру на основе адаптеров, поэтому для корректной работы приложения, необходимо перейти на новую механику работы. Сделать это можно следующими способами:

    1. Передать метод, который зарегистрирует все платформы
    import { fullPlatforms } from 'umbot/plugins';
    import { Bot } from 'umbot';

    const bot = new Bot();
    bot.use(fullPlatforms); // Подключаем все платформы
    1. Передать адаптер платформы
    import { AlisaAdapter, MarusiaAdapter } from 'umbot/plugins';
    import { Bot } from 'umbot';

    const bot = new Bot();
    bot.use(new AlisaAdapter()); // Подключаем платформу для Алисы
    bot.use(new MarusiaAdapter()); // Подключаем платформу для Маруси

    Адаптеры можно комбинировать — например, одновременно подключить Алису и Telegram-бота.

    Список всех доступных "из коробки" адаптеров:

    import { adapters } from 'umbot/plugins';
    

    Также можно подключить либо голосовые платформы, либо платформы для чат-ботов, для этого есть соответствующие методы:

    • voicePlatforms - Регистрация только голосовых платформ
    • botPlatforms - Регистрация только чат ботов

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

    import { AlisaSound } from 'umbot';

    botController.tts = `${AlisaSound.S_AUDIO_GAME_WIN} `.repeat(i).trim();

    Как работает сейчас

    import { SoundConstants } from 'umbot';

    botController.tts = `${SoundConstants.S_AUDIO_GAME_WIN} `.repeat(i).trim();

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

    Раньше

    import { Bot, Alisa, T_ALISA } from 'umbot';

    const bot = new Bot(T_ALISA);
    const botClass = new Alisa(bot._appContext);
    bot.run(botClass, T_ALISA);

    сейчас

    import { Bot } from 'umbot';
    import { AlisaAdapter, T_ALISA } from 'umbot/plugins';

    const bot = new Bot(T_ALISA);
    bot.use(new AlisaAdapter());
    bot.run(T_ALISA);

    Начиная с версии 3.0, из коробки, в фреймворке нет подключения к базе данных по умолчанию, из-за чего необходимо самостоятельно подключить необходимый адаптер для работы. Сделать это можно следующим образом:

    import { Bot } from 'umbot';
    import { FileAdapter, MongoAdapter } from 'umbot/plugins';

    const bot = new Bot();
    bot.use(new FileAdapter()); // Подключаем файловую бд
    bot.use(
    new MongoAdapter({
    host: process.env.host,
    user: process.env.user,
    pass: process.env.pass,
    database: process.env.database,
    }),
    ); // Подключаем MongoDb

    Также появилась возможность указать свой собственный адаптер для работы с базой данных.

    ⚠️ Важно: одновременно можно использовать только один адаптер базы данных. Если зарегистрировано несколько — будет использован последний.

    Метод bot.run() больше не принимает класс платформы в качестве первого аргумента — все платформы теперь регистрируются через bot.use(). Раньше

    import { Bot, Alisa, T_ALISA } from '../../src';

    const bot = new Bot();
    bot.run(Alisa, T_ALISA, content);

    Сейчас

    import { Bot } from '../../src';
    import { T_ALISA, AlisaAdapter } from '../../src/plugins';

    const bot = new Bot();
    bot.use(new AlisaAdapter());
    bot.run(T_ALISA, content);

    До версии 3.0 способ указания своей платформы был не удобен по следующим причинам:

    1. Не совсем понятно как именно указывать и как должна работать логика платформы.
    2. Можно было указать только 1 кастомную платформу

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

    Старый способ задания платформы выглядит следующим образом:

    1. Необходимо наследоваться от TemplateTypeModel, определяя нужные методы.
    2. Передать класс в само приложение Код подключения выглядел следующим образом:
    import { BotTest, IBotTestParams } from '../../../src/test';
    import skillStorageConfig from '../../config/skillStorageConfig';
    import skillDefaultParam from '../../config/skillDefaultParam';
    import { UserAppController } from './controller/UserAppController';
    import { UserApp } from './UserTemplate/Controller/UserApp';
    import userDataConfig from './UserTemplate/userDataConfig';

    const bot = new BotTest();
    bot.setAppConfig(skillStorageConfig());
    bot.setPlatformParams(skillDefaultParam());
    bot.initBotController(UserAppController);

    //bot.run(userApp);
    /**
    * Отображаем ответ навыка и хранилище в консоли.
    */
    const params: IBotTestParams = {
    isShowResult: true,
    isShowStorage: false,
    isShowTime: true,
    userBotClass: UserApp,
    userBotConfig: userDataConfig,
    };
    bot.test(params);

    В новой версии, необходимо также наследоваться от базового класса, но только не от TemplateTypeModel, а от BasePlatformAdapter, которых находится в umbot/plugins. Далее, согласно документации определить необходимые методы, после чего подключить созданный адаптер к приложению через bot.use. Демо пример можно посмотреть тут. Итоговый код получается следующий:

    import { BotTest, IBotTestParams } from '../../../src/test';
    import skillStorageConfig from '../../config/skillStorageConfig';
    import skillDefaultParam from '../../config/skillDefaultParam';
    import { UserAppController } from './controller/UserAppController';
    import { UserAdapter } from './UserTemplate/Adapter/UserAdapter';

    const bot = new BotTest();
    bot.use(new UserAdapter()); // Подключаем пользовательский адаптер для платформы
    bot.setAppConfig(skillStorageConfig());
    bot.setPlatformParams(skillDefaultParam());
    bot.initBotController(UserAppController);

    //bot.run();
    /**
    * Отображаем ответ навыка и хранилище в консоли.
    */
    const params: IBotTestParams = {
    isShowResult: true,
    isShowStorage: false,
    isShowTime: true,
    };
    bot.test(params);

    До версии 3.0

    1. Наследуемся от DbControllerModel определяя все нужные методы.
    2. Подключаем через bot.use(new DbConnect())

    В новой версии, необходимо наследоваться от BaseDbAdapter, которых находится в umbot/plugins. Далее, согласно документации определить необходимые методы, после чего подключить созданный адаптер к приложению через bot.use. Демо пример можно посмотреть тут.