diff --git a/packages/bot-engine/forge/executeForgedBlock.ts b/packages/bot-engine/forge/executeForgedBlock.ts index 79be376ba..ea44781b1 100644 --- a/packages/bot-engine/forge/executeForgedBlock.ts +++ b/packages/bot-engine/forge/executeForgedBlock.ts @@ -148,6 +148,9 @@ export const executeForgedBlock = async ( ? { type: 'custom-embed', content: { + url: action.run.web.displayEmbedBubble.parseUrl({ + options: parsedOptions, + }), maxBubbleWidth: action.run.web.displayEmbedBubble.maxBubbleWidth, initFunction: action.run.web.displayEmbedBubble.parseInitFunction({ options: parsedOptions, diff --git a/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts index d8594ac6a..92a5a4f48 100644 --- a/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts +++ b/packages/bot-engine/whatsapp/convertMessageToWhatsAppMessage.ts @@ -7,11 +7,11 @@ import { convertRichTextToMarkdown } from '@typebot.io/lib/markdown/convertRichT export const convertMessageToWhatsAppMessage = ( message: ContinueChatResponse['messages'][number] -): WhatsAppSendingMessage | undefined => { +): WhatsAppSendingMessage | null => { switch (message.type) { case BubbleBlockType.TEXT: { if (!message.content.richText || message.content.richText.length === 0) - return + return null return { type: 'text', text: { @@ -23,7 +23,7 @@ export const convertMessageToWhatsAppMessage = ( } case BubbleBlockType.IMAGE: { if (!message.content.url || isImageUrlNotCompatible(message.content.url)) - return + return null return { type: 'image', image: { @@ -32,7 +32,7 @@ export const convertMessageToWhatsAppMessage = ( } } case BubbleBlockType.AUDIO: { - if (!message.content.url) return + if (!message.content.url) return null return { type: 'audio', audio: { @@ -45,7 +45,7 @@ export const convertMessageToWhatsAppMessage = ( !message.content.url || message.content.type !== VideoBubbleContentType.URL ) - return + return null return { type: 'video', video: { @@ -54,7 +54,17 @@ export const convertMessageToWhatsAppMessage = ( } } case BubbleBlockType.EMBED: { - if (!message.content.url) return + if (!message.content.url) return null + return { + type: 'text', + text: { + body: message.content.url, + }, + preview_url: true, + } + } + case 'custom-embed': { + if (!message.content.url) return null return { type: 'text', text: { diff --git a/packages/forge/blocks/calCom/actions/bookEvent.ts b/packages/forge/blocks/calCom/actions/bookEvent.ts index badd7cb8d..aa09ab6c0 100644 --- a/packages/forge/blocks/calCom/actions/bookEvent.ts +++ b/packages/forge/blocks/calCom/actions/bookEvent.ts @@ -42,6 +42,7 @@ export const bookEvent = createAction({ run: { web: { displayEmbedBubble: { + parseUrl: ({ options }) => options.link, maxBubbleWidth: 780, waitForEvent: { getSaveVariableId: ({ saveBookedDateInVariableId }) => diff --git a/packages/forge/core/types.ts b/packages/forge/core/types.ts index 1f0008397..7e5a96778 100644 --- a/packages/forge/core/types.ts +++ b/packages/forge/core/types.ts @@ -70,6 +70,12 @@ export type ActionDefinition< } web?: { displayEmbedBubble?: { + /** + * Used to determine the URL to be displayed as a text bubble in runtimes where the code can't be executed. (i.e. WhatsApp) + */ + parseUrl: (params: { + options: z.infer & z.infer + }) => string | undefined waitForEvent?: { getSaveVariableId?: ( options: z.infer & z.infer diff --git a/packages/schemas/features/chat/schema.ts b/packages/schemas/features/chat/schema.ts index 103f9a265..114178b6a 100644 --- a/packages/schemas/features/chat/schema.ts +++ b/packages/schemas/features/chat/schema.ts @@ -99,6 +99,7 @@ const embedMessageSchema = z }) const displayEmbedBubbleSchema = z.object({ + url: z.string().optional(), maxBubbleWidth: z.number().optional(), waitForEventFunction: z .object({