umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
258 lines (257 loc) • 8.22 kB
TypeScript
/**
* Тип для дополнительных данных кнопки.
* Может содержать любые данные, которые будут переданы при нажатии на кнопку.
*
*
* @example
* ```ts
* // Простой payload с действием
* const payload: TButtonPayload = { action: 'click' };
*
* // Сложный payload с данными
* const payload: TButtonPayload = {
* action: 'add_to_cart',
* productId: 123,
* quantity: 1,
* metadata: {
* source: 'catalog',
* timestamp: Date.now()
* }
* };
* ```
*/
/**
* @interface IButtonOptions
* Интерфейс для дополнительных опций кнопки.
*
* Позволяет настраивать внешний вид и поведение кнопки на различных платформах.
* Поддерживает как общие опции, так и специфичные для конкретных платформ.
*
* @example
* ```ts
* // Специфичные опции для VK
* const vkOptions: IButtonOptions = {
* _group: 'vk_buttons',
* color: 'blue',
* size: 'large',
* vk_style: 'primary'
* };
*
* // Специфичные опции для Telegram
* const telegramOptions: IButtonOptions = {
* _group: 'tg_buttons',
* color: 'primary',
* size: 'large',
* request_contact: true
* };
* ```
*/
export interface IButtonOptions {
/**
* Идентификатор группы для кнопки.
* Используется для объединения кнопок в логические группы.
* Позволяет организовать кнопки по категориям или функциональности.
*
* @example
* ```ts
* // Группировка кнопок навигации
* const options: IButtonOptions = {
* _group: 'nav_buttons'
* };
*
* // Группировка кнопок действий
* const options: IButtonOptions = {
* _group: 'action_buttons'
* };
* ```
*/
_group?: string | number;
/**
* Источник перехода
*/
utmSource?: string;
/**
* Тип рекламного канала
*/
utmMedium?: string;
/**
* Название рекламной кампании
*/
utmCampaign?: string;
/**
* Дополнительные опции для кнопки.
* Могут включать специфичные для платформы настройки.
*
* @example
* ```ts
* // Настройка кнопки для VK
* const options: IButtonOptions = {
* color: 'primary',
* size: 'large',
* vk_style: 'primary'
* };
*
* // Настройка кнопки для Telegram
* const options: IButtonOptions = {
* request_contact: true,
* request_location: false
* };
* ```
*/
[name: string]: unknown;
}
/**
* Интерфейс для определения структуры кнопки.
*
* Определяет основные свойства кнопки, которые используются на всех платформах.
* Поддерживает различные типы кнопок: текстовые, ссылки, с payload и т.д.
*
* @example
* ```ts
* // Создание простой текстовой кнопки
* const button: IButton = {
* title: 'Нажми меня',
* payload: { action: 'click' }
* };
*
* // Создание кнопки-ссылки
* const linkButton: IButton = {
* title: 'Перейти на сайт',
* url: 'http://localhost',
* options: { color: 'primary' }
* };
*
* // Создание кнопки с контактом (Telegram)
* const contactButton: IButton = {
* title: 'Отправить контакт',
* options: { request_contact: true }
* };
*
* // Создание кнопки с локацией (Telegram)
* const locationButton: IButton = {
* title: 'Отправить локацию',
* options: { request_location: true }
* };
* ```
*/
export interface IButton {
/**
* Заголовок кнопки.
* Основной текст, отображаемый на кнопке.
*
* @example
* ```ts
* const button: IButton = {
* title: 'Нажми меня'
* };
* ```
*/
title?: string;
/**
* Альтернативный текст кнопки.
* Используется в некоторых платформах вместо title.
* Например, в VK API используется text вместо title.
*
* @example
* ```ts
* const button: IButton = {
* text: 'Нажми меня'
* };
* ```
*/
text?: string;
/**
* URL для перехода при нажатии на кнопку.
* Используется для кнопок-ссылок.
*
* @example
* ```ts
* const button: IButton = {
* title: 'Перейти на сайт',
* url: 'http://localhost'
* };
* ```
*/
url?: string;
/**
* Дополнительные данные, передаваемые при нажатии на кнопку.
* Могут содержать любую информацию, необходимую для обработки нажатия.
* Используется для передачи контекста или параметров действия.
*
* @example
* ```ts
* // Простой payload
* const button: IButton = {
* title: 'Добавить в корзину',
* payload: {
* action: 'add_to_cart',
* productId: 123
* }
* };
*
* // Сложный payload с метаданными
* const button: IButton = {
* title: 'Оформить заказ',
* payload: {
* action: 'checkout',
* orderId: 456,
* metadata: {
* source: 'cart',
* timestamp: Date.now(),
* userPreferences: {
* delivery: 'express',
* payment: 'card'
* }
* }
* }
* };
* ```
*/
payload?: object;
/**
* Дополнительные параметры кнопки.
* Влияют на внешний вид и поведение кнопки.
* Могут включать как общие, так и платформо-специфичные настройки.
*
* @example
* ```ts
* // Платформо-специфичные настройки
* const button: IButton = {
* title: 'Отправить контакт',
* options: {
* request_contact: true,
* color: 'primary',
* size: 'large'
* }
* };
* ```
*/
options?: IButtonOptions;
}
/**
* Тип для кнопки.
* Может быть либо строкой (текстом кнопки), либо объектом, реализующим интерфейс IButton.
* Упрощенный вариант для быстрого создания простых кнопок.
*
* @example
* ```ts
* // Кнопка как строка (упрощенный вариант)
* const simpleButton: TButton = 'Нажми меня';
*
* // Кнопка как объект (полный вариант)
* const complexButton: TButton = {
* title: 'Нажми меня',
* payload: { action: 'click' }
* };
*
* // Массив кнопок разных типов
* const buttons: TButton[] = [
* 'Простая кнопка',
* {
* title: 'Сложная кнопка',
* payload: { action: 'complex' }
* }
* ];
* ```
*/
export type TButton = string | IButton;