UNPKG

umbot

Version:

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

91 lines (90 loc) 4.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLinkButton = getLinkButton; exports.getButton = getButton; const utils_1 = require("../../utils"); function getUrlSeparator(url) { return url.includes('?') ? '&' : '?'; } function init(appContext, title, url, payload, hide, options = {}) { let res = null; if (title !== null) { res = { title, type: null, payload, hide, options, }; let correctUrl = url; if (correctUrl && utils_1.Text.isUrl(correctUrl)) { if (appContext?.platformParams.utm_text === null) { if (!correctUrl.includes('utm_source')) { correctUrl += `${getUrlSeparator(correctUrl)}utm_source=${options.utmSource || 'umBot'}&utm_medium=${options.utmMedium || 'cpc'}&utm_campaign=${options.utmCampaign || 'phone'}`; } } else if (appContext?.platformParams.utm_text) { correctUrl += getUrlSeparator(correctUrl) + appContext?.platformParams.utm_text; } } else { correctUrl = null; } res.url = correctUrl; } return res; } /** * Возвращает кнопку в виде сайджеста (ссылки под текстом). * * @param {AppContext} appContext Контекст приложения * @param {string} title Текст кнопки * @param {string} [url=''] URL для перехода (должен начинаться с http:// или https://) * @param {TButtonPayload} [payload=null] Дополнительные данные для обработки нажатия * @param {IButtonOptions} [options={}] Дополнительные параметры: * - utmSource: источник перехода * - utmMedium: тип рекламного канала * - utmCampaign: название рекламной кампании * * @example * ```ts * // Простая ссылка * const button1 = getButton('Перейти на сайт', 'http://localhost'); * * // Ссылка с UTM-метками * const button2 = getButton('Купить', 'http://localhost/product', null, { * utmSource: 'bot', * utmMedium: 'button', * utmCampaign: 'spring_sale' * }); * * // Ссылка с дополнительными данными * const button3 = getButton('Подробнее', 'http://localhost/article', { * action: 'read', * article_id: 123 * }); * ``` * * @returns {IButtonType | null} Возвращается объект, если кнопка добавлена, и null в случае, если переданы некорректные настройки для кнопки */ function getLinkButton(appContext, title, url = '', payload = null, options = {}) { return init(appContext, title, url, payload, false, options); } /** * Возвращает кнопку в виде интерактивной кнопки. * * @param {AppContext} appContext Контекст приложения * @param {string} title Текст кнопки * @param {string} [url=''] URL для перехода * @param {TButtonPayload} [payload=null] Дополнительные данные для обработки нажатия. * Может быть строкой или объектом. * @param {IButtonOptions} [options={}] Дополнительные параметры: * - utmSource: источник перехода * - utmMedium: тип рекламного канала * - utmCampaign: название рекламной кампании * * @returns {IButtonType | null} Возвращается объект, если кнопка добавлена, и null в случае, если переданы некорректные настройки для кнопки. */ function getButton(appContext, title, url = '', payload = null, options = {}) { return init(appContext, title, url, payload, true, options); }