umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
336 lines (335 loc) • 7.56 kB
TypeScript
/**
* Интерфейс для именованных сущностей в запросе.
* Используется для извлечения структурированных данных из текста пользователя
*/
export interface IBaseEntities {
/**
* Позиция сущности в массиве слов
* Нумерация начинается с 0
*/
tokens?: {
/** Индекс первого слова сущности */
start: number;
/** Индекс первого слова после сущности */
end: number;
};
/**
* Тип именованной сущности
*/
type: string;
/**
* Значение сущности
*/
value: object | number;
}
/**
* Интерфейс для обработки естественного языка (NLU)
* Содержит результаты анализа текста пользователя
*/
export interface IBaseNlu {
/** Массив слов из фразы пользователя */
tokens?: string[] | unknown;
/** Массив найденных именованных сущностей */
entities?: IBaseEntities[] | unknown;
/**
* Распознанные намерения пользователя.
* Каждый интент содержит слоты с параметрами
*
* @example
* ```ts
* intents: {
* "YANDEX.CONFIRM": {
* slots: []
* },
* "YANDEX.REJECT": {
* slots: []
* },
* "YANDEX.DATETIME": {
* slots: [{
* type: "YANDEX.DATETIME",
* value: { year: 2024 }
* }]
* }
* }
* ```
*/
intents?: object;
}
/**
* @interface INluResult
* Интерфейс результата поиска в NLU
*
* @template T - Тип возвращаемого результата (по умолчанию object)
*
* @example
* ```ts
* // Пример успешного результата
* const successResult: INluResult<string> = {
* status: true,
* result: "найденное значение"
* };
*
* // Пример неудачного результата
* const failResult: INluResult<string> = {
* status: false,
* result: null
* };
* ```
*/
export interface INluResult<T = object> {
/**
* Статус поиска. true если значение найдено, false если не найдено
*/
status: boolean;
/**
* Результат поиска. null если значение не найдено
*/
result: T | null;
}
/**
* @interface INluFIO
* Интерфейс результата поиска ФИО в NLU
*
* @example
* ```ts
* const fio: INluFIO = {
* first_name: "Иван",
* patronymic_name: "Иванович",
* last_name: "Иванов"
* };
* ```
*/
export interface INluFIO {
/**
* Имя
*/
first_name?: string;
/**
* Отчество
*/
patronymic_name?: string;
/**
* Фамилия
*/
last_name?: string;
}
/**
* @interface INluGeo
* Интерфейс результата поиска геолокации в NLU
*
* @example
* ```ts
* const geo: INluGeo = {
* country: "Россия",
* city: "Москва",
* street: "Ленина",
* house_number: "10"
* };
* ```
*/
export interface INluGeo {
/**
* Страна
*/
country?: string;
/**
* Город
*/
city?: string;
/**
* Улица
*/
street?: string;
/**
* Номер дома
*/
house_number?: string;
/**
* Аэропорт
*/
airport?: string;
}
/**
* @interface INluDateTime
* Интерфейс результата поиска даты и времени в NLU
*
* @example
* ```ts
* const dateTime: INluDateTime = {
* year: 2024,
* month: 3,
* day: 15,
* hour: 14,
* minute: 30
* };
*
* // Относительная дата
* const relativeDateTime: INluDateTime = {
* day: 1,
* day_is_relative: true // "завтра"
* };
* ```
*/
export interface INluDateTime {
/**
* Год
*/
year?: number;
/**
* Флаг относительности года
*/
year_is_relative?: boolean;
/**
* Месяц
*/
month?: number;
/**
* Флаг относительности месяца
*/
month_is_relative?: boolean;
/**
* День
*/
day?: number;
/**
* Флаг относительности дня
*/
day_is_relative?: boolean;
/**
* Час
*/
hour?: number;
/**
* Флаг относительности часа
*/
hour_is_relative?: boolean;
/**
* Минута
*/
minute?: number;
/**
* Флаг относительности минуты
*/
minute_is_relative?: boolean;
}
/**
* @interface INluThisUser
* Интерфейс результата поиска информации о пользователе в NLU
*
* @example
* ```ts
* const user: INluThisUser = {
* username: "ivan_ivanov",
* first_name: "Иван",
* last_name: "Иванов"
* };
* ```
*/
export interface INluThisUser {
/**
* Имя пользователя
*/
username?: string | null;
/**
* Фамилия пользователя
*/
first_name?: string | null;
/**
* Отчество пользователя
*/
last_name?: string | null;
}
/**
* @interface INluSlot
* Интерфейс слота в NLU
*
* @example
* ```ts
* const slot: INluSlot = {
* type: "YANDEX.NUMBER",
* value: 42
* };
* ```
*/
export interface INluSlot<TNLU extends string | unknown = string | unknown> {
/**
* Тип значения слота
*/
type?: string;
/**
* Дополнительные свойства слота
*/
[name: string]: TNLU | string | unknown;
}
/**
* @interface INluIntents
* Интерфейс интентов в NLU
*
* @example
* ```ts
* const intents: INluIntents = {
* "YANDEX.CONFIRM": {
* slots: []
* },
* "YANDEX.REJECT": {
* slots: []
* }
* };
* ```
*/
export interface INluIntents {
/**
* Интенты по их именам
*/
[name: string]: INluIntent;
}
/**
* @interface INluIntent
* Интерфейс интента в NLU
*
* @example
* ```ts
* const intent: INluIntent = {
* slots: [
* {
* type: "YANDEX.DATETIME",
* value: { year: 2024 }
* }
* ]
* };
* ```
*/
export interface INluIntent {
/**
* Слоты. В Алисе разработчик сам их задает
*/
slots: INluSlot[] | INluSlot;
}
/**
* Основной интерфейс NLU
*
* @example
* ```ts
* const nlu: INlu = {
* thisUser: {
* username: "ivan_ivanov",
* first_name: "Иван"
* },
* intents: {
* "YANDEX.CONFIRM": {
* slots: []
* }
* }
* };
* ```
*/
export interface INlu extends IBaseNlu {
/**
* Информация о пользователе
*/
thisUser?: INluThisUser;
/**
* Интенты
*/
intents?: INluIntents;
}