@botonic/plugin-flow-builder 0.41.0 → 0.41.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AgenticOutputMessage } from '@botonic/core';
3
+ import { ActionRequest } from '@botonic/react';
3
4
  import { ContentFieldsBase } from './content-fields-base';
4
5
  import { HtAiAgentNode, HtInputGuardrailRule } from './hubtype-fields/ai-agent';
5
6
  export declare class FlowAiAgent extends ContentFieldsBase {
@@ -16,5 +17,5 @@ export declare class FlowAiAgent extends ContentFieldsBase {
16
17
  }[];
17
18
  responses: AgenticOutputMessage[];
18
19
  static fromHubtypeCMS(component: HtAiAgentNode): FlowAiAgent;
19
- toBotonic(id: string): JSX.Element;
20
+ toBotonic(id: string, request: ActionRequest): JSX.Element;
20
21
  }
@@ -2,10 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlowAiAgent = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("@botonic/react");
6
- const constants_1 = require("../constants");
7
5
  const content_fields_base_1 = require("./content-fields-base");
8
- const flow_element_1 = require("./flow-element");
6
+ const flow_carousel_1 = require("./flow-carousel");
7
+ const flow_text_1 = require("./flow-text");
9
8
  class FlowAiAgent extends content_fields_base_1.ContentFieldsBase {
10
9
  constructor() {
11
10
  super(...arguments);
@@ -24,18 +23,13 @@ class FlowAiAgent extends content_fields_base_1.ContentFieldsBase {
24
23
  newAiAgent.sources = component.content.sources;
25
24
  return newAiAgent;
26
25
  }
27
- toBotonic(id) {
26
+ toBotonic(id, request) {
28
27
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: this.responses.map((response) => {
29
- if (response.type === 'text') {
30
- return (0, jsx_runtime_1.jsx)(react_1.Text, { children: response.content.text }, id);
31
- }
32
- if (response.type === 'textWithButtons') {
33
- return ((0, jsx_runtime_1.jsxs)(react_1.Text, { children: [response.content.text, response.content.buttons.map((button, buttonIndex) => {
34
- return ((0, jsx_runtime_1.jsx)(react_1.Button, Object.assign({ payload: `${constants_1.EMPTY_PAYLOAD}${constants_1.SOURCE_INFO_SEPARATOR}${buttonIndex}` }, { children: button.text }), buttonIndex));
35
- })] }, id));
28
+ if (response.type === 'text' || response.type === 'textWithButtons') {
29
+ return flow_text_1.FlowText.fromAIAgent(id, response);
36
30
  }
37
31
  if (response.type === 'carousel') {
38
- return ((0, jsx_runtime_1.jsx)(react_1.Carousel, { children: response.content.elements.map(element => flow_element_1.FlowElement.fromAIAgent(id, element).toBotonic(id)) }, id));
32
+ return flow_carousel_1.FlowCarousel.fromAIAgent(id, response, request);
39
33
  }
40
34
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
41
35
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"flow-ai-agent.js","sourceRoot":"","sources":["../../../src/content-fields/flow-ai-agent.tsx"],"names":[],"mappings":";;;;AACA,0CAAuD;AAEvD,4CAAmE;AACnE,+DAAyD;AACzD,iDAA4C;AAG5C,MAAa,WAAY,SAAQ,uCAAiB;IAAlD;;QACS,SAAI,GAAW,EAAE,CAAA;QACjB,SAAI,GAAW,EAAE,CAAA;QACjB,iBAAY,GAAW,EAAE,CAAA;QAKzB,cAAS,GAA2B,EAAE,CAAA;IAsD/C,CAAC;IApDC,MAAM,CAAC,cAAc,CAAC,SAAwB;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA;QACxC,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACxD,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACvD,UAAU,CAAC,mBAAmB;YAC5B,SAAS,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAA;QAC/C,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAA;QAC9C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,CACL,2DACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAA8B,EAAE,EAAE;gBACrD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC5B,OAAO,uBAAC,YAAI,cAAW,QAAQ,CAAC,OAAO,CAAC,IAAI,IAA1B,EAAE,CAAgC,CAAA;iBACrD;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBACvC,OAAO,CACL,wBAAC,YAAI,eACF,QAAQ,CAAC,OAAO,CAAC,IAAI,EACrB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gCACpD,OAAO,CACL,uBAAC,cAAM,kBAEL,OAAO,EAAE,GAAG,yBAAa,GAAG,iCAAqB,GAAG,WAAW,EAAE,gBAEhE,MAAM,CAAC,IAAI,KAHP,WAAW,CAIT,CACV,CAAA;4BACH,CAAC,CAAC,KAXO,EAAE,CAYN,CACR,CAAA;iBACF;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;oBAChC,OAAO,CACL,uBAAC,gBAAQ,cACN,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACvC,0BAAW,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CACnD,IAHY,EAAE,CAIN,CACZ,CAAA;iBACF;gBAED,OAAO,kDAAK,CAAA;YACd,CAAC,CAAC,GACD,CACJ,CAAA;IACH,CAAC;CACF;AA9DD,kCA8DC"}
1
+ {"version":3,"file":"flow-ai-agent.js","sourceRoot":"","sources":["../../../src/content-fields/flow-ai-agent.tsx"],"names":[],"mappings":";;;;AAGA,+DAAyD;AACzD,mDAA8C;AAC9C,2CAAsC;AAGtC,MAAa,WAAY,SAAQ,uCAAiB;IAAlD;;QACS,SAAI,GAAW,EAAE,CAAA;QACjB,SAAI,GAAW,EAAE,CAAA;QACjB,iBAAY,GAAW,EAAE,CAAA;QAKzB,cAAS,GAA2B,EAAE,CAAA;IA8B/C,CAAC;IA5BC,MAAM,CAAC,cAAc,CAAC,SAAwB;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA;QACxC,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACxD,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACvD,UAAU,CAAC,mBAAmB;YAC5B,SAAS,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAA;QAC/C,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAA;QAC9C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,OAAsB;QAC1C,OAAO,CACL,2DACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAA8B,EAAE,EAAE;gBACrD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBACnE,OAAO,oBAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;iBAC1C;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;oBAChC,OAAO,4BAAY,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;iBACvD;gBAED,OAAO,kDAAK,CAAA;YACd,CAAC,CAAC,GACD,CACJ,CAAA;IACH,CAAC;CACF;AAtCD,kCAsCC"}
@@ -1,4 +1,6 @@
1
1
  /// <reference types="react" />
2
+ import { CarouselMessage } from '@botonic/core';
3
+ import { ActionRequest } from '@botonic/react';
2
4
  import { FlowBuilderApi } from '../api';
3
5
  import { ContentFieldsBase } from './content-fields-base';
4
6
  import { FlowElement } from './flow-element';
@@ -7,5 +9,6 @@ export declare class FlowCarousel extends ContentFieldsBase {
7
9
  code: string;
8
10
  elements: FlowElement[];
9
11
  static fromHubtypeCMS(component: HtCarouselNode, locale: string, cmsApi: FlowBuilderApi): FlowCarousel;
10
- toBotonic(id: string): JSX.Element;
12
+ static fromAIAgent(id: string, carouselMessage: CarouselMessage, request: ActionRequest): JSX.Element;
13
+ toBotonic(id: string, request: ActionRequest): JSX.Element;
11
14
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FlowCarousel = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const core_1 = require("@botonic/core");
5
6
  const react_1 = require("@botonic/react");
6
7
  const content_fields_base_1 = require("./content-fields-base");
7
8
  const flow_element_1 = require("./flow-element");
@@ -17,7 +18,43 @@ class FlowCarousel extends content_fields_base_1.ContentFieldsBase {
17
18
  newCarousel.elements = component.content.elements.map(element => flow_element_1.FlowElement.fromHubtypeCMS(element, locale, cmsApi));
18
19
  return newCarousel;
19
20
  }
20
- toBotonic(id) {
21
+ static fromAIAgent(id, carouselMessage, request) {
22
+ const canUseWhatsappInteractiveMediaCarousel = () => {
23
+ const isValid = carouselMessage.content.text &&
24
+ !carouselMessage.content.elements.some(element => element.button.payload) &&
25
+ carouselMessage.content.elements.every(element => element.button.url);
26
+ if (!isValid) {
27
+ console.warn('Cannot use WhatsappInteractiveMediaCarousel for Whatsapp created by AIAgent', carouselMessage.content);
28
+ }
29
+ return isValid;
30
+ };
31
+ if ((0, core_1.isWhatsapp)(request.session) &&
32
+ canUseWhatsappInteractiveMediaCarousel()) {
33
+ return ((0, jsx_runtime_1.jsx)(react_1.WhatsappInteractiveMediaCarousel, { cards: carouselMessage.content.elements.map(element => {
34
+ const buttonText = element.button.text;
35
+ const buttonUrl = element.button.url;
36
+ const imageLink = element.image;
37
+ return {
38
+ text: element.title,
39
+ action: { buttonText, buttonUrl, imageLink },
40
+ };
41
+ }), textMessage: carouselMessage.content.text }));
42
+ }
43
+ return ((0, jsx_runtime_1.jsx)(react_1.Carousel, { children: carouselMessage.content.elements.map((element, index) => flow_element_1.FlowElement.fromAIAgent(`${id}-element-${index}`, element).toBotonic(id)) }, id));
44
+ }
45
+ toBotonic(id, request) {
46
+ if ((0, core_1.isWhatsapp)(request.session)) {
47
+ return ((0, jsx_runtime_1.jsx)(react_1.WhatsappInteractiveMediaCarousel, { cards: this.elements.map(element => {
48
+ var _a, _b;
49
+ const buttonText = ((_a = element.button) === null || _a === void 0 ? void 0 : _a.text) || '';
50
+ const buttonUrl = ((_b = element.button) === null || _b === void 0 ? void 0 : _b.url) || '';
51
+ const imageLink = element.image || '';
52
+ return {
53
+ text: element.title,
54
+ action: { buttonText, buttonUrl, imageLink },
55
+ };
56
+ }), textMessage: 'These are the options' }));
57
+ }
21
58
  return ((0, jsx_runtime_1.jsx)(react_1.Carousel, { children: this.elements.map(element => element.toBotonic(id)) }, id));
22
59
  }
23
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flow-carousel.js","sourceRoot":"","sources":["../../../src/content-fields/flow-carousel.tsx"],"names":[],"mappings":";;;;AAAA,0CAAyC;AAIzC,+DAAyD;AACzD,iDAA4C;AAG5C,MAAa,YAAa,SAAQ,uCAAiB;IAAnD;;QACS,SAAI,GAAG,EAAE,CAAA;QACT,aAAQ,GAAkB,EAAE,CAAA;IAsBrC,CAAC;IApBC,MAAM,CAAC,cAAc,CACnB,SAAyB,EACzB,MAAc,EACd,MAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAClD,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QACjC,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC9D,0BAAW,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CACpD,CAAA;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,CACL,uBAAC,gBAAQ,cACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IADvC,EAAE,CAEN,CACZ,CAAA;IACH,CAAC;CACF;AAxBD,oCAwBC"}
1
+ {"version":3,"file":"flow-carousel.js","sourceRoot":"","sources":["../../../src/content-fields/flow-carousel.tsx"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ class FlowElement extends content_fields_base_1.ContentFieldsBase {
27
27
  newElement.subtitle = element.subtitle;
28
28
  newElement.image = element.image;
29
29
  newElement.button = flow_button_1.FlowButton.fromAIAgent({
30
- id: '',
30
+ id: `${id}-button`,
31
31
  text: element.button.text,
32
32
  url: element.button.url,
33
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"flow-element.js","sourceRoot":"","sources":["../../../src/content-fields/flow-element.tsx"],"names":[],"mappings":";;;;AACA,0CAA8D;AAG9D,+DAAyD;AACzD,+CAA0C;AAG1C,MAAa,WAAY,SAAQ,uCAAiB;IAAlD;;QACS,UAAK,GAAG,EAAE,CAAA;QACV,aAAQ,GAAG,EAAE,CAAA;QAEb,UAAK,GAAG,EAAE,CAAA;QACV,WAAM,GAAG,KAAK,CAAA;IAkDvB,CAAC;IAhDC,MAAM,CAAC,cAAc,CACnB,SAA4B,EAC5B,MAAc,EACd,MAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QAChE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QACtE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QACjE,UAAU,CAAC,MAAM,GAAG,wBAAU,CAAC,cAAc,CAC3C,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,MAAM,CACP,CAAA;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,EAAU,EACV,OAKC;QAED,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,MAAM,GAAG,wBAAU,CAAC,WAAW,CAAC;YACzC,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;SACxB,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,QAAgB;;QACxB,OAAO,CACL,wBAAC,eAAO,eACN,uBAAC,WAAG,IAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EACxB,uBAAC,aAAK,cAAE,IAAI,CAAC,KAAK,GAAS,EAC3B,uBAAC,gBAAQ,cAAE,IAAI,CAAC,QAAQ,GAAY,EACnC,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC,CAAC,CAAC,KAJjB,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE,CAK5B,CACX,CAAA;IACH,CAAC;CACF;AAvDD,kCAuDC"}
1
+ {"version":3,"file":"flow-element.js","sourceRoot":"","sources":["../../../src/content-fields/flow-element.tsx"],"names":[],"mappings":";;;;AACA,0CAA8D;AAG9D,+DAAyD;AACzD,+CAA0C;AAG1C,MAAa,WAAY,SAAQ,uCAAiB;IAAlD;;QACS,UAAK,GAAG,EAAE,CAAA;QACV,aAAQ,GAAG,EAAE,CAAA;QAEb,UAAK,GAAG,EAAE,CAAA;QACV,WAAM,GAAG,KAAK,CAAA;IAkDvB,CAAC;IAhDC,MAAM,CAAC,cAAc,CACnB,SAA4B,EAC5B,MAAc,EACd,MAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QAChE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QACtE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QACjE,UAAU,CAAC,MAAM,GAAG,wBAAU,CAAC,cAAc,CAC3C,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,MAAM,CACP,CAAA;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,EAAU,EACV,OAKC;QAED,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,MAAM,GAAG,wBAAU,CAAC,WAAW,CAAC;YACzC,EAAE,EAAE,GAAG,EAAE,SAAS;YAClB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;SACxB,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,QAAgB;;QACxB,OAAO,CACL,wBAAC,eAAO,eACN,uBAAC,WAAG,IAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EACxB,uBAAC,aAAK,cAAE,IAAI,CAAC,KAAK,GAAS,EAC3B,uBAAC,gBAAQ,cAAE,IAAI,CAAC,QAAQ,GAAY,EACnC,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC,CAAC,CAAC,KAJjB,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE,CAK5B,CACX,CAAA;IACH,CAAC;CACF;AAvDD,kCAuDC"}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { TextMessage, TextWithButtonsMessage } from '@botonic/core';
2
3
  import { ActionRequest } from '@botonic/react';
3
4
  import { FlowBuilderApi } from '../api';
4
5
  import { ContentFieldsBase } from './content-fields-base';
@@ -12,5 +13,6 @@ export declare class FlowText extends ContentFieldsBase {
12
13
  static fromHubtypeCMS(cmsText: HtTextNode, locale: string, cmsApi: FlowBuilderApi): FlowText;
13
14
  static replaceVariables(text: string, request: ActionRequest): string;
14
15
  private static isValidType;
16
+ static fromAIAgent(id: string, textMessage: TextMessage | TextWithButtonsMessage): JSX.Element;
15
17
  toBotonic(id: string, request: ActionRequest): JSX.Element;
16
18
  }
@@ -43,6 +43,22 @@ class FlowText extends content_fields_base_1.ContentFieldsBase {
43
43
  const validTypes = ['boolean', 'string', 'number'];
44
44
  return validTypes.includes(typeof botVariable);
45
45
  }
46
+ static fromAIAgent(id, textMessage) {
47
+ if (textMessage.type === 'text') {
48
+ return (0, jsx_runtime_1.jsx)(react_1.Text, { children: textMessage.content.text }, id);
49
+ }
50
+ return ((0, jsx_runtime_1.jsxs)(react_1.Text, { children: [textMessage.content.text, textMessage.content.buttons.map((button, buttonIndex) => {
51
+ const buttonData = {
52
+ id: `${id}-button-${buttonIndex}`,
53
+ text: button.text,
54
+ url: button.url,
55
+ payload: button.payload
56
+ ? `${constants_1.EMPTY_PAYLOAD}${constants_1.SOURCE_INFO_SEPARATOR}${buttonIndex}`
57
+ : undefined,
58
+ };
59
+ return flow_button_1.FlowButton.fromAIAgent(buttonData).renderButton(buttonIndex);
60
+ })] }, id));
61
+ }
46
62
  toBotonic(id, request) {
47
63
  const replacedText = FlowText.replaceVariables(this.text, request);
48
64
  return ((0, jsx_runtime_1.jsxs)(react_1.Text, { children: [replacedText, this.buttons.map((button, buttonIndex) => button.renderButton(buttonIndex, this.buttonStyle))] }, id));
@@ -1 +1 @@
1
- {"version":3,"file":"flow-text.js","sourceRoot":"","sources":["../../../src/content-fields/flow-text.tsx"],"names":[],"mappings":";;;;AAAA,0CAAoD;AAIpD,4CAA0E;AAC1E,oCAA8C;AAC9C,+DAAyD;AACzD,+CAA0C;AAC1C,qDAA4D;AAE5D,MAAa,QAAS,SAAQ,uCAAiB;IAA/C;;QACS,SAAI,GAAG,EAAE,CAAA;QACT,SAAI,GAAG,EAAE,CAAA;QACT,YAAO,GAAiB,EAAE,CAAA;QAC1B,gBAAW,GAAG,8BAAa,CAAC,MAAM,CAAA;IAsD3C,CAAC;IApDC,MAAM,CAAC,cAAc,CACnB,OAAmB,EACnB,MAAc,EACd,MAAsB;QAEtB,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QAC3B,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,8BAAa,CAAC,MAAM,CAAA;QAC3E,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACrD,wBAAU,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAClD,CAAA;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,IAAY,EAAE,OAAsB;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,4BAAgB,CAAC,CAAA;QAE5C,IAAI,YAAY,GAAG,IAAI,CAAA;QACvB,IAAI,OAAO,IAAI,OAAO,EAAE;YACtB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAClC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,qCAAyB,CAAC;oBAC7D,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAA,2BAAmB,EAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACzC,iGAAiG;gBACjG,YAAY,GAAG,YAAY,CAAC,OAAO,CACjC,KAAK,EACL,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CACpD,CAAA;YACH,CAAC,CAAC,CAAA;SACH;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,WAAgB;QACzC,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAClD,OAAO,UAAU,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAA;IAChD,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,OAAsB;QAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClE,OAAO,CACL,wBAAC,YAAI,eACF,YAAY,EACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CACxC,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CACnD,KAJQ,EAAE,CAKN,CACR,CAAA;IACH,CAAC;CACF;AA1DD,4BA0DC"}
1
+ {"version":3,"file":"flow-text.js","sourceRoot":"","sources":["../../../src/content-fields/flow-text.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { AgenticOutputMessage } from '@botonic/core';
3
+ import { ActionRequest } from '@botonic/react';
3
4
  import { ContentFieldsBase } from './content-fields-base';
4
5
  import { HtAiAgentNode, HtInputGuardrailRule } from './hubtype-fields/ai-agent';
5
6
  export declare class FlowAiAgent extends ContentFieldsBase {
@@ -16,5 +17,5 @@ export declare class FlowAiAgent extends ContentFieldsBase {
16
17
  }[];
17
18
  responses: AgenticOutputMessage[];
18
19
  static fromHubtypeCMS(component: HtAiAgentNode): FlowAiAgent;
19
- toBotonic(id: string): JSX.Element;
20
+ toBotonic(id: string, request: ActionRequest): JSX.Element;
20
21
  }
@@ -1,8 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Button, Carousel, Text } from '@botonic/react';
3
- import { EMPTY_PAYLOAD, SOURCE_INFO_SEPARATOR } from '../constants';
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
4
2
  import { ContentFieldsBase } from './content-fields-base';
5
- import { FlowElement } from './flow-element';
3
+ import { FlowCarousel } from './flow-carousel';
4
+ import { FlowText } from './flow-text';
6
5
  export class FlowAiAgent extends ContentFieldsBase {
7
6
  constructor() {
8
7
  super(...arguments);
@@ -21,18 +20,13 @@ export class FlowAiAgent extends ContentFieldsBase {
21
20
  newAiAgent.sources = component.content.sources;
22
21
  return newAiAgent;
23
22
  }
24
- toBotonic(id) {
23
+ toBotonic(id, request) {
25
24
  return (_jsx(_Fragment, { children: this.responses.map((response) => {
26
- if (response.type === 'text') {
27
- return _jsx(Text, { children: response.content.text }, id);
28
- }
29
- if (response.type === 'textWithButtons') {
30
- return (_jsxs(Text, { children: [response.content.text, response.content.buttons.map((button, buttonIndex) => {
31
- return (_jsx(Button, Object.assign({ payload: `${EMPTY_PAYLOAD}${SOURCE_INFO_SEPARATOR}${buttonIndex}` }, { children: button.text }), buttonIndex));
32
- })] }, id));
25
+ if (response.type === 'text' || response.type === 'textWithButtons') {
26
+ return FlowText.fromAIAgent(id, response);
33
27
  }
34
28
  if (response.type === 'carousel') {
35
- return (_jsx(Carousel, { children: response.content.elements.map(element => FlowElement.fromAIAgent(id, element).toBotonic(id)) }, id));
29
+ return FlowCarousel.fromAIAgent(id, response, request);
36
30
  }
37
31
  return _jsx(_Fragment, {});
38
32
  }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"flow-ai-agent.js","sourceRoot":"","sources":["../../../src/content-fields/flow-ai-agent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAEvD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QACS,SAAI,GAAW,EAAE,CAAA;QACjB,SAAI,GAAW,EAAE,CAAA;QACjB,iBAAY,GAAW,EAAE,CAAA;QAKzB,cAAS,GAA2B,EAAE,CAAA;IAsD/C,CAAC;IApDC,MAAM,CAAC,cAAc,CAAC,SAAwB;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA;QACxC,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACxD,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACvD,UAAU,CAAC,mBAAmB;YAC5B,SAAS,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAA;QAC/C,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAA;QAC9C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,CACL,4BACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAA8B,EAAE,EAAE;gBACrD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC5B,OAAO,KAAC,IAAI,cAAW,QAAQ,CAAC,OAAO,CAAC,IAAI,IAA1B,EAAE,CAAgC,CAAA;iBACrD;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBACvC,OAAO,CACL,MAAC,IAAI,eACF,QAAQ,CAAC,OAAO,CAAC,IAAI,EACrB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;gCACpD,OAAO,CACL,KAAC,MAAM,kBAEL,OAAO,EAAE,GAAG,aAAa,GAAG,qBAAqB,GAAG,WAAW,EAAE,gBAEhE,MAAM,CAAC,IAAI,KAHP,WAAW,CAIT,CACV,CAAA;4BACH,CAAC,CAAC,KAXO,EAAE,CAYN,CACR,CAAA;iBACF;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;oBAChC,OAAO,CACL,KAAC,QAAQ,cACN,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACvC,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CACnD,IAHY,EAAE,CAIN,CACZ,CAAA;iBACF;gBAED,OAAO,mBAAK,CAAA;YACd,CAAC,CAAC,GACD,CACJ,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"flow-ai-agent.js","sourceRoot":"","sources":["../../../src/content-fields/flow-ai-agent.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QACS,SAAI,GAAW,EAAE,CAAA;QACjB,SAAI,GAAW,EAAE,CAAA;QACjB,iBAAY,GAAW,EAAE,CAAA;QAKzB,cAAS,GAA2B,EAAE,CAAA;IA8B/C,CAAC;IA5BC,MAAM,CAAC,cAAc,CAAC,SAAwB;QAC5C,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAA;QACxC,UAAU,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACxD,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAA;QACvD,UAAU,CAAC,mBAAmB;YAC5B,SAAS,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAA;QAC/C,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAA;QAC9C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,EAAU,EAAE,OAAsB;QAC1C,OAAO,CACL,4BACG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAA8B,EAAE,EAAE;gBACrD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE;oBACnE,OAAO,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;iBAC1C;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;oBAChC,OAAO,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;iBACvD;gBAED,OAAO,mBAAK,CAAA;YACd,CAAC,CAAC,GACD,CACJ,CAAA;IACH,CAAC;CACF"}
@@ -1,4 +1,6 @@
1
1
  /// <reference types="react" />
2
+ import { CarouselMessage } from '@botonic/core';
3
+ import { ActionRequest } from '@botonic/react';
2
4
  import { FlowBuilderApi } from '../api';
3
5
  import { ContentFieldsBase } from './content-fields-base';
4
6
  import { FlowElement } from './flow-element';
@@ -7,5 +9,6 @@ export declare class FlowCarousel extends ContentFieldsBase {
7
9
  code: string;
8
10
  elements: FlowElement[];
9
11
  static fromHubtypeCMS(component: HtCarouselNode, locale: string, cmsApi: FlowBuilderApi): FlowCarousel;
10
- toBotonic(id: string): JSX.Element;
12
+ static fromAIAgent(id: string, carouselMessage: CarouselMessage, request: ActionRequest): JSX.Element;
13
+ toBotonic(id: string, request: ActionRequest): JSX.Element;
11
14
  }
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Carousel } from '@botonic/react';
2
+ import { isWhatsapp } from '@botonic/core';
3
+ import { Carousel, WhatsappInteractiveMediaCarousel, } from '@botonic/react';
3
4
  import { ContentFieldsBase } from './content-fields-base';
4
5
  import { FlowElement } from './flow-element';
5
6
  export class FlowCarousel extends ContentFieldsBase {
@@ -14,7 +15,43 @@ export class FlowCarousel extends ContentFieldsBase {
14
15
  newCarousel.elements = component.content.elements.map(element => FlowElement.fromHubtypeCMS(element, locale, cmsApi));
15
16
  return newCarousel;
16
17
  }
17
- toBotonic(id) {
18
+ static fromAIAgent(id, carouselMessage, request) {
19
+ const canUseWhatsappInteractiveMediaCarousel = () => {
20
+ const isValid = carouselMessage.content.text &&
21
+ !carouselMessage.content.elements.some(element => element.button.payload) &&
22
+ carouselMessage.content.elements.every(element => element.button.url);
23
+ if (!isValid) {
24
+ console.warn('Cannot use WhatsappInteractiveMediaCarousel for Whatsapp created by AIAgent', carouselMessage.content);
25
+ }
26
+ return isValid;
27
+ };
28
+ if (isWhatsapp(request.session) &&
29
+ canUseWhatsappInteractiveMediaCarousel()) {
30
+ return (_jsx(WhatsappInteractiveMediaCarousel, { cards: carouselMessage.content.elements.map(element => {
31
+ const buttonText = element.button.text;
32
+ const buttonUrl = element.button.url;
33
+ const imageLink = element.image;
34
+ return {
35
+ text: element.title,
36
+ action: { buttonText, buttonUrl, imageLink },
37
+ };
38
+ }), textMessage: carouselMessage.content.text }));
39
+ }
40
+ return (_jsx(Carousel, { children: carouselMessage.content.elements.map((element, index) => FlowElement.fromAIAgent(`${id}-element-${index}`, element).toBotonic(id)) }, id));
41
+ }
42
+ toBotonic(id, request) {
43
+ if (isWhatsapp(request.session)) {
44
+ return (_jsx(WhatsappInteractiveMediaCarousel, { cards: this.elements.map(element => {
45
+ var _a, _b;
46
+ const buttonText = ((_a = element.button) === null || _a === void 0 ? void 0 : _a.text) || '';
47
+ const buttonUrl = ((_b = element.button) === null || _b === void 0 ? void 0 : _b.url) || '';
48
+ const imageLink = element.image || '';
49
+ return {
50
+ text: element.title,
51
+ action: { buttonText, buttonUrl, imageLink },
52
+ };
53
+ }), textMessage: 'These are the options' }));
54
+ }
18
55
  return (_jsx(Carousel, { children: this.elements.map(element => element.toBotonic(id)) }, id));
19
56
  }
20
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flow-carousel.js","sourceRoot":"","sources":["../../../src/content-fields/flow-carousel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAIzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG5C,MAAM,OAAO,YAAa,SAAQ,iBAAiB;IAAnD;;QACS,SAAI,GAAG,EAAE,CAAA;QACT,aAAQ,GAAkB,EAAE,CAAA;IAsBrC,CAAC;IApBC,MAAM,CAAC,cAAc,CACnB,SAAyB,EACzB,MAAc,EACd,MAAsB;QAEtB,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAClD,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QACjC,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC9D,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CACpD,CAAA;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,CACL,KAAC,QAAQ,cACN,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IADvC,EAAE,CAEN,CACZ,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"flow-carousel.js","sourceRoot":"","sources":["../../../src/content-fields/flow-carousel.tsx"],"names":[],"mappings":"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"}
@@ -24,7 +24,7 @@ export class FlowElement extends ContentFieldsBase {
24
24
  newElement.subtitle = element.subtitle;
25
25
  newElement.image = element.image;
26
26
  newElement.button = FlowButton.fromAIAgent({
27
- id: '',
27
+ id: `${id}-button`,
28
28
  text: element.button.text,
29
29
  url: element.button.url,
30
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"flow-element.js","sourceRoot":"","sources":["../../../src/content-fields/flow-element.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QACS,UAAK,GAAG,EAAE,CAAA;QACV,aAAQ,GAAG,EAAE,CAAA;QAEb,UAAK,GAAG,EAAE,CAAA;QACV,WAAM,GAAG,KAAK,CAAA;IAkDvB,CAAC;IAhDC,MAAM,CAAC,cAAc,CACnB,SAA4B,EAC5B,MAAc,EACd,MAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QAChE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QACtE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QACjE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,cAAc,CAC3C,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,MAAM,CACP,CAAA;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,EAAU,EACV,OAKC;QAED,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;YACzC,EAAE,EAAE,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;SACxB,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,QAAgB;;QACxB,OAAO,CACL,MAAC,OAAO,eACN,KAAC,GAAG,IAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EACxB,KAAC,KAAK,cAAE,IAAI,CAAC,KAAK,GAAS,EAC3B,KAAC,QAAQ,cAAE,IAAI,CAAC,QAAQ,GAAY,EACnC,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC,CAAC,CAAC,KAJjB,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE,CAK5B,CACX,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"flow-element.js","sourceRoot":"","sources":["../../../src/content-fields/flow-element.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAAlD;;QACS,UAAK,GAAG,EAAE,CAAA;QACV,aAAQ,GAAG,EAAE,CAAA;QAEb,UAAK,GAAG,EAAE,CAAA;QACV,WAAM,GAAG,KAAK,CAAA;IAkDvB,CAAC;IAhDC,MAAM,CAAC,cAAc,CACnB,SAA4B,EAC5B,MAAc,EACd,MAAsB;QAEtB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAChD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QAChE,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;QACtE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;QACjE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,cAAc,CAC3C,SAAS,CAAC,MAAM,EAChB,MAAM,EACN,MAAM,CACP,CAAA;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,EAAU,EACV,OAKC;QAED,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACtC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;YACzC,EAAE,EAAE,GAAG,EAAE,SAAS;YAClB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;SACxB,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,SAAS,CAAC,QAAgB;;QACxB,OAAO,CACL,MAAC,OAAO,eACN,KAAC,GAAG,IAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EACxB,KAAC,KAAK,cAAE,IAAI,CAAC,KAAK,GAAS,EAC3B,KAAC,QAAQ,cAAE,IAAI,CAAC,QAAQ,GAAY,EACnC,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC,CAAC,CAAC,KAJjB,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,EAAE,CAK5B,CACX,CAAA;IACH,CAAC;CACF"}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { TextMessage, TextWithButtonsMessage } from '@botonic/core';
2
3
  import { ActionRequest } from '@botonic/react';
3
4
  import { FlowBuilderApi } from '../api';
4
5
  import { ContentFieldsBase } from './content-fields-base';
@@ -12,5 +13,6 @@ export declare class FlowText extends ContentFieldsBase {
12
13
  static fromHubtypeCMS(cmsText: HtTextNode, locale: string, cmsApi: FlowBuilderApi): FlowText;
13
14
  static replaceVariables(text: string, request: ActionRequest): string;
14
15
  private static isValidType;
16
+ static fromAIAgent(id: string, textMessage: TextMessage | TextWithButtonsMessage): JSX.Element;
15
17
  toBotonic(id: string, request: ActionRequest): JSX.Element;
16
18
  }
@@ -1,6 +1,6 @@
1
- import { jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Text } from '@botonic/react';
3
- import { ACCESS_TOKEN_VARIABLE_KEY, VARIABLE_PATTERN } from '../constants';
3
+ import { ACCESS_TOKEN_VARIABLE_KEY, EMPTY_PAYLOAD, SOURCE_INFO_SEPARATOR, VARIABLE_PATTERN, } from '../constants';
4
4
  import { getValueFromKeyPath } from '../utils';
5
5
  import { ContentFieldsBase } from './content-fields-base';
6
6
  import { FlowButton } from './flow-button';
@@ -40,6 +40,22 @@ export class FlowText extends ContentFieldsBase {
40
40
  const validTypes = ['boolean', 'string', 'number'];
41
41
  return validTypes.includes(typeof botVariable);
42
42
  }
43
+ static fromAIAgent(id, textMessage) {
44
+ if (textMessage.type === 'text') {
45
+ return _jsx(Text, { children: textMessage.content.text }, id);
46
+ }
47
+ return (_jsxs(Text, { children: [textMessage.content.text, textMessage.content.buttons.map((button, buttonIndex) => {
48
+ const buttonData = {
49
+ id: `${id}-button-${buttonIndex}`,
50
+ text: button.text,
51
+ url: button.url,
52
+ payload: button.payload
53
+ ? `${EMPTY_PAYLOAD}${SOURCE_INFO_SEPARATOR}${buttonIndex}`
54
+ : undefined,
55
+ };
56
+ return FlowButton.fromAIAgent(buttonData).renderButton(buttonIndex);
57
+ })] }, id));
58
+ }
43
59
  toBotonic(id, request) {
44
60
  const replacedText = FlowText.replaceVariables(this.text, request);
45
61
  return (_jsxs(Text, { children: [replacedText, this.buttons.map((button, buttonIndex) => button.renderButton(buttonIndex, this.buttonStyle))] }, id));
@@ -1 +1 @@
1
- {"version":3,"file":"flow-text.js","sourceRoot":"","sources":["../../../src/content-fields/flow-text.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-text.js","sourceRoot":"","sources":["../../../src/content-fields/flow-text.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/plugin-flow-builder",
3
- "version": "0.41.0",
3
+ "version": "0.41.1-alpha.0",
4
4
  "main": "./lib/cjs/index.js",
5
5
  "module": "./lib/esm/index.js",
6
6
  "description": "Use Flow Builder to show your contents",
@@ -14,7 +14,7 @@
14
14
  "lint_core": "../../node_modules/.bin/eslint_d --cache --quiet 'src/**/*.ts*'"
15
15
  },
16
16
  "dependencies": {
17
- "@botonic/react": "^0.41.0",
17
+ "@botonic/react": "0.41.1-alpha.0",
18
18
  "axios": "^1.12.2",
19
19
  "uuid": "^10.0.0"
20
20
  },
@@ -50,4 +50,4 @@
50
50
  "devDependencies": {
51
51
  "@types/uuid": "^10.0.0"
52
52
  }
53
- }
53
+ }
@@ -1,9 +1,9 @@
1
1
  import { AgenticOutputMessage } from '@botonic/core'
2
- import { Button, Carousel, Text } from '@botonic/react'
2
+ import { ActionRequest } from '@botonic/react'
3
3
 
4
- import { EMPTY_PAYLOAD, SOURCE_INFO_SEPARATOR } from '../constants'
5
4
  import { ContentFieldsBase } from './content-fields-base'
6
- import { FlowElement } from './flow-element'
5
+ import { FlowCarousel } from './flow-carousel'
6
+ import { FlowText } from './flow-text'
7
7
  import { HtAiAgentNode, HtInputGuardrailRule } from './hubtype-fields/ai-agent'
8
8
 
9
9
  export class FlowAiAgent extends ContentFieldsBase {
@@ -27,40 +27,16 @@ export class FlowAiAgent extends ContentFieldsBase {
27
27
  return newAiAgent
28
28
  }
29
29
 
30
- toBotonic(id: string): JSX.Element {
30
+ toBotonic(id: string, request: ActionRequest): JSX.Element {
31
31
  return (
32
32
  <>
33
33
  {this.responses.map((response: AgenticOutputMessage) => {
34
- if (response.type === 'text') {
35
- return <Text key={id}>{response.content.text}</Text>
36
- }
37
-
38
- if (response.type === 'textWithButtons') {
39
- return (
40
- <Text key={id}>
41
- {response.content.text}
42
- {response.content.buttons.map((button, buttonIndex) => {
43
- return (
44
- <Button
45
- key={buttonIndex}
46
- payload={`${EMPTY_PAYLOAD}${SOURCE_INFO_SEPARATOR}${buttonIndex}`}
47
- >
48
- {button.text}
49
- </Button>
50
- )
51
- })}
52
- </Text>
53
- )
34
+ if (response.type === 'text' || response.type === 'textWithButtons') {
35
+ return FlowText.fromAIAgent(id, response)
54
36
  }
55
37
 
56
38
  if (response.type === 'carousel') {
57
- return (
58
- <Carousel key={id}>
59
- {response.content.elements.map(element =>
60
- FlowElement.fromAIAgent(id, element).toBotonic(id)
61
- )}
62
- </Carousel>
63
- )
39
+ return FlowCarousel.fromAIAgent(id, response, request)
64
40
  }
65
41
 
66
42
  return <></>
@@ -1,4 +1,9 @@
1
- import { Carousel } from '@botonic/react'
1
+ import { CarouselMessage, isWhatsapp } from '@botonic/core'
2
+ import {
3
+ ActionRequest,
4
+ Carousel,
5
+ WhatsappInteractiveMediaCarousel,
6
+ } from '@botonic/react'
2
7
  import React from 'react'
3
8
 
4
9
  import { FlowBuilderApi } from '../api'
@@ -23,7 +28,77 @@ export class FlowCarousel extends ContentFieldsBase {
23
28
  return newCarousel
24
29
  }
25
30
 
26
- toBotonic(id: string): JSX.Element {
31
+ static fromAIAgent(
32
+ id: string,
33
+ carouselMessage: CarouselMessage,
34
+ request: ActionRequest
35
+ ): JSX.Element {
36
+ const canUseWhatsappInteractiveMediaCarousel = () => {
37
+ const isValid =
38
+ carouselMessage.content.text &&
39
+ !carouselMessage.content.elements.some(
40
+ element => element.button.payload
41
+ ) &&
42
+ carouselMessage.content.elements.every(element => element.button.url)
43
+
44
+ if (!isValid) {
45
+ console.warn(
46
+ 'Cannot use WhatsappInteractiveMediaCarousel for Whatsapp created by AIAgent',
47
+ carouselMessage.content
48
+ )
49
+ }
50
+ return isValid
51
+ }
52
+
53
+ if (
54
+ isWhatsapp(request.session) &&
55
+ canUseWhatsappInteractiveMediaCarousel()
56
+ ) {
57
+ return (
58
+ <WhatsappInteractiveMediaCarousel
59
+ cards={carouselMessage.content.elements.map(element => {
60
+ const buttonText = element.button.text
61
+ const buttonUrl = element.button.url!
62
+ const imageLink = element.image
63
+
64
+ return {
65
+ text: element.title,
66
+ action: { buttonText, buttonUrl, imageLink },
67
+ }
68
+ })}
69
+ textMessage={carouselMessage.content.text!}
70
+ />
71
+ )
72
+ }
73
+ return (
74
+ <Carousel key={id}>
75
+ {carouselMessage.content.elements.map((element, index) =>
76
+ FlowElement.fromAIAgent(`${id}-element-${index}`, element).toBotonic(
77
+ id
78
+ )
79
+ )}
80
+ </Carousel>
81
+ )
82
+ }
83
+
84
+ toBotonic(id: string, request: ActionRequest): JSX.Element {
85
+ if (isWhatsapp(request.session)) {
86
+ return (
87
+ <WhatsappInteractiveMediaCarousel
88
+ cards={this.elements.map(element => {
89
+ const buttonText = element.button?.text || ''
90
+ const buttonUrl = element.button?.url || ''
91
+ const imageLink = element.image || ''
92
+
93
+ return {
94
+ text: element.title,
95
+ action: { buttonText, buttonUrl, imageLink },
96
+ }
97
+ })}
98
+ textMessage={'These are the options'} // TODO: Add the text message in flow builder frontend and take it from the carousel node with different languages
99
+ />
100
+ )
101
+ }
27
102
  return (
28
103
  <Carousel key={id}>
29
104
  {this.elements.map(element => element.toBotonic(id))}
@@ -44,7 +44,7 @@ export class FlowElement extends ContentFieldsBase {
44
44
  newElement.subtitle = element.subtitle
45
45
  newElement.image = element.image
46
46
  newElement.button = FlowButton.fromAIAgent({
47
- id: '',
47
+ id: `${id}-button`,
48
48
  text: element.button.text,
49
49
  url: element.button.url,
50
50
  })
@@ -1,8 +1,14 @@
1
+ import { TextMessage, TextWithButtonsMessage } from '@botonic/core'
1
2
  import { ActionRequest, Text } from '@botonic/react'
2
3
  import React from 'react'
3
4
 
4
5
  import { FlowBuilderApi } from '../api'
5
- import { ACCESS_TOKEN_VARIABLE_KEY, VARIABLE_PATTERN } from '../constants'
6
+ import {
7
+ ACCESS_TOKEN_VARIABLE_KEY,
8
+ EMPTY_PAYLOAD,
9
+ SOURCE_INFO_SEPARATOR,
10
+ VARIABLE_PATTERN,
11
+ } from '../constants'
6
12
  import { getValueFromKeyPath } from '../utils'
7
13
  import { ContentFieldsBase } from './content-fields-base'
8
14
  import { FlowButton } from './flow-button'
@@ -55,6 +61,32 @@ export class FlowText extends ContentFieldsBase {
55
61
  return validTypes.includes(typeof botVariable)
56
62
  }
57
63
 
64
+ static fromAIAgent(
65
+ id: string,
66
+ textMessage: TextMessage | TextWithButtonsMessage
67
+ ): JSX.Element {
68
+ if (textMessage.type === 'text') {
69
+ return <Text key={id}>{textMessage.content.text}</Text>
70
+ }
71
+
72
+ return (
73
+ <Text key={id}>
74
+ {textMessage.content.text}
75
+ {textMessage.content.buttons.map((button, buttonIndex) => {
76
+ const buttonData = {
77
+ id: `${id}-button-${buttonIndex}`,
78
+ text: button.text,
79
+ url: button.url,
80
+ payload: button.payload
81
+ ? `${EMPTY_PAYLOAD}${SOURCE_INFO_SEPARATOR}${buttonIndex}`
82
+ : undefined,
83
+ }
84
+ return FlowButton.fromAIAgent(buttonData).renderButton(buttonIndex)
85
+ })}
86
+ </Text>
87
+ )
88
+ }
89
+
58
90
  toBotonic(id: string, request: ActionRequest): JSX.Element {
59
91
  const replacedText = FlowText.replaceVariables(this.text, request)
60
92
  return (