umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
80 lines (79 loc) • 5.31 kB
TypeScript
import { BotController, AppContext } from '../../../index';
import { BasePlatform } from '../Base/Base';
import { IAlisaRequestState, IAlisaResponse, IAlisaWebhookRequest, IAlisaWebhookResponse } from './interfaces/IAlisaPlatform';
/**
* Адаптер, обеспечивающий полную поддержку платформы Яндекс.Диалоги (Алиса). Позволяет разрабатывать навыки для Алисы на TypeScript с использованием всего функционала платформы: от обработки голосовых запросов до работы с карточками и кнопками.
*
* Подключение адаптера не требует изменения существующей бизнес-логики: после интеграции все команды и обработчики, написанные для umbot, автоматически становятся доступны для Алисы.
* Единый интерфейс позволяет одновременно использовать одну бизнес-логику для нескольких платформ (Telegram, VK, Алиса и др.) без дублирования кода.
*
* Этот адаптер автоматически обрабатывает входящие webhook`и от Алисы,
* преобразует их в унифицированный формат фреймворка и формирует ответ,
* совместимый с требованиями платформы. Подключается одной строкой и
* не мешает работе других адаптеров (например, для Telegram или VK).
*
* Поддерживает:
* - голосовые и текстовые запросы;
* - сохранение состояния (user/application/session);
* - карточки, кнопки, TTS-эффекты;
* - health-check (`ping` → `pong`);
*
* Подключается как любой другой адаптер: `bot.use(new AlisaAdapter(token))`.
* Несколько адаптеров могут работать одновременно — система сама выберет подходящий
* на основе заголовков и структуры входящего запроса.
* @example
* ```ts
* // Простейший навык для Алисы, который отвечает на приветствие
* import { Bot } from 'umbot';
* import { AlisaAdapter } from 'umbot/plugins';
*
* const bot = new Bot()
* .use(new AlisaAdapter('YOUR_OAUTH_TOKEN')) // Подключаем адаптер для Алисы
* .addCommand('start', ['привет'], (_text, ctx) => {
* ctx.text = 'Привет! Я твой первый навык для Алисы';
* });
*
* bot.start('localhost', 3000);
* ```
*
* @see {@link https://yandex.ru/dev/dialogs/alice/doc/protocol-docpage/ | Протокол Яндекс.Диалогов}
* @see Bot
* @see BotController
* @see BasePlatform
*/
export declare class AlisaAdapter extends BasePlatform<string | IAlisaWebhookRequest> {
#private;
platformName: string;
init(appContext: AppContext): void;
isPlatformOnQuery(query: IAlisaWebhookRequest, _headers?: Record<string, unknown>): boolean;
setQueryData(query: IAlisaWebhookRequest, controller: BotController): boolean;
/**
* Формирует ответ для пользователя.
* Собирает текст, TTS, карточки и кнопки в единый объект ответа
* @returns {Promise<IAlisaResponse>} Объект ответа для Алисы
*/
protected _getResponse(controller: BotController): Promise<IAlisaResponse>;
getContent(controller: BotController, stateData?: Record<string, unknown> | null): Promise<IAlisaWebhookResponse>;
/**
* Использует кастомную обработку TTS через {@link soundProcessing} для вставки
* звуковых эффектов в соответствии с требованиями Алисы.
*/
soundProcessing(controller: BotController): Promise<void>;
/**
* Возвращает состояние из `request.state` (user/application/session).
* Тип состояния определяется настройками навыка в Яндекс.Диалогах.
*/
getLocalStorage<TStorageResult = unknown>(controller: BotController): TStorageResult;
/**
* Проверяет, присутствует ли сохранённое состояние в запросе.
*
* @param controller - контроллер с бизнес-логикой приложения
* @returns `true`, если состояние есть (не null)
*/
isLocalStorage(controller: BotController): boolean;
/**
* Алиса не поддерживает push-сообщения, поэтому всегда возвращает `false`.
*/
send(): boolean;
getQueryExample(query: string, userId: string, count: number, state: IAlisaRequestState | string): Record<string, unknown>;
}