umbot - v2.2.0
    Preparing search index...

    Класс для тестирования бота Предоставляет интерактивный режим для отладки и тестирования функциональности

    BotTest

    const botTest = new BotTest();
    botTest.setPlatformParams({
    intents: [{
    name: 'greeting',
    slots: ['привет', 'здравствуйте']
    }]
    });
    botTest.initBotController(MyController);

    // Запуск тестирования
    await botTest.test({
    isShowResult: true,
    isShowStorage: true
    });

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    _botController: BotController
    _content: TBotContent = null

    Полученный запрос от пользователя. Может быть JSON-строкой, текстом или null

    Accessors

    • get appType(): "auto" | TAppType

      Возвращает тип платформы

      Returns "auto" | TAppType

    • set appType(appType: "auto" | TAppType): void

      Явно устанавливает тип платформы для всего приложения. Стоит использовать в крайнем случае

      Parameters

      Returns void

    Methods

    • Определяет тип платформы и возвращает соответствующий класс для обработки

      Parameters

      • OptionalappType: TAppType | null

        Тип платформы

      • OptionaluserBotClass: TTemplateTypeModelClass | null = null

        Пользовательский класс бота

      Returns IBotBotClassAndType

      Объект с типом платформы и классом обработчика

      Если не удалось определить тип приложения

      Метод определяет тип платформы на основе appType и возвращает соответствующий класс:

      • T_ALISA → Alisa
      • T_VK → Vk
      • T_Max → Max
      • T_TELEGRAM → Telegram
      • T_VIBER → Viber
      • T_MARUSIA → Marusia
      • T_SMARTAPP → SmartApp
      • T_USER_APP → Пользовательский класс
    • Добавляет команду для обработки пользовательских запросов

      Type Parameters

      Parameters

      • commandName: string

        Уникальный идентификатор команды

      • slots: TSlots

        Триггеры для активации команды

        • Если элемент — строка → ищется как подстрока (text.includes(...)).
        • Если элемент — RegExp → проверяется как регулярное выражение (.test(text)).
        • Параметр isPattern учитывается только если в slots нет RegExp.
        • При наличии хотя бы одного RegExp, isPattern = false игнорируется, и каждый элемент обрабатывается согласно своему типу.
      • Optionalcb: (userCommand: string, botController: TBotController) => string | void

        Функция-обработчик команды

      • isPattern: boolean = false

        Использовать регулярные выражения (по умолчанию false)

      Returns this

      Простая команда со словами:

      appContext.addCommand(
      'greeting',
      ['привет', 'здравствуй'],
      (cmd, ctrl) => {
      if (ctrl) ctrl.text = 'Здравствуйте!';
      }
      );

      Команда с регулярными выражениями:

      // Обработка чисел от 1 до 999
      bot.addCommand(
      'number',
      ['\\b([1-9]|[1-9][0-9]|[1-9][0-9][0-9])\\b'],
      (cmd, ctrl) => {
      if (ctrl) ctrl.text = `Вы ввели число: ${cmd}`;
      },
      true // включаем поддержку регулярных выражений
      );

      Библиотека проверяет регулярные выражения на ReDoS и логирует предупреждения по необходимости

      Команда с доступом к состоянию:

      bot.addCommand(
      'stats',
      ['статистика'],
      async (cmd, ctrl) => {
      if (ctrl) {
      // Доступ к пользовательским данным
      const visits = ctrl.userData?.visits || 0;
      ctrl.text = `Вы использовали бота ${visits} раз`;

      // Доступ к кнопкам и другим UI элементам
      ctrl.buttons
      .addBtn('Сбросить статистику')
      .addBtn('Закрыть');
      }
      }
      );
      • Команды обрабатываются в порядке добавления
      • При isPattern=true используются регулярные выражения JavaScript
      • В callback доступен весь функционал BotController
      • Можно использовать async функции в callback
    • Закрывает HTTP-сервер. Освобождает ресурсы и завершает работу сервера.

      Returns Promise<void>

      // Закрытие сервера
      bot.close();
    • Protected

      Формирует конфигурацию для тестирования конкретной платформы. Создает структуру данных, соответствующую формату выбранной платформы

      Parameters

      • query: string

        Пользовательский запрос

      • count: number

        Номер сообщения в диалоге

      • state: string | object

        Данные из хранилища

      • OptionaluserBotConfig: TUserBotConfigCb | null

        Функция для пользовательской конфигурации

      Returns any

      Конфигурация для выбранной платформы

    • Инициализирует контроллер с бизнес-логикой бота Устанавливает контроллер, который будет обрабатывать команды и формировать ответы

      Parameters

      Returns this

      class MyController extends BotController {
      public action(intentName: string): void {
      switch (intentName) {
      case 'greeting':
      this.text = 'Привет!';
      break;
      case 'help':
      this.text = 'Чем могу помочь?';
      break;
      }
      }
      }

      bot.initBotController(new MyController());
    • Удаляет команду

      Parameters

      • commandName: string

        Имя команды

      Returns this

    • Запускает обработку запроса. Выполняет основную логику бота и возвращает результат

      Parameters

      • OptionaluserBotClass: TTemplateTypeModelClass | null = null

        Пользовательский класс бота

      • OptionalappType: TAppType | null = null

        Тип приложения. Если не указан, будет определен автоматически

      • Optionalcontent: string | null = null

        Контент запроса. Если не указан, будет взят из this._content

      Returns Promise<TRunResult>

      Результат выполнения бота

      // Обработка запроса
      const result = await bot.run();
      console.log(result);

      // Обработка с пользовательским классом
      const result = await bot.run(MyBotClass);
    • Задает конфигурацию приложения Устанавливает настройки бота, включая интенты, базу данных и другие параметры

      Parameters

      • config: IAppConfig

        Конфигурация приложения

      Returns this

      // Конфигурация с базой данных
      bot.setAppConfig({
      db: {
      host: 'localhost',
      database: 'bot_db',
      user: 'user',
      pass: 'password'
      }
      });


      @remarks
      Важно! Чувствительные данные рекомендуется сохранять в .env файл, передав путь к нему:
      ```typescript
      bot.setAppConfig({
      env: './.env', // путь до файла
      });
    • Устанавливает контент запроса. Используется для передачи данных от пользователя в бот. Не рекомендуется использовать напрямую, использовать только в крайнем случае, либо для тестов

      Parameters

      Returns void

      // Установка текстового сообщения
      bot.setContent('Привет!');

      // Установка JSON-данных
      bot.setContent({
      request: {
      command: 'привет',
      original_utterance: 'Привет, бот!'
      }
      });
    • Установка пользовательского обработчика команд.

      Parameters

      Returns this

      По умолчанию umbot использует линейный поиск с поддержкой подстрок и регулярных выражений. Это обеспечивает простоту, предсказуемость и соответствие поведению других платформ (порядок регистрации важен).

      Однако при числе команд >1000 или в условиях высокой нагрузки вы можете подключить собственный алгоритм поиска:

      const bot = new Bot();
      bot.setCustomCommandResolver((userCommand, commands) => {
      // Пример: возврат команды по хэшу (ваши правила)
      for (const [name, cmd] of commands) {
      if (cmd.slots.some(slot => userCommand.includes(slot as string))) {
      return name;
      }
      }
      return null;
      });

      💡 Рекомендации:

      Сохраняйте порядок перебора, если он критичен для вашей логики Используйте кэширование (Map<string, string>) для часто встречающихся фраз Для fuzzy-поиска рассмотрите fuse.js или natural При использовании регулярных выражений — не забывайте про защиту от ReDoS

    • Устанавливает режим разработки

      Parameters

      • isDevMode: boolean

        Флаг включения режима разработки

      Returns this

      В режиме разработки в консоль выводятся все ошибки и предупреждения

    • Позволяет установить свою реализацию для логирования

      Parameters

      Returns void

    • Задает параметры для платформ Устанавливает дополнительные параметры для работы бота

      Parameters

      • params: IAppParam

        Параметры платформы

      Returns this

      // Базовая настройка
      bot.setPlatformParams({
      intents: [{
      name: 'help',
      slots: ['помощь', 'справка']
      }],
      });

      @remarks
      Важно! Чувствительные данные рекомендуется сохранять в .env файл, передав путь к нему:
      ```typescript
      bot.setAppConfig({
      env: './.env', // путь до файла
      });
    • Запускает HTTP-сервер для обработки запросов. Создает сервер на указанном хосте и порту

      Parameters

      • hostname: string = 'localhost'

        Имя хоста

      • port: number = 3000

        Порт

      • OptionaluserBotClass: TTemplateTypeModelClass | null = null

        Пользовательский класс бота

      Returns Server

      // Запуск сервера на localhost:3000
      bot.start('localhost', 3000);

      // Запуск с пользовательским классом
      bot.start('localhost', 3000, MyBotClass);
    • Запускает интерактивное тестирование бота Позволяет вводить команды и получать ответы в консоли

      Parameters

      • Optionalparams: IBotTestParams = {}

        Параметры тестирования

      Returns Promise<void>

      // Базовое тестирование
      await botTest.test();

      // Расширенное тестирование с отображением всех данных
      await botTest.test({
      isShowResult: true,
      isShowStorage: true,
      isShowTime: true
      });
    • Регистрирует middleware, вызываемый до выполнения BotController.action().

      Middleware получает доступ к полному BotController (включая text, isEnd, userData, buttons и т.д.) и может:

      • Модифицировать контекст
      • Прервать выполнение (если не вызвать next())
      • Выполнить логирование, tracing, rate limiting и др.

      Parameters

      Returns this

      Текущий экземпляр Bot для цепочки вызовов

      // Глобальный middleware (для всех платформ)
      bot.use(async (ctx, next) => {
      console.log('Запрос от:', ctx.appType);
      await next();
      });
      // Только для Алисы
      bot.use('alisa', async (ctx, next) => {
      if (!ctx.appContext.requestObject?.session?.user_id) {
      ctx.text = 'Некорректный запрос';
      ctx.isEnd = true;
      // next() не вызывается → action() не запускается
      return;
      }
      await next();
      });
    • Регистрирует middleware, вызываемый только для указанной платформы.

      Parameters

      • platform: TAppType

        Идентификатор платформы (alisa, telegram, vk, и т.д.)

      • fn: MiddlewareFn

        Middleware-функция

      Returns this

      Текущий экземпляр Bot

    • Обрабатывает входящий webhook-запрос от любой поддерживаемой платформы.

      Parameters

      • req: IncomingMessage

        Объект входящего запроса (IncomingMessage или совместимый)

      • res: ServerResponse

        Объект ответа (ServerResponse или совместимый)

      • userBotClass: TTemplateTypeModelClass | null = null

        Пользовательский класс бота

      Returns Promise<void>

      // Express
      import express from 'express';
      const app = express();
      app.use(express.json({ type: '*/*' })); // важно для Алисы/Сбера

      const bot = new Bot('alisa');
      bot.initBotController(MyController);
      bot.setAppConfig({...});

      app.post('/webhook', (req, res) => bot.webhookHandle(req, res));