@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
JavaScript
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