UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

80 lines (79 loc) 5.31 kB
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>; }