UNPKG

@botonic/core

Version:

Runtime and APIs for Botonic bots: actions, context, messaging, and integration hooks used by the **current** framework line.

196 lines 9.43 kB
import { BotonicRatingData } from '@botonic/shared'; import { BotonicOutputAudioData, BotonicOutputDocumentData, BotonicOutputImageData, BotonicOutputVideoData, } from '@botonic/shared'; import { BotonicButtonMessageData, BotonicButtonType, BotonicCarouselData, BotonicCustomData, BotonicLocationData, BotonicTextData, BotonicTypingEventData, } from '@botonic/shared'; import { WebchatClientSettings } from '@botonic/shared'; import { BotonicWhatsappButtonListData, BotonicWhatsappCatalogData, BotonicWhatsappCTAUrlButtonData, BotonicWhatsappMediaCarouselData, BotonicWhatsappProductCarouselData, BotonicWhatsappProductData, BotonicWhatsappProductListData, BotonicWhatsappTemplateData, } from '@botonic/shared'; import { BotServerMessageAudio, BotServerMessageButtonMessage, BotServerMessageCarousel, BotServerMessageCustom, BotServerMessageDocument, BotServerMessageImage, BotServerMessageLocation, BotServerMessageRating, BotServerMessageText, BotServerMessageTypingEvent, BotServerMessageVideo, BotServerMessageWebchatClientSettings, BotServerMessageWhatsappButtonList, BotServerMessageWhatsappCatalog, BotServerMessageWhatsappCTAUrlButton, BotServerMessageWhatsappMediaCarousel, BotServerMessageWhatsappProduct, BotServerMessageWhatsappProductCarousel, BotServerMessageWhatsappProductList, BotServerMessageWhatsappTemplate, } from './bot-server-message'; export class BotServerMessageFactory { static createText({ text, payload, metadata, }) { return new BotServerMessageText(new BotonicTextData(text, payload), metadata); } static createAudio({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) { return new BotServerMessageAudio(new BotonicOutputAudioData({ attachment_url: attachmentUrl, attachment_content: attachmentContent, caption: caption, file_info: fileInfo, }), metadata); } static createImage({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) { return new BotServerMessageImage(new BotonicOutputImageData({ attachment_url: attachmentUrl, attachment_content: attachmentContent, caption: caption, file_info: fileInfo, }), metadata); } static createVideo({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) { return new BotServerMessageVideo(new BotonicOutputVideoData({ attachment_url: attachmentUrl, attachment_content: attachmentContent, caption: caption, file_info: fileInfo, }), metadata); } static createDocument({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) { return new BotServerMessageDocument(new BotonicOutputDocumentData({ attachment_url: attachmentUrl, attachment_content: attachmentContent, caption: caption, file_info: fileInfo, }), metadata); } static createLocation({ latitude, longitude, title, address, metadata, }) { return new BotServerMessageLocation(new BotonicLocationData(latitude, longitude, title, address), metadata); } static createButtonMessage({ text, buttons, metadata, }) { return new BotServerMessageButtonMessage(new BotonicButtonMessageData(text, buttons), metadata); } static createCarousel({ elements, text, metadata, }) { return new BotServerMessageCarousel(new BotonicCarouselData(elements, text), metadata); } static createCustom({ name, props, metadata, }) { return new BotServerMessageCustom(new BotonicCustomData(name, props), metadata); } static createRating({ text, type, buttons, sendButtonText, openListButtonText, metadata, }) { return new BotServerMessageRating(new BotonicRatingData(text, type, buttons, sendButtonText, openListButtonText), metadata); } static createTypingEvent({ eventName, metadata, }) { return new BotServerMessageTypingEvent(new BotonicTypingEventData(eventName), metadata); } /** Payload type `webchat_client_settings` for Hubtype `send_messages` (v2 bots). */ static createWebchatClientSettings({ settings, metadata, }) { const data = settings instanceof WebchatClientSettings ? settings : new WebchatClientSettings(settings); return new BotServerMessageWebchatClientSettings(data, metadata); } /** * Creates a postback button that sends a payload when clicked */ static createPostbackButton({ title, payload, }) { return { type: BotonicButtonType.Postback, title, payload }; } /** * Creates a URL button that opens a link in the browser */ static createUrlButton({ title, url, }) { return { type: BotonicButtonType.WebUrl, title, url }; } /** * Creates a webview button that opens a URL in a webview. * Uses `settings.STATIC_URL` (Lambda settings), not `process.env`. */ static createWebviewButton(webviewButtonParams, botonicContext) { const { title, webview, params } = webviewButtonParams; const staticUrl = resolveStaticUrl(botonicContext.settings); if (!staticUrl) { throw new Error('STATIC_URL is missing from bot context settings (required for webview buttons)'); } const base = staticUrl.replace(/\/+$/, ''); const url = new URL(`${base}/webviews/${webview}`); url.searchParams.set('user_id', botonicContext.session.user.id); url.searchParams.set('bot_id', botonicContext.session.bot.id); url.searchParams.set('hubtype_api_url', botonicContext.settings.hubtypeApiUrl); if (params) { for (const [key, value] of Object.entries(params)) { url.searchParams.set(key, String(value)); } } return { type: BotonicButtonType.WebUrl, title, url: url.toString(), }; } /** * Helper method to create a carousel element * This simplifies carousel element creation */ static createCarouselElement({ title, subtitle, image, buttons, }) { return { title, subtitle, image, buttons, }; } static createWhatsappButtonList({ header, body, footer, button, sections, metadata, }) { return new BotServerMessageWhatsappButtonList(new BotonicWhatsappButtonListData({ header, body, footer, button, sections, }), metadata); } static createWhatsappCTAUrlButton({ headerType, header, headerImage, headerDocument, headerVideo, body, url, displayText, footer, metadata, }) { return new BotServerMessageWhatsappCTAUrlButton(new BotonicWhatsappCTAUrlButtonData({ header_type: headerType, header, header_image: headerImage, header_document: headerDocument, header_video: headerVideo, body, url, display_text: displayText, footer, }), metadata); } static createWhatsappCatalog({ body, footer, thumbnailProductId, metadata, }) { return new BotServerMessageWhatsappCatalog(new BotonicWhatsappCatalogData({ body, footer, thumbnail_product_id: thumbnailProductId, }), metadata); } static createWhatsappProduct({ body, catalogId, productId, footer, metadata, }) { return new BotServerMessageWhatsappProduct(new BotonicWhatsappProductData({ body, catalog_id: catalogId, product_id: productId, footer, }), metadata); } static createWhatsappProductList({ header, body, footer, catalogId, sections, metadata, }) { return new BotServerMessageWhatsappProductList(new BotonicWhatsappProductListData({ body, catalog_id: catalogId, header, sections, footer, }), metadata); } static createWhatsappProductCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }) { return new BotServerMessageWhatsappProductCarousel(new BotonicWhatsappProductCarouselData({ template_name: templateName, template_language: templateLanguage, cards, body_parameters: bodyParameters, }), metadata); } static createWhatsappMediaCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }) { return new BotServerMessageWhatsappMediaCarousel(new BotonicWhatsappMediaCarouselData({ template_name: templateName, template_language: templateLanguage, cards, body_parameters: bodyParameters, }), metadata); } static createWhatsappTemplate({ name, namespace, languageCode, components, metadata, }) { return new BotServerMessageWhatsappTemplate(new BotonicWhatsappTemplateData({ name, namespace, language_code: languageCode, components, }), metadata); } } const resolveStaticUrl = (settings) => { // This has to be defined in developers template.yaml (Local Development) if (process.env.AWS_SAM_LOCAL === 'true') { return process.env.STATIC_URL; } return settings.staticUrl; }; //# sourceMappingURL=factory.js.map