umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
91 lines (90 loc) • 4.09 kB
JavaScript
;
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);
}