umbot
    Preparing search index...

    Class BaseBotController<TUserData>

    Контроллер для обработки запросов приложения по умолчанию. Используется в качестве контроллера по умолчанию, и позволяет не создавать свой контроллер, если вся обработка команд или шагов осуществляется через bot.addCommand или bot.addStep.

    Контроллер из коробки обрабатывает стандартные команды (приветствие и помощь), а также сценарий, когда ни одна из команд не была найдена. Обработка базовых механик происходит только в том случае, если не была обработана ни одна команда или шаг.

    Type Parameters

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    appContext: AppContext

    Контекст приложения.

    appeal: "official" | "no_official" | null = null

    Стиль обращения к пользователю. Определяет формальность общения, используется для платформ, которые поддерживают данное поведение.

    Возможные значения:

    • 'official': официальное обращение
    • 'no_official': неофициальное обращение
    • null: стиль не определен
    this.appeal = 'official'; // официальное обращение
    
    appType: string | null = null

    Платформа от которой был получен запрос.

    emotion: string | null = null

    Эмоция для голосового ответа. Используется для платформ, которые поддерживают данное поведение.

    this.emotion = 'good';
    
    isAuth: boolean = false

    Флаг необходимости авторизации. Определяет, требуется ли авторизация пользователя или нет.

    this.isAuth = true; // требуется авторизация
    
    isEnd: boolean = false

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

    this.isEnd = true; // завершить диалог
    
    isScreen: boolean = false

    Определяет, с колонки пользователь запустил приложение или с устройства с экраном.

    this.isScreen = true; // экран доступен
    
    isSend: boolean = false

    Флаг необходимости отправки запроса к API. Как правило, данный флаг стоит использовать для чат-ботов.

    Если указано true, значит все необходимые запросы уже отправлены в логике приложения, и дополнительно пользователю ничего отправлять не нужно.

    this.isSend = true; // запросы уже отправлены
    
    isSendRating: boolean = false

    Флаг отправки запроса на оценку. Определяет, нужно ли запросить оценку у пользователя. Используется для платформ, которые поддерживают данное поведение.

    this.isSendRating = true; // запросить оценку
    
    messageId: string | number | null = null

    ID сообщения. Используется для определения начала нового диалога.

    this.messageId = 12345;
    
    oldIntentName: string | null = null

    Название предыдущего интента/команды, полученное из userData.oldIntentName. Используется для отслеживания контекста диалога.

    КАК ЭТО РАБОТАЕТ:

    1. В конце обработки каждого запроса, this.thisIntentName сохраняется в userData.oldIntentName
    2. При следующем запросе это значение копируется в this.oldIntentName
    3. Используется для определения, с какого шага продолжить диалог

    ТИПИЧНОЕ ИСПОЛЬЗОВАНИЕ:

    • Возврат к предыдущему шагу
    • Многошаговые формы ("вернуться назад")
    • Диалоги с контекстом
    • Использование в шагах bot.addStep()
    // Пример: Многошаговая регистрация
    class RegistrationBot extends BotController {
    public action(intentName: string | null): void {
    // Определяем на каком шаге находимся
    const previousStep = this.oldIntentName;

    if (previousStep === 'enter_name') {
    // Пользователь только что ввел имя, спрашиваем email
    this.userData.name = this.userCommand;
    this.text = 'Отлично! Теперь введите ваш email:';
    this.thisIntentName = 'enter_email'; // Сохранится для следующего шага
    } else if (previousStep === 'enter_email') {
    // Пользователь ввел email, завершаем регистрацию
    this.userData.email = this.userCommand;
    this.text = 'Регистрация завершена!';
    }
    }
    }

    // Пример: Кнопка "Назад"
    if (intentName === 'back') {
    // Возвращаемся к предыдущему шагу
    switch(this.oldIntentName) {
    case 'product_list':
    this.text = 'Выберите категорию:';
    break;
    case 'category_list':
    this.text = 'Добро пожаловать!';
    break;
    }
    }
    originalUserCommand: string | null = null

    Оригинальный запрос пользователя. Текст запроса без изменений, включая регистр и знаки препинания.

    this.originalUserCommand = 'Привет, бот!';
    
    payload: string | object | null | undefined = null

    Дополнительные параметры запроса. Может содержать любые дополнительные данные полученные от платформы.

    this.payload = {
    source: 'mobile',
    version: '1.0'
    };
    platformOptions: IPlatformOptions = {}

    Дополнительные опции платформы. ⚠️ Внутреннее свойство. Заполняется адаптером платформы. Не предназначено для прямого использования в пользовательском коде.

    requestObject: unknown = null

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

    this.requestObject = {
    command: 'start',
    payload: { source: 'mobile' }
    };
    state: IPlatformData | null = null

    Пользовательское локальное хранилище. Используется для временного хранения данных, специфичных для текущего диалога. Работает только при включённой опции isLocalStorage: true в конфигурации. bot.setAppConfig({ isLocalStorage: true, });

    Правила синхронизации с базой данных (если подключена):

    • Если заполнены и userData, и state:
      • userData сохраняется в БД,
      • state сохраняется в локальное хранилище платформы.
    • Если заполнен только userDatastate пуст или равен userData):
      • данные сохраняются только в БД (состояние платформы не обновляется).
    • Если заполнен только state:
      • данные сохраняются только в локальное хранилище.

    При загрузке данных:

    1. Если есть данные из локального хранилища и из БД, они попадают соответственно в state и userData.
    2. Если есть только данные из хранилища, они копируются и в userData, и в state (для удобства).
    3. Если есть только данные из БД, они записываются в userData.

    userData — для постоянного хранения данных пользователя.

    this.state = {
    lastIntent: 'greeting',
    step: 1
    };
    text: string = ''

    Текст, который будет отображен пользователю. Основной способ коммуникации с пользователем, так как именно этот текст пользователь увидит в интерфейсе.

    this.text = 'Привет! Чем могу помочь?';
    
    thisIntentName: string | null = null

    Название текущего интента. Определяет следующий шаг диалога.

    this.thisIntentName = 'help';
    
    tts: string | null = null

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

    this.tts = 'Привет! Я голосовой ассистент.';
    
    userCommand: string | null = null

    Запрос пользователя в нижнем регистре.

    this.userCommand = 'привет бот';
    
    userData: TUserData = ...

    Пользовательские данные, который были сохранены.

    this.userData = {
    name: 'John',
    preferences: {
    language: 'ru'
    }
    };
    userEvents: IUserEvent | null = null

    Пользовательские событий. Содержит информацию об авторизации или оценке.

    IUserEvent

    this.userEvents = {
    auth: { status: true },
    rating: { status: true, value: 5 }
    };
    userId: string | number | null = null

    Уникальный идентификатор пользователя.

    this.userId = 'user_123';    // Telegram (string)
    this.userId = 123456789; // VK (number)
    this.userId = null; // не удалось получить информацию
    userMeta: object | null = null

    Дополнительная информация о пользователе.

    this.userMeta = {
    timezone: 'Europe/Moscow',
    locale: 'ru-RU'
    };
    userToken: string | null = null

    Пользовательский токен авторизации. Используется для авторизованных запросов (например, в Алисе).

    this.userToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
    

    Accessors

    • get buttons(): Buttons

      Компонент для отображения различных кнопок пользователю. Позволяет создавать интерактивные элементы управления в приложении.

      Returns Buttons

      • Навигация по меню
      • Быстрые ответы (Да/Нет)
      • Выбор из вариантов
      • Быстрое действие/команда

      Buttons

      this.buttons
      .addBtn('Помощь')
      .addBtn('Выход');
    • get card(): Card

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

      Returns Card

      • Каталог товаров/услуг
      • Галерея изображений
      • Карточки статей/новостей
      • Навигация

      Card

      // КАТАЛОГ ТОВАРОВ (интернет-магазин):
      this.text = 'Популярные товары:';
      this.card
      .addImage(
      'https://example.com/iphone.jpg',
      'iPhone 15 Pro',
      '99 990 ₽\nЭкран 6.1", процессор A17 Pro'
      )
      .addButton('Купить')

      .addImage(
      'https://example.com/macbook.jpg',
      'MacBook Air M2',
      '124 990 ₽\n13.6", 8ГБ RAM, 256ГБ SSD'
      )
      .addButton('Купить');

      // ГАЛЕРЕЯ ФОТОГРАФИЙ:
      this.text = 'Наши работы:';
      this.card
      .addImage('photo1.jpg', 'Свадьба', 'Иван и Мария')
      .addImage('photo2.jpg', 'Выпускной', 'Школа №123')
      .addImage('photo3.jpg', 'Корпоратив', 'Компания "Рога и копыта"');

      // КАРТОЧКИ НОВОСТЕЙ:
      this.card
      .addImage(
      'news1.jpg',
      'Новое обновление бота',
      'Добавлена оплата картой и доставка',
      {
      title: 'Перейти',
      url: 'https://example.com/news/1'
      }
      )
    • get nlu(): Nlu

      Обработанный NLU (Natural Language Understanding). Содержит результаты обработки естественного языка, как правило, данные заполняются самой платформой.

      Returns Nlu

      Nlu

    • get sound(): Sound

      Компонент для работы со звуками. Позволяет добавлять звуковые эффекты и музыку. Используется вместе с tts.

      Returns Sound

      Sound

    Methods

    • Запуск обработки пользовательских команд с учетом метрик.

      Parameters

      • commandName: string | null
      • isCommand: boolean = false
      • isStep: boolean = false

      Returns void

    • Извлекает нужную команду из запроса.

      Returns void | Promise<void> | null

      найденная команда или null если не удалось найти команду

    • Находит нужный интент по тексту запроса.

      Parameters

      • text: string | null

        Текст запроса

      Returns string | null

      Название интента или null

    • Обработка команд, добавленных через slots

      Parameters

      • intentName: string | null
      • OptionalisCommand: boolean
      • OptionalisStep: boolean

      Returns void