Создает новый экземпляр контроллера. Инициализирует все необходимые компоненты.
OptionalappContext: AppContext<IDatabaseInfo>Контекст приложения.
Стиль обращения к пользователю. Определяет формальность общения, используется для платформ, которые поддерживают данное поведение.
Платформа от которой был получен запрос.
Эмоция для голосового ответа. Используется для платформ, которые поддерживают данное поведение.
Флаг необходимости авторизации. Определяет, требуется ли авторизация пользователя или нет.
Флаг, определяющий необходимость завершения диалога. Актуально когда необходимо принудительно завершить диалог с пользователем. Поддержка работы флага зависит от платформы.
Определяет, с колонки пользователь запустил приложение или с устройства с экраном.
Флаг необходимости отправки запроса к API. Как правило, данный флаг стоит использовать для чат-ботов.
Флаг отправки запроса на оценку. Определяет, нужно ли запросить оценку у пользователя. Используется для платформ, которые поддерживают данное поведение.
ID сообщения. Используется для определения начала нового диалога.
Название предыдущего интента/команды, полученное из userData.oldIntentName.
Используется для отслеживания контекста диалога.
КАК ЭТО РАБОТАЕТ:
this.thisIntentName сохраняется в userData.oldIntentNamethis.oldIntentNameТИПИЧНОЕ ИСПОЛЬЗОВАНИЕ:
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;
}
}
Оригинальный запрос пользователя. Текст запроса без изменений, включая регистр и знаки препинания.
Дополнительные параметры запроса. Может содержать любые дополнительные данные полученные от платформы.
Дополнительные опции платформы. ⚠️ Внутреннее свойство. Заполняется адаптером платформы. Не предназначено для прямого использования в пользовательском коде.
Полученный запрос от платформы. Содержит оригинальный объект запроса.
Пользовательское локальное хранилище.
Используется для временного хранения данных, специфичных для текущего диалога.
Работает только при включённой опции isLocalStorage: true в конфигурации.
bot.setAppConfig({
isLocalStorage: true,
});
Правила синхронизации с базой данных (если подключена):
userData, и state:
userData сохраняется в БД,state сохраняется в локальное хранилище платформы.userData (а state пуст или равен userData):
state:
При загрузке данных:
state и userData.userData, и в state (для удобства).userData.userData — для постоянного хранения данных пользователя.
Текст, который будет отображен пользователю. Основной способ коммуникации с пользователем, так как именно этот текст пользователь увидит в интерфейсе.
Название текущего интента. Определяет следующий шаг диалога.
Текст, который пользователь может услышать. Для голосовых платформ, озвучка будет произведена силами самой платформы, для не голосовых платформ, поведение зависит непосредственно от реализации адаптера. Так для некоторых стандартных адаптеров, в случае заполнения поля и указания токена yandex SpeechKit, будет отправлен запрос на преобразование текста в аудиофайл, после чего аудиофайл будет отправлен пользователю.
Запрос пользователя в нижнем регистре.
Пользовательские данные, который были сохранены.
Пользовательские событий. Содержит информацию об авторизации или оценке.
Уникальный идентификатор пользователя.
Дополнительная информация о пользователе.
Пользовательский токен авторизации. Используется для авторизованных запросов (например, в Алисе).
Компонент для отображения различных кнопок пользователю. Позволяет создавать интерактивные элементы управления в приложении.
Компонент для отображения карточек пользователю. Позволяет создавать визуальные элементы с изображениями и текстом. Также при указании нескольких изображений, они автоматически преобразуются в карточку.
// КАТАЛОГ ТОВАРОВ (интернет-магазин):
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'
}
)
Обработанный NLU (Natural Language Understanding). Содержит результаты обработки естественного языка, как правило, данные заполняются самой платформой.
Компонент для работы со звуками. Позволяет добавлять звуковые эффекты и музыку. Используется вместе с tts.
Protected_Запуск обработки пользовательских команд с учетом метрик.
Protected_Извлекает нужную команду из запроса.
найденная команда или null если не удалось найти команду
Protected_Находит нужный интент по тексту запроса.
Текст запроса
Название интента или null
Protected_Обработка команд, добавленных через slots
OptionalisCommand: booleanOptionalisStep: booleanОчищает все временные данные необходимые для отправки ответа.
Флаг возвращающий информацию о том, были ли инициализированы кнопки или нет
Флаг возвращающий информацию о том, были ли инициализированы карточки или нет
Флаг возвращающий информацию о том, были ли инициализирован nlu или нет
Флаг возвращающий информацию о том, были ли инициализированы звуки или нет
Устанавливает контекст приложения.
Контроллер для обработки запросов приложения по умолчанию. Используется в качестве контроллера по умолчанию, и позволяет не создавать свой контроллер, если вся обработка команд или шагов осуществляется через bot.addCommand или bot.addStep.
Контроллер из коробки обрабатывает стандартные команды (приветствие и помощь), а также сценарий, когда ни одна из команд не была найдена. Обработка базовых механик происходит только в том случае, если не была обработана ни одна команда или шаг.