umbot - v2.0.8
    Preparing search index...

    Class BotController<TUserData>Abstract

    Абстрактный класс контроллера бота Предоставляет базовый функционал для обработки пользовательских запросов

    Основные возможности:

    • Обработка пользовательских команд и интентов
    • Управление состоянием диалога
    • Работа с UI компонентами (кнопки, карточки)
    • Поддержка различных платформ (Алиса, Маруся, Telegram и др.)
    • Управление пользовательскими данными
    // Определение пользовательских данных
    interface MyUserData extends IUserData {
    score: number;
    level: number;
    preferences: {
    language: string;
    theme: string;
    };
    }

    class MyController extends BotController<MyUserData> {
    public action(intentName: string | null): void {
    try {
    // Обработка приветствия
    if (intentName === WELCOME_INTENT_NAME) {
    // Текстовый ответ
    this.text = 'Привет! Чем могу помочь?';

    // Добавление кнопок
    this.buttons
    .addBtn('Помощь')
    .addBtn('Выход');

    // Добавление карточки
    this.card
    .setTitle('Добро пожаловать!')
    .setDescription('Выберите действие:')
    .addButton('Начать игру')
    .addButton('Настройки');

    // Установка пользовательских данных
    this.userData = {
    score: 0,
    level: 1,
    preferences: {
    language: 'ru',
    theme: 'light'
    }
    };

    // Добавление звука
    this.sound.add('welcome.mp3');

    return;
    }

    // Обработка команды помощи
    if (intentName === HELP_INTENT_NAME) {
    this.text = 'Я могу помочь вам с...';
    this.buttons.addBtn('Назад');
    return;
    }

    // Обработка NLU
    const nluResult = this.nlu.getIntent();
    if (nluResult) {
    // Обработка интента
    this.text = `Вы сказали: ${nluResult}`;
    }

    // Обработка пользовательских событий
    if (this.userEvents?.auth?.status) {
    this.text = 'Вы успешно авторизовались!';
    }

    // Обработка оценки
    if (this.userEvents?.rating?.status) {
    const rating = this.userEvents.rating.value;
    this.text = `Спасибо за оценку ${rating}!`;
    }

    } catch (error) {
    console.error('Error in action:', error);
    this.text = 'Произошла ошибка. Попробуйте позже.';
    }
    }
    }

    BotController

    Type Parameters

    Index

    Constructors

    Properties

    buttons: Buttons

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

    Buttons

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

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

    Card

    this.card
    .addHeader('Заголовок')
    .addImage('url/to/image.jpg')
    .addFooter('Описание');
    text: string = ''

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

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

    Текст для преобразования в речь Используется для голосовых ассистентов

    Для неголосовых платформ текст будет преобразован в речь через Yandex SpeechKit и отправлен как аудио сообщение

    this.tts = 'Привет! Я голосовой ассистент.';
    
    nlu: Nlu

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

    Nlu

    sound: Sound

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

    Sound

    this.sound
    .addSound('welcome.mp3')
    .addBackground('music.mp3');
    userId: null | string | number = null

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

    this.userId = 'user_123';
    
    userToken: null | string = null

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

    this.userToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
    
    userMeta: any = null

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

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

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

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

    Запрос пользователя в нижнем регистре Нормализованный текст запроса

    this.userCommand = 'привет бот';
    
    originalUserCommand: null | string = null

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

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

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

    this.payload = {
    source: 'mobile',
    version: '1.0'
    };
    userData: TUserData = ...

    Пользовательские данные Хранятся в базе данных или файле

    Тип хранения зависит от параметра mmApp.isSaveDb

    this.userData = {
    name: 'John',
    preferences: {
    language: 'ru'
    }
    };
    isAuth: boolean = false

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

    this.isAuth = true; // требуется авторизация
    
    userEvents: null | IUserEvent = null

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

    IUserEvent

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

    Пользовательское локальное хранилище Используется для Алисы, Маруси и Сбера

    this.state = {
    lastIntent: 'greeting',
    step: 1
    };
    isScreen: boolean = false

    Флаг наличия экрана Определяет, доступен ли экран пользователю

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

    Флаг завершения сессии Определяет, нужно ли завершить диалог

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

    Флаг необходимости отправки запроса к API Используется для Vk и Telegram

    Если true, все запросы уже отправлены в логике приложения

    this.isSend = true; // запросы уже отправлены
    
    requestObject: null | string | object = null

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

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

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

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

    Эмоция для голосового ответа Используется для голосовых ассистентов

    this.emotion = 'good';
    
    appeal: null | "official" | "no_official" = null

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

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

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

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

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

    Название предыдущего интента Используется для отслеживания контекста диалога

    this.oldIntentName = 'greeting';
    

    Methods

    • Protected

      Возвращает список доступных интентов Определяет все возможные команды и их обработчики

      Returns IAppIntent[]

      Массив интентов

      const intents = BotController._intents();
      // [
      // { name: 'greeting', slots: ['привет', 'здравствуйте'] },
      // { name: 'help', slots: ['помощь', 'справка'] }
      // ]
    • Protected

      Определяет интент по тексту запроса Сопоставляет текст с доступными интентами

      Parameters

      • text: null | string

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

      Returns null | string

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

      const intent = BotController._getIntent('привет');
      // 'greeting'
    • Protected

      Получает команду из запроса пользователя Извлекает команду из текста запроса

      Returns null | string

      Команда или null

      const command = this._getCommand();
      // 'start'
    • Абстрактный метод для обработки пользовательских команд и интентов Должен быть реализован в дочерних классах

      Parameters

      • intentName: null | string

        Название интента или команды

      • OptionalisCommand: boolean

        Флаг, указывающий что это команда

      Returns void

      class MyController extends BotController {
      public action(intentName: string | null): void {
      if (intentName === 'greeting') {
      this.text = 'Привет!';
      } else if (intentName === 'help') {
      this.text = 'Помощь:';
      this.buttons.addBtn('Назад');
      }
      }
      }
    • Запускает обработку запроса Определяет тип запроса и вызывает соответствующий обработчик

      Returns void

      this.run();
      // Обрабатывает запрос и формирует ответ