@botonic/plugin-flow-builder 0.21.6 → 0.22.0-alpha.1
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.
- package/README.md +19 -17
- package/lib/cjs/action.d.ts +1 -1
- package/lib/cjs/action.js +2 -2
- package/lib/cjs/action.js.map +1 -1
- package/lib/cjs/content-fields/types.d.ts +1 -1
- package/lib/cjs/flow-builder-models.d.ts +3 -2
- package/lib/cjs/functions/conditional-queue-status.js +1 -2
- package/lib/cjs/functions/conditional-queue-status.js.map +1 -1
- package/lib/cjs/functions/index.d.ts +1 -1
- package/lib/cjs/functions/index.js +1 -1
- package/lib/cjs/functions/index.js.map +1 -1
- package/lib/cjs/handoff.js +16 -5
- package/lib/cjs/handoff.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.js +19 -14
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/action.d.ts +1 -1
- package/lib/esm/content-fields/types.d.ts +1 -1
- package/lib/esm/flow-builder-models.d.ts +3 -2
- package/lib/esm/functions/conditional-queue-status.js +0 -1
- package/lib/esm/functions/conditional-queue-status.js.map +1 -1
- package/lib/esm/functions/index.d.ts +1 -1
- package/lib/esm/functions/index.js +1 -1
- package/lib/esm/functions/index.js.map +1 -1
- package/lib/esm/handoff.js +16 -5
- package/lib/esm/handoff.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +16 -11
- package/lib/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/flow-builder-models.ts +1 -0
- package/src/functions/conditional-queue-status.ts +0 -1
- package/src/functions/index.ts +1 -1
- package/src/handoff.ts +29 -7
- package/src/index.ts +21 -14
package/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# Botonic Plugin Flow Builder
|
|
2
|
+
|
|
2
3
|
## What Does This Plugin Do?
|
|
3
4
|
|
|
4
5
|
Botonic Plugin Flow Builder is one of the **[available](https://github.com/hubtype/botonic/tree/master/packages)** plugins for Botonic.
|
|
@@ -7,7 +8,7 @@ Flow Builder is a no-code, drag-and-drop chatbot builder that makes the process
|
|
|
7
8
|
From [Hubtype](https://www.hubtype.com/) we offer a suite of tools and features that let you build, test and deploy both automated and agent-based journeys at scale. This plugin allows you to connect to our Flow Builder.
|
|
8
9
|
|
|
9
10
|
<p align="center">
|
|
10
|
-
<img alt="Flow Builder" title="flow-builder" src="https://i.ibb.co/ySRjD4M/Pasted-image-20230426161548.png" width="550"
|
|
11
|
+
<img alt="Flow Builder" title="flow-builder" src="https://i.ibb.co/ySRjD4M/Pasted-image-20230426161548.png" width="550"/>
|
|
11
12
|
</p>
|
|
12
13
|
|
|
13
14
|
### Features
|
|
@@ -22,15 +23,16 @@ From [Hubtype](https://www.hubtype.com/) we offer a suite of tools and features
|
|
|
22
23
|
|
|
23
24
|
### Advantages
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
- **Ease of use**: Flow builders are designed to be user-friendly and intuitive, allowing even non-technical users to create and edit chatbot flows with ease.
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
- **Time-saving**: With a flow builder, you can quickly create and edit chatbot flows using drag-and-drop functionality, saving you time and effort compared to manually coding each interaction.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
- **Visual representation**: Flow builders provide a visual representation of your chatbot flow, allowing you to easily see the overall structure and make adjustments as needed.
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
- **Flexibility**: Flow builders offer a range of customization options, allowing you to create chatbot flows tailored to your specific needs and use cases.
|
|
32
33
|
|
|
33
34
|
## Setup
|
|
35
|
+
|
|
34
36
|
### Create an account at Hubtype
|
|
35
37
|
|
|
36
38
|
1. Create an account at https://www.hubtype.com.
|
|
@@ -38,20 +40,20 @@ From [Hubtype](https://www.hubtype.com/) we offer a suite of tools and features
|
|
|
38
40
|
2. Once you have deployed your bots, in the [Bots](https://app.hubtype.com/bots) section you can access the flow builder by clicking on any of your bots and in the button that says:
|
|
39
41
|
|
|
40
42
|
<p align="center">
|
|
41
|
-
<img alt="Flow Builder button" title="flow-builder-button" src="https://i.ibb.co/ZJ2fMQN/Pasted-image-20230427115219.png" width="250"
|
|
42
|
-
</p>
|
|
43
|
+
<img alt="Flow Builder button" title="flow-builder-button" src="https://i.ibb.co/ZJ2fMQN/Pasted-image-20230427115219.png" width="250"/>
|
|
44
|
+
</p>
|
|
43
45
|
|
|
44
46
|
### Install the Plugin
|
|
45
47
|
|
|
46
48
|
1. Install the plugin in your bot's project by running:
|
|
49
|
+
|
|
47
50
|
```bash
|
|
48
51
|
npm install @botonic/plugin-flow-builder
|
|
49
52
|
```
|
|
50
53
|
|
|
51
54
|
## Use
|
|
52
|
-
### Configuring the bot
|
|
53
55
|
|
|
54
|
-
|
|
56
|
+
### Configuring the bot
|
|
55
57
|
|
|
56
58
|
1. Add the following code to your `plugins.js` file:
|
|
57
59
|
|
|
@@ -77,16 +79,15 @@ By doing this, we are passing configuration parameters to the bot. This way we c
|
|
|
77
79
|
|
|
78
80
|
Below are the parameters that we can pass to the plugin:
|
|
79
81
|
|
|
80
|
-
-
|
|
82
|
+
- `flowUrl`: This is the URL where the Flow is located. The bot will automatically collect this URL, so in most cases, we don't have to pass it. It is used in cases where the Flow URL is in a testing environment.
|
|
81
83
|
|
|
82
|
-
-
|
|
84
|
+
- `flow`: In some situations, we may want to test a flow locally instead of using the Flow Builder service. To do this, we can define the flow and its corresponding tree of nodes in a JSON file and pass it to our plugin through this variable. By doing so, we can run and test our flow locally without relying on the external service.
|
|
83
85
|
|
|
84
|
-
-
|
|
86
|
+
- `customFunctions`: We are able to pass custom functions to the plugin by defining them in our code and then passing them as parameters. This allows us to extend the functionality of the plugin beyond its default capabilities and execute custom logic that is tailored to our specific needs. We can add custom functions in the frontend of the Flow Builder and pass them to the plugin through this variable.
|
|
85
87
|
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
- `getAccessToken`: When our bot is deployed in Hubtype, the plugin will automatically retrieve the access token. However, when testing our bot locally, we need to pass the access token as a variable.
|
|
88
|
+
- `getLocale`: We can pass an array of locales to the plugin to specify which language our bot will use.
|
|
89
89
|
|
|
90
|
+
- `getAccessToken`: When our bot is deployed in Hubtype, the plugin will automatically retrieve the access token. However, when testing our bot locally, we need to pass the access token as a variable.
|
|
90
91
|
|
|
91
92
|
2. Modify the `routes.ts` file, where routes map user inputs to actions which are in fact React Components:
|
|
92
93
|
|
|
@@ -102,8 +103,9 @@ export function routes(request: RouteRequest) {
|
|
|
102
103
|
type: /.*/,
|
|
103
104
|
payload: /.*/,
|
|
104
105
|
action: FlowBuilderAction,
|
|
105
|
-
}
|
|
106
|
+
},
|
|
106
107
|
]
|
|
107
108
|
}
|
|
108
109
|
```
|
|
109
|
-
|
|
110
|
+
|
|
111
|
+
For personalized behavior, create an action in your bot. For other cases, let the plugin handle all actions.
|
package/lib/cjs/action.d.ts
CHANGED
package/lib/cjs/action.js
CHANGED
|
@@ -9,7 +9,7 @@ const helpers_1 = require("./helpers");
|
|
|
9
9
|
let alternateFallbackMessage = false;
|
|
10
10
|
class FlowBuilderAction extends react_2.default.Component {
|
|
11
11
|
static async botonicInit(request) {
|
|
12
|
-
const flowBuilderPlugin = helpers_1.getFlowBuilderPlugin(request.plugins);
|
|
12
|
+
const flowBuilderPlugin = (0, helpers_1.getFlowBuilderPlugin)(request.plugins);
|
|
13
13
|
const locale = flowBuilderPlugin.getLocale(request.session);
|
|
14
14
|
const payload = request.input.payload;
|
|
15
15
|
let targetContentId = payload;
|
|
@@ -30,7 +30,7 @@ class FlowBuilderAction extends react_2.default.Component {
|
|
|
30
30
|
}
|
|
31
31
|
const { contents, handoffNode } = await flowBuilderPlugin.getContents(targetContentId, locale);
|
|
32
32
|
if (handoffNode)
|
|
33
|
-
await handoff_1.doHandoff(request, locale, handoffNode);
|
|
33
|
+
await (0, handoff_1.doHandoff)(request, locale, handoffNode);
|
|
34
34
|
return { contents, handoffNode };
|
|
35
35
|
}
|
|
36
36
|
render() {
|
package/lib/cjs/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.tsx"],"names":[],"mappings":";;;;AAAA,0CAA8D;AAC9D,0DAAyB;AAGzB,uCAAqC;AACrC,uCAAgD;AAOhD,IAAI,wBAAwB,GAAG,KAAK,CAAA;AACpC,MAAa,iBAAkB,SAAQ,eAAK,CAAC,SAAiC;IAG5E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAsB;QAC7C,MAAM,iBAAiB,GAAG,8BAAoB,
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.tsx"],"names":[],"mappings":";;;;AAAA,0CAA8D;AAC9D,0DAAyB;AAGzB,uCAAqC;AACrC,uCAAgD;AAOhD,IAAI,wBAAwB,GAAG,KAAK,CAAA;AACpC,MAAa,iBAAkB,SAAQ,eAAK,CAAC,SAAiC;IAG5E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAsB;QAC7C,MAAM,iBAAiB,GAAG,IAAA,8BAAoB,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QACrC,IAAI,eAAe,GAAuB,OAAO,CAAA;QACjD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACpD,eAAe,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAA;SACvD;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,kBAAkB,CAC9D,OAAO,CAAC,KAAK,EACb,MAAM,CACP,CAAA;YACD,IAAI,aAAa;gBAAE,eAAe,GAAG,aAAa,CAAA;YAClD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,CAChE,OAAO,CAAC,KAAK,EACb,MAAM,CACP,CAAA;YACD,IAAI,cAAc;gBAAE,eAAe,GAAG,cAAc,CAAA;SACrD;QACD,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,MAAM,iBAAiB,CAAC,aAAa,CACrD,wBAAwB,CACzB,CAAA;YACD,wBAAwB,GAAG,CAAC,wBAAwB,CAAA;SACrD;QAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CAAC,WAAW,CACnE,eAAe,EACf,MAAM,CACP,CAAA;QAED,IAAI,WAAW;YAAE,MAAM,IAAA,mBAAS,EAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;QAE9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;IAClC,CAAC;IAED,MAAM;QACJ,aAAa;QACb,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC5C,OAAO,QAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAChE,CAAC;;AA5CH,8CA6CC;AA5CQ,6BAAW,GAAG,sBAAc,CAAA"}
|
|
@@ -2,4 +2,4 @@ import { FlowCarousel } from './flow-carousel';
|
|
|
2
2
|
import { FlowImage } from './flow-image';
|
|
3
3
|
import { FlowText } from './flow-text';
|
|
4
4
|
import { FlowVideo } from './flow-video';
|
|
5
|
-
export
|
|
5
|
+
export type FlowContent = FlowText | FlowImage | FlowCarousel | FlowVideo;
|
|
@@ -106,6 +106,7 @@ export interface HandoffNodeContent {
|
|
|
106
106
|
message: TextLocale[];
|
|
107
107
|
fail_message: TextLocale[];
|
|
108
108
|
queue: QueueLocale[];
|
|
109
|
+
payload: PayloadLocale[];
|
|
109
110
|
}
|
|
110
111
|
export interface HandoffNode extends Node {
|
|
111
112
|
type: NodeType.HANDOFF;
|
|
@@ -150,7 +151,7 @@ export interface PayloadNode extends BaseNode {
|
|
|
150
151
|
type: NodeType.PAYLOAD;
|
|
151
152
|
content: PayloadNodeContent;
|
|
152
153
|
}
|
|
153
|
-
export
|
|
154
|
+
export type ArgumentType = number | string | Record<any, any>;
|
|
154
155
|
export interface FunctionNodeArgument {
|
|
155
156
|
type: ArgumentType;
|
|
156
157
|
name: string;
|
|
@@ -193,4 +194,4 @@ export interface VideoNode extends Node {
|
|
|
193
194
|
type: NodeType.VIDEO;
|
|
194
195
|
content: VideoNodeContent;
|
|
195
196
|
}
|
|
196
|
-
export
|
|
197
|
+
export type NodeComponent = TextNode | ImageNode | CarouselNode | HandoffNode | KeywordNode | IntentNode | UrlNode | StartNode | PayloadNode | FunctionNode | FallbackNode | VideoNode;
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.conditionalQueueStatus = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
6
5
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
7
6
|
const utils_1 = require("../utils");
|
|
8
|
-
const _HUBTYPE_API_URL_ = utils_1.getWebpackEnvVar(
|
|
7
|
+
const _HUBTYPE_API_URL_ = (0, utils_1.getWebpackEnvVar)(
|
|
9
8
|
// @ts-ignore
|
|
10
9
|
typeof HUBTYPE_API_URL !== 'undefined' && HUBTYPE_API_URL, 'HUBTYPE_API_URL', 'https://api.hubtype.com');
|
|
11
10
|
async function conditionalQueueStatus({ queue_id, }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional-queue-status.js","sourceRoot":"","sources":["../../../src/functions/conditional-queue-status.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"conditional-queue-status.js","sourceRoot":"","sources":["../../../src/functions/conditional-queue-status.ts"],"names":[],"mappings":";;;;AAAA,0DAAyB;AAEzB,oCAA2C;AAE3C,MAAM,iBAAiB,GAAG,IAAA,wBAAgB;AACxC,aAAa;AACb,OAAO,eAAe,KAAK,WAAW,IAAI,eAAe,EACzD,iBAAiB,EACjB,yBAAyB,CAC1B,CAAA;AAEM,KAAK,UAAU,sBAAsB,CAAC,EAC3C,QAAQ,GAGT;IACC,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,GAAG,iBAAiB,cAAc,QAAQ,gBAAgB;IAC1D,2CAA2C;IAC3C;QACE,MAAM,EAAE;YACN,oBAAoB,EAAE,IAAI;YAC1B,mBAAmB,EAAE,KAAK;YAC1B,sBAAsB,EAAE,KAAK;SAC9B;KACF,CACF,CAAA;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAA;IAC3C,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;AACxC,CAAC;AAlBD,wDAkBC"}
|
|
@@ -2,5 +2,5 @@ import { conditionalProvider } from './conditional-provider';
|
|
|
2
2
|
import { conditionalQueueStatus } from './conditional-queue-status';
|
|
3
3
|
export declare const DEFAULT_FUNCTIONS: {
|
|
4
4
|
'check-queue-status': typeof conditionalQueueStatus;
|
|
5
|
-
'
|
|
5
|
+
'get-channel-type': typeof conditionalProvider;
|
|
6
6
|
};
|
|
@@ -7,6 +7,6 @@ exports.DEFAULT_FUNCTIONS = {
|
|
|
7
7
|
// TODO: Rename api action name
|
|
8
8
|
// 'conditional-queue-status': conditionalQueueStatus,
|
|
9
9
|
'check-queue-status': conditional_queue_status_1.conditionalQueueStatus,
|
|
10
|
-
'
|
|
10
|
+
'get-channel-type': conditional_provider_1.conditionalProvider,
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/index.ts"],"names":[],"mappings":";;;AAAA,iEAA4D;AAC5D,yEAAmE;AAEtD,QAAA,iBAAiB,GAAG;IAC/B,+BAA+B;IAC/B,sDAAsD;IACtD,oBAAoB,EAAE,iDAAsB;IAC5C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/index.ts"],"names":[],"mappings":";;;AAAA,iEAA4D;AAC5D,yEAAmE;AAEtD,QAAA,iBAAiB,GAAG;IAC/B,+BAA+B;IAC/B,sDAAsD;IACtD,oBAAoB,EAAE,iDAAsB;IAC5C,kBAAkB,EAAE,0CAAmB;CACxC,CAAA"}
|
package/lib/cjs/handoff.js
CHANGED
|
@@ -4,15 +4,15 @@ exports.doHandoff = void 0;
|
|
|
4
4
|
const core_1 = require("@botonic/core");
|
|
5
5
|
const helpers_1 = require("./helpers");
|
|
6
6
|
async function doHandoff(request, locale, handoffNode) {
|
|
7
|
-
var _a;
|
|
8
|
-
const flowBuilderPlugin = helpers_1.getFlowBuilderPlugin(request.plugins);
|
|
9
|
-
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent((_a = handoffNode.target) === null || _a === void 0 ? void 0 : _a.id);
|
|
10
7
|
// @ts-ignore
|
|
11
|
-
const handOffBuilder = new core_1.HandOffBuilder(request.session);
|
|
8
|
+
const handOffBuilder = new core_1.HandOffBuilder(request.session);
|
|
12
9
|
const handoffQueues = handoffNode.content.queue;
|
|
13
10
|
const queueFound = handoffQueues.find(q => q.locale === locale);
|
|
14
11
|
if (queueFound)
|
|
15
12
|
handOffBuilder.withQueue(queueFound.id);
|
|
13
|
+
const onFinishPayload = await getOnFinishPayload(handoffNode, locale, request);
|
|
14
|
+
if (onFinishPayload)
|
|
15
|
+
handOffBuilder.withOnFinishPayload(onFinishPayload);
|
|
16
16
|
// TODO: Retrieve params from FlowBuilder
|
|
17
17
|
// const handoffParams = {
|
|
18
18
|
// agentEmail: 'test@gmail.com',
|
|
@@ -24,8 +24,19 @@ async function doHandoff(request, locale, handoffNode) {
|
|
|
24
24
|
// if (handoffParams.agentEmail) {
|
|
25
25
|
// handOffBuilder.withAgentEmail(handoffParams.agentEmail)
|
|
26
26
|
// }
|
|
27
|
-
handOffBuilder.withOnFinishPayload(handoffTargetNode.id);
|
|
28
27
|
await handOffBuilder.handOff();
|
|
29
28
|
}
|
|
30
29
|
exports.doHandoff = doHandoff;
|
|
30
|
+
async function getOnFinishPayload(handoffNode, locale, request) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
const flowBuilderPlugin = (0, helpers_1.getFlowBuilderPlugin)(request.plugins);
|
|
33
|
+
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent((_a = handoffNode.target) === null || _a === void 0 ? void 0 : _a.id);
|
|
34
|
+
if (handoffTargetNode === null || handoffTargetNode === void 0 ? void 0 : handoffTargetNode.id)
|
|
35
|
+
return handoffTargetNode === null || handoffTargetNode === void 0 ? void 0 : handoffTargetNode.id;
|
|
36
|
+
const payloadId = (_b = handoffNode.content.payload.find(payload => payload.locale === locale)) === null || _b === void 0 ? void 0 : _b.id;
|
|
37
|
+
if (!payloadId)
|
|
38
|
+
return undefined;
|
|
39
|
+
const actionPayload = await flowBuilderPlugin.getContent(payloadId);
|
|
40
|
+
return actionPayload.content.payload;
|
|
41
|
+
}
|
|
31
42
|
//# sourceMappingURL=handoff.js.map
|
package/lib/cjs/handoff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":";;;AAAA,wCAA8C;AAI9C,uCAAgD;AAEzC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAc,EACd,WAAwB
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":";;;AAAA,wCAA8C;AAI9C,uCAAgD;AAEzC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAc,EACd,WAAwB;IAExB,aAAa;IACb,MAAM,cAAc,GAAG,IAAI,qBAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAA;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,UAAU;QAAE,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAEvD,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9E,IAAI,eAAe;QAAE,cAAc,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAA;IAExE,yCAAyC;IACzC,0BAA0B;IAC1B,kCAAkC;IAClC,4EAA4E;IAC5E,IAAI;IAEJ,4BAA4B;IAC5B,gDAAgD;IAChD,IAAI;IAEJ,kCAAkC;IAClC,4DAA4D;IAC5D,IAAI;IAEJ,MAAM,cAAc,CAAC,OAAO,EAAE,CAAA;AAChC,CAAC;AA7BD,8BA6BC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAAwB,EACxB,MAAc,EACd,OAAsB;;IAEtB,MAAM,iBAAiB,GAAG,IAAA,8BAAoB,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE/D,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CACjE,MAAA,WAAW,CAAC,MAAM,0CAAE,EAAE,CACvB,CAAA;IACD,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,EAAE;QAAE,OAAO,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,EAAE,CAAA;IAEvD,MAAM,SAAS,GAAG,MAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAChD,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CACrC,0CAAE,EAAE,CAAA;IAEL,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAEhC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAEnE,OAAQ,aAA6B,CAAC,OAAO,CAAC,OAAO,CAAA;AACvD,CAAC"}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
15
15
|
pre(request: PluginPreRequest): Promise<void>;
|
|
16
16
|
post(_request: PluginPostRequest): Promise<void>;
|
|
17
17
|
getContent(id: string): Promise<NodeComponent>;
|
|
18
|
-
getHandoffContent(handoffTargetId: string | undefined): Promise<HandoffNode>;
|
|
18
|
+
getHandoffContent(handoffTargetId: string | undefined): Promise<HandoffNode | undefined>;
|
|
19
19
|
getFlowContent(hubtypeContent: NodeComponent, locale: string): FlowContent | undefined;
|
|
20
20
|
getStartId(): Promise<string>;
|
|
21
21
|
getFallbackId(alternate: boolean): Promise<string>;
|
package/lib/cjs/index.js
CHANGED
|
@@ -6,13 +6,13 @@ const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
|
6
6
|
const content_fields_1 = require("./content-fields");
|
|
7
7
|
const flow_builder_models_1 = require("./flow-builder-models");
|
|
8
8
|
const functions_1 = require("./functions");
|
|
9
|
-
const utils_1 = require("./utils");
|
|
10
9
|
const helpers_1 = require("./helpers");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
11
11
|
class BotonicPluginFlowBuilder {
|
|
12
12
|
constructor(options) {
|
|
13
13
|
this.options = options;
|
|
14
14
|
this.getLocale = options.getLocale;
|
|
15
|
-
this.getAccessToken = utils_1.resolveGetAccessToken(options);
|
|
15
|
+
this.getAccessToken = (0, utils_1.resolveGetAccessToken)(options);
|
|
16
16
|
this.flowUrl = options.flowUrl;
|
|
17
17
|
if (options.flow)
|
|
18
18
|
this.flow = options.flow;
|
|
@@ -38,11 +38,9 @@ class BotonicPluginFlowBuilder {
|
|
|
38
38
|
return content;
|
|
39
39
|
}
|
|
40
40
|
async getHandoffContent(handoffTargetId) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
throw Error(`Handoff node not found`);
|
|
45
|
-
return content;
|
|
41
|
+
if (!handoffTargetId)
|
|
42
|
+
return undefined;
|
|
43
|
+
return (await this.getContent(handoffTargetId));
|
|
46
44
|
}
|
|
47
45
|
getFlowContent(hubtypeContent, locale) {
|
|
48
46
|
switch (hubtypeContent.type) {
|
|
@@ -81,9 +79,19 @@ class BotonicPluginFlowBuilder {
|
|
|
81
79
|
const hubtypeContent = await this.getContent(id);
|
|
82
80
|
const isHandoff = hubtypeContent.type === flow_builder_models_1.NodeType.HANDOFF;
|
|
83
81
|
// TODO: Create function to populate these buttons
|
|
84
|
-
await helpers_1.updateButtonUrls(hubtypeContent, 'elements', this.getContent);
|
|
85
|
-
await helpers_1.updateButtonUrls(hubtypeContent, 'buttons', this.getContent);
|
|
82
|
+
await (0, helpers_1.updateButtonUrls)(hubtypeContent, 'elements', this.getContent);
|
|
83
|
+
await (0, helpers_1.updateButtonUrls)(hubtypeContent, 'buttons', this.getContent);
|
|
86
84
|
const content = await this.getFlowContent(hubtypeContent, locale);
|
|
85
|
+
if (content && 'buttons' in content) {
|
|
86
|
+
content.buttons.forEach(async (button) => {
|
|
87
|
+
if (button.payload) {
|
|
88
|
+
const contentButton = await this.getContent(button.payload);
|
|
89
|
+
if ((contentButton === null || contentButton === void 0 ? void 0 : contentButton.type) === flow_builder_models_1.NodeType.PAYLOAD) {
|
|
90
|
+
button.payload = contentButton.content.payload;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
87
95
|
if (hubtypeContent.type === flow_builder_models_1.NodeType.FUNCTION) {
|
|
88
96
|
const targetId = await this.callFunction(hubtypeContent, locale);
|
|
89
97
|
return this.getContents(targetId, locale, contents);
|
|
@@ -158,11 +166,8 @@ class BotonicPluginFlowBuilder {
|
|
|
158
166
|
async callFunction(functionNode, locale) {
|
|
159
167
|
var _a;
|
|
160
168
|
const functionNodeId = functionNode.id;
|
|
161
|
-
const nameValues = (_a = functionNode.content.arguments
|
|
162
|
-
.find(arg => arg.locale === locale)) === null || _a === void 0 ? void 0 : _a.values.map(value => ({ [value.name]: value.value }));
|
|
163
|
-
if (!nameValues) {
|
|
164
|
-
throw new Error(`No arguments found for node with id ${functionNodeId}`);
|
|
165
|
-
}
|
|
169
|
+
const nameValues = ((_a = functionNode.content.arguments
|
|
170
|
+
.find(arg => arg.locale === locale)) === null || _a === void 0 ? void 0 : _a.values.map(value => ({ [value.name]: value.value }))) || [];
|
|
166
171
|
const args = Object.assign({
|
|
167
172
|
session: this.currentRequest.session,
|
|
168
173
|
results: [functionNode.content.result_mapping.map(r => r.result)],
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAOA,0DAAyB;AAEzB,qDAMyB;AACzB,+DAU8B;AAC9B,2CAA+C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAOA,0DAAyB;AAEzB,qDAMyB;AACzB,+DAU8B;AAC9B,2CAA+C;AAC/C,uCAA4C;AAE5C,mCAA+C;AAE/C,MAAqB,wBAAwB;IAQ3C,YAAqB,OAAwC;QAAxC,YAAO,GAAP,OAAO,CAAiC;QAC3D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,cAAc,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAA;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC9B,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,EAAE,CAAA;QACrD,IAAI,CAAC,SAAS,mCAAQ,6BAAiB,GAAK,eAAe,CAAE,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAgB;QACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;YAC7C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE;SACrE,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAyB;QACjC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA2B,IAAkB,CAAC;IAEzD,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAA;QAC5D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,eAAmC;QAEnC,IAAI,CAAC,eAAe;YAAE,OAAO,SAAS,CAAA;QACtC,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAgB,CAAA;IAChE,CAAC;IAED,cAAc,CACZ,cAA6B,EAC7B,MAAc;QAEd,QAAQ,cAAc,CAAC,IAAI,EAAE;YAC3B,KAAK,8BAAQ,CAAC,IAAI;gBAChB,OAAO,yBAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;YACxD,KAAK,8BAAQ,CAAC,KAAK;gBACjB,OAAO,0BAAS,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;YACzD,KAAK,8BAAQ,CAAC,QAAQ;gBACpB,OAAO,6BAAY,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;YAC5D,KAAK,8BAAQ,CAAC,KAAK;gBACjB,OAAO,0BAAS,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;YACzD;gBACE,OAAO,SAAS,CAAA;SACnB;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,8BAAQ,CAAC,QAAQ,CACf,CAAA;QAC1B,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC9D,OAAO,SAAS,CAAC,MAAM,CAAC,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAkB;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAClC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,8BAAQ,CAAC,QAAQ,CACZ,CAAA;QAC7B,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACnE,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAA;QAC/D,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAA;QACjE,IAAI,CAAC,qBAAqB;YAAE,OAAO,oBAAoB,CAAC,EAAE,CAAA;QAC1D,OAAO,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAA;IACvE,CAAC;IACD,KAAK,CAAC,WAAW,CACf,EAAU,EACV,MAAc,EACd,YAA4B;QAE5B,MAAM,QAAQ,GAAG,YAAY,IAAI,EAAE,CAAA;QACnC,MAAM,cAAc,GAAQ,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,KAAK,8BAAQ,CAAC,OAAO,CAAA;QAC1D,kDAAkD;QAClD,MAAM,IAAA,0BAAgB,EAAC,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACnE,MAAM,IAAA,0BAAgB,EAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAEjE,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;gBACrC,IAAI,MAAM,CAAC,OAAO,EAAE;oBAClB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBAC3D,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,8BAAQ,CAAC,OAAO,EAAE;wBAC5C,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAA;qBAC/C;iBACF;YACH,CAAC,CAAC,CAAA;SACH;QAED,IAAI,cAAc,CAAC,IAAI,KAAK,8BAAQ,CAAC,QAAQ,EAAE;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;YAChE,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;SACpD;aAAM;YACL,IAAI,OAAO;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnC,yCAAyC;YAEzC,IAAI,cAAc,CAAC,SAAS;gBAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;SACzE;QACD,mBAAmB;QACnB,4EAA4E;QAC5E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,IAAI,cAAc,EAAE,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,KAAY,EACZ,MAAc;;QAEd,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAC/B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,8BAAQ,CAAC,MAAM,CACtB,CAAA;YACjB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAA;YAChC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAA;YACxC,IAAI,WAAW,EAAE;gBACf,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CACpC,IAAI,CAAC,EAAE,CACL,WAAW;oBACX,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC;oBACzC,eAAe;oBACf,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,eAAe,CAAC,CACxD,CAAA;gBACD,OAAO,MAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,MAAM,0CAAE,EAAE,CAAA;aACrC;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;SACzD;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS,CAAC,IAAgB,EAAE,MAAc,EAAE,MAAc;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CACtD,CAAA;IACH,CAAC;IAED,yBAAyB,CACvB,IAAgB,EAChB,mBAA2B;QAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAA;QACpD,OAAO,mBAAmB,IAAI,cAAc,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,KAAY,EACZ,MAAc;;QAEd,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAA;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACpC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,8BAAQ,CAAC,OAAO,CACrB,CAAA;YAClB,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrD,YAAY;YACZ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAC7C,CAAA;YACD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,OAAO,MAAA,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,0CAAE,EAAE,CAAA;aACzC;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;SACzD;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,aAAa,CAAC,IAAiB,EAAE,KAAa,EAAE,MAAc;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CACtE,CAAA;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC;IAED,mBAAmB,CAAC,KAAa,EAAE,QAAkB;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/B,OAAO,IAAI,CAAA;aACZ;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,YAA0B,EAC1B,MAAc;;QAEd,MAAM,cAAc,GAAG,YAAY,CAAC,EAAE,CAAA;QACtC,MAAM,UAAU,GACd,CAAA,MAAA,YAAY,CAAC,OAAO,CAAC,SAAS;aAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,0CACjC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAI,EAAE,CAAA;QAEhE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CACxB;YACE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;YACpC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAClE,EACD,GAAG,UAAU,CACd,CAAA;QACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CACtE,IAAI,CACL,CAAA;QACD,0CAA0C;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CACrD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,CACjC,CAAA;QACD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CACb,wDAAwD,cAAc,EAAE,CACzE,CAAA;SACF;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;IACzB,CAAC;CACF;AA1OD,2CA0OC;AAED,mCAA4C;AAAnC,2GAAA,iBAAiB,OAAA"}
|
package/lib/esm/action.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ import { FlowCarousel } from './flow-carousel';
|
|
|
2
2
|
import { FlowImage } from './flow-image';
|
|
3
3
|
import { FlowText } from './flow-text';
|
|
4
4
|
import { FlowVideo } from './flow-video';
|
|
5
|
-
export
|
|
5
|
+
export type FlowContent = FlowText | FlowImage | FlowCarousel | FlowVideo;
|
|
@@ -106,6 +106,7 @@ export interface HandoffNodeContent {
|
|
|
106
106
|
message: TextLocale[];
|
|
107
107
|
fail_message: TextLocale[];
|
|
108
108
|
queue: QueueLocale[];
|
|
109
|
+
payload: PayloadLocale[];
|
|
109
110
|
}
|
|
110
111
|
export interface HandoffNode extends Node {
|
|
111
112
|
type: NodeType.HANDOFF;
|
|
@@ -150,7 +151,7 @@ export interface PayloadNode extends BaseNode {
|
|
|
150
151
|
type: NodeType.PAYLOAD;
|
|
151
152
|
content: PayloadNodeContent;
|
|
152
153
|
}
|
|
153
|
-
export
|
|
154
|
+
export type ArgumentType = number | string | Record<any, any>;
|
|
154
155
|
export interface FunctionNodeArgument {
|
|
155
156
|
type: ArgumentType;
|
|
156
157
|
name: string;
|
|
@@ -193,4 +194,4 @@ export interface VideoNode extends Node {
|
|
|
193
194
|
type: NodeType.VIDEO;
|
|
194
195
|
content: VideoNodeContent;
|
|
195
196
|
}
|
|
196
|
-
export
|
|
197
|
+
export type NodeComponent = TextNode | ImageNode | CarouselNode | HandoffNode | KeywordNode | IntentNode | UrlNode | StartNode | PayloadNode | FunctionNode | FallbackNode | VideoNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional-queue-status.js","sourceRoot":"","sources":["../../../src/functions/conditional-queue-status.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"conditional-queue-status.js","sourceRoot":"","sources":["../../../src/functions/conditional-queue-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,MAAM,iBAAiB,GAAG,gBAAgB;AACxC,aAAa;AACb,OAAO,eAAe,KAAK,WAAW,IAAI,eAAe,EACzD,iBAAiB,EACjB,yBAAyB,CAC1B,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,QAAQ,GAGT;IACC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAC9B,GAAG,iBAAiB,cAAc,QAAQ,gBAAgB;IAC1D,2CAA2C;IAC3C;QACE,MAAM,EAAE;YACN,oBAAoB,EAAE,IAAI;YAC1B,mBAAmB,EAAE,KAAK;YAC1B,sBAAsB,EAAE,KAAK;SAC9B;KACF,CACF,CAAA;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAA;IAC3C,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;AACxC,CAAC"}
|
|
@@ -2,5 +2,5 @@ import { conditionalProvider } from './conditional-provider';
|
|
|
2
2
|
import { conditionalQueueStatus } from './conditional-queue-status';
|
|
3
3
|
export declare const DEFAULT_FUNCTIONS: {
|
|
4
4
|
'check-queue-status': typeof conditionalQueueStatus;
|
|
5
|
-
'
|
|
5
|
+
'get-channel-type': typeof conditionalProvider;
|
|
6
6
|
};
|
|
@@ -4,6 +4,6 @@ export const DEFAULT_FUNCTIONS = {
|
|
|
4
4
|
// TODO: Rename api action name
|
|
5
5
|
// 'conditional-queue-status': conditionalQueueStatus,
|
|
6
6
|
'check-queue-status': conditionalQueueStatus,
|
|
7
|
-
'
|
|
7
|
+
'get-channel-type': conditionalProvider,
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,+BAA+B;IAC/B,sDAAsD;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,+BAA+B;IAC/B,sDAAsD;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,mBAAmB;CACxC,CAAA"}
|
package/lib/esm/handoff.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { HandOffBuilder } from '@botonic/core';
|
|
2
2
|
import { getFlowBuilderPlugin } from './helpers';
|
|
3
3
|
export async function doHandoff(request, locale, handoffNode) {
|
|
4
|
-
var _a;
|
|
5
|
-
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins);
|
|
6
|
-
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent((_a = handoffNode.target) === null || _a === void 0 ? void 0 : _a.id);
|
|
7
4
|
// @ts-ignore
|
|
8
|
-
const handOffBuilder = new HandOffBuilder(request.session);
|
|
5
|
+
const handOffBuilder = new HandOffBuilder(request.session);
|
|
9
6
|
const handoffQueues = handoffNode.content.queue;
|
|
10
7
|
const queueFound = handoffQueues.find(q => q.locale === locale);
|
|
11
8
|
if (queueFound)
|
|
12
9
|
handOffBuilder.withQueue(queueFound.id);
|
|
10
|
+
const onFinishPayload = await getOnFinishPayload(handoffNode, locale, request);
|
|
11
|
+
if (onFinishPayload)
|
|
12
|
+
handOffBuilder.withOnFinishPayload(onFinishPayload);
|
|
13
13
|
// TODO: Retrieve params from FlowBuilder
|
|
14
14
|
// const handoffParams = {
|
|
15
15
|
// agentEmail: 'test@gmail.com',
|
|
@@ -21,7 +21,18 @@ export async function doHandoff(request, locale, handoffNode) {
|
|
|
21
21
|
// if (handoffParams.agentEmail) {
|
|
22
22
|
// handOffBuilder.withAgentEmail(handoffParams.agentEmail)
|
|
23
23
|
// }
|
|
24
|
-
handOffBuilder.withOnFinishPayload(handoffTargetNode.id);
|
|
25
24
|
await handOffBuilder.handOff();
|
|
26
25
|
}
|
|
26
|
+
async function getOnFinishPayload(handoffNode, locale, request) {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins);
|
|
29
|
+
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent((_a = handoffNode.target) === null || _a === void 0 ? void 0 : _a.id);
|
|
30
|
+
if (handoffTargetNode === null || handoffTargetNode === void 0 ? void 0 : handoffTargetNode.id)
|
|
31
|
+
return handoffTargetNode === null || handoffTargetNode === void 0 ? void 0 : handoffTargetNode.id;
|
|
32
|
+
const payloadId = (_b = handoffNode.content.payload.find(payload => payload.locale === locale)) === null || _b === void 0 ? void 0 : _b.id;
|
|
33
|
+
if (!payloadId)
|
|
34
|
+
return undefined;
|
|
35
|
+
const actionPayload = await flowBuilderPlugin.getContent(payloadId);
|
|
36
|
+
return actionPayload.content.payload;
|
|
37
|
+
}
|
|
27
38
|
//# sourceMappingURL=handoff.js.map
|
package/lib/esm/handoff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAc,EACd,WAAwB
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAc,EACd,WAAwB;IAExB,aAAa;IACb,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAA;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,UAAU;QAAE,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAEvD,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9E,IAAI,eAAe;QAAE,cAAc,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAA;IAExE,yCAAyC;IACzC,0BAA0B;IAC1B,kCAAkC;IAClC,4EAA4E;IAC5E,IAAI;IAEJ,4BAA4B;IAC5B,gDAAgD;IAChD,IAAI;IAEJ,kCAAkC;IAClC,4DAA4D;IAC5D,IAAI;IAEJ,MAAM,cAAc,CAAC,OAAO,EAAE,CAAA;AAChC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,WAAwB,EACxB,MAAc,EACd,OAAsB;;IAEtB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE/D,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CACjE,MAAA,WAAW,CAAC,MAAM,0CAAE,EAAE,CACvB,CAAA;IACD,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,EAAE;QAAE,OAAO,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,EAAE,CAAA;IAEvD,MAAM,SAAS,GAAG,MAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAChD,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CACrC,0CAAE,EAAE,CAAA;IAEL,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAEhC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAEnE,OAAQ,aAA6B,CAAC,OAAO,CAAC,OAAO,CAAA;AACvD,CAAC"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
15
15
|
pre(request: PluginPreRequest): Promise<void>;
|
|
16
16
|
post(_request: PluginPostRequest): Promise<void>;
|
|
17
17
|
getContent(id: string): Promise<NodeComponent>;
|
|
18
|
-
getHandoffContent(handoffTargetId: string | undefined): Promise<HandoffNode>;
|
|
18
|
+
getHandoffContent(handoffTargetId: string | undefined): Promise<HandoffNode | undefined>;
|
|
19
19
|
getFlowContent(hubtypeContent: NodeComponent, locale: string): FlowContent | undefined;
|
|
20
20
|
getStartId(): Promise<string>;
|
|
21
21
|
getFallbackId(alternate: boolean): Promise<string>;
|
package/lib/esm/index.js
CHANGED
|
@@ -2,8 +2,8 @@ import axios from 'axios';
|
|
|
2
2
|
import { FlowCarousel, FlowImage, FlowText, FlowVideo, } from './content-fields';
|
|
3
3
|
import { NodeType, } from './flow-builder-models';
|
|
4
4
|
import { DEFAULT_FUNCTIONS } from './functions';
|
|
5
|
-
import { resolveGetAccessToken } from './utils';
|
|
6
5
|
import { updateButtonUrls } from './helpers';
|
|
6
|
+
import { resolveGetAccessToken } from './utils';
|
|
7
7
|
export default class BotonicPluginFlowBuilder {
|
|
8
8
|
constructor(options) {
|
|
9
9
|
this.options = options;
|
|
@@ -34,11 +34,9 @@ export default class BotonicPluginFlowBuilder {
|
|
|
34
34
|
return content;
|
|
35
35
|
}
|
|
36
36
|
async getHandoffContent(handoffTargetId) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
throw Error(`Handoff node not found`);
|
|
41
|
-
return content;
|
|
37
|
+
if (!handoffTargetId)
|
|
38
|
+
return undefined;
|
|
39
|
+
return (await this.getContent(handoffTargetId));
|
|
42
40
|
}
|
|
43
41
|
getFlowContent(hubtypeContent, locale) {
|
|
44
42
|
switch (hubtypeContent.type) {
|
|
@@ -80,6 +78,16 @@ export default class BotonicPluginFlowBuilder {
|
|
|
80
78
|
await updateButtonUrls(hubtypeContent, 'elements', this.getContent);
|
|
81
79
|
await updateButtonUrls(hubtypeContent, 'buttons', this.getContent);
|
|
82
80
|
const content = await this.getFlowContent(hubtypeContent, locale);
|
|
81
|
+
if (content && 'buttons' in content) {
|
|
82
|
+
content.buttons.forEach(async (button) => {
|
|
83
|
+
if (button.payload) {
|
|
84
|
+
const contentButton = await this.getContent(button.payload);
|
|
85
|
+
if ((contentButton === null || contentButton === void 0 ? void 0 : contentButton.type) === NodeType.PAYLOAD) {
|
|
86
|
+
button.payload = contentButton.content.payload;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
83
91
|
if (hubtypeContent.type === NodeType.FUNCTION) {
|
|
84
92
|
const targetId = await this.callFunction(hubtypeContent, locale);
|
|
85
93
|
return this.getContents(targetId, locale, contents);
|
|
@@ -154,11 +162,8 @@ export default class BotonicPluginFlowBuilder {
|
|
|
154
162
|
async callFunction(functionNode, locale) {
|
|
155
163
|
var _a;
|
|
156
164
|
const functionNodeId = functionNode.id;
|
|
157
|
-
const nameValues = (_a = functionNode.content.arguments
|
|
158
|
-
.find(arg => arg.locale === locale)) === null || _a === void 0 ? void 0 : _a.values.map(value => ({ [value.name]: value.value }));
|
|
159
|
-
if (!nameValues) {
|
|
160
|
-
throw new Error(`No arguments found for node with id ${functionNodeId}`);
|
|
161
|
-
}
|
|
165
|
+
const nameValues = ((_a = functionNode.content.arguments
|
|
166
|
+
.find(arg => arg.locale === locale)) === null || _a === void 0 ? void 0 : _a.values.map(value => ({ [value.name]: value.value }))) || [];
|
|
162
167
|
const args = Object.assign({
|
|
163
168
|
session: this.currentRequest.session,
|
|
164
169
|
results: [functionNode.content.result_mapping.map(r => r.result)],
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EACL,YAAY,EAEZ,SAAS,EACT,QAAQ,EACR,SAAS,GACV,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAQL,QAAQ,GAET,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"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.
|
|
3
|
+
"version": "0.22.0-alpha.1",
|
|
4
4
|
"main": "./lib/cjs/index.js",
|
|
5
5
|
"module": "./lib/esm/index.js",
|
|
6
6
|
"description": "Use Flow Builder to show your contents",
|
|
@@ -49,6 +49,6 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@babel/runtime": "^7.21.0",
|
|
51
51
|
"axios": "^1.3.6",
|
|
52
|
-
"@botonic/react": "^0.21.
|
|
52
|
+
"@botonic/react": "^0.21.6"
|
|
53
53
|
}
|
|
54
54
|
}
|
package/src/functions/index.ts
CHANGED
package/src/handoff.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HandOffBuilder } from '@botonic/core'
|
|
2
2
|
import { ActionRequest } from '@botonic/react'
|
|
3
3
|
|
|
4
|
-
import { HandoffNode } from './flow-builder-models'
|
|
4
|
+
import { HandoffNode, PayloadNode } from './flow-builder-models'
|
|
5
5
|
import { getFlowBuilderPlugin } from './helpers'
|
|
6
6
|
|
|
7
7
|
export async function doHandoff(
|
|
@@ -9,15 +9,15 @@ export async function doHandoff(
|
|
|
9
9
|
locale: string,
|
|
10
10
|
handoffNode: HandoffNode
|
|
11
11
|
): Promise<void> {
|
|
12
|
-
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins)
|
|
13
|
-
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent(
|
|
14
|
-
handoffNode.target?.id
|
|
15
|
-
)
|
|
16
12
|
// @ts-ignore
|
|
17
|
-
const handOffBuilder = new HandOffBuilder(request.session)
|
|
13
|
+
const handOffBuilder = new HandOffBuilder(request.session)
|
|
18
14
|
const handoffQueues = handoffNode.content.queue
|
|
19
15
|
const queueFound = handoffQueues.find(q => q.locale === locale)
|
|
20
16
|
if (queueFound) handOffBuilder.withQueue(queueFound.id)
|
|
17
|
+
|
|
18
|
+
const onFinishPayload = await getOnFinishPayload(handoffNode, locale, request)
|
|
19
|
+
if (onFinishPayload) handOffBuilder.withOnFinishPayload(onFinishPayload)
|
|
20
|
+
|
|
21
21
|
// TODO: Retrieve params from FlowBuilder
|
|
22
22
|
// const handoffParams = {
|
|
23
23
|
// agentEmail: 'test@gmail.com',
|
|
@@ -32,6 +32,28 @@ export async function doHandoff(
|
|
|
32
32
|
// handOffBuilder.withAgentEmail(handoffParams.agentEmail)
|
|
33
33
|
// }
|
|
34
34
|
|
|
35
|
-
handOffBuilder.withOnFinishPayload(handoffTargetNode.id)
|
|
36
35
|
await handOffBuilder.handOff()
|
|
37
36
|
}
|
|
37
|
+
|
|
38
|
+
async function getOnFinishPayload(
|
|
39
|
+
handoffNode: HandoffNode,
|
|
40
|
+
locale: string,
|
|
41
|
+
request: ActionRequest
|
|
42
|
+
): Promise<string | undefined> {
|
|
43
|
+
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins)
|
|
44
|
+
|
|
45
|
+
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent(
|
|
46
|
+
handoffNode.target?.id
|
|
47
|
+
)
|
|
48
|
+
if (handoffTargetNode?.id) return handoffTargetNode?.id
|
|
49
|
+
|
|
50
|
+
const payloadId = handoffNode.content.payload.find(
|
|
51
|
+
payload => payload.locale === locale
|
|
52
|
+
)?.id
|
|
53
|
+
|
|
54
|
+
if (!payloadId) return undefined
|
|
55
|
+
|
|
56
|
+
const actionPayload = await flowBuilderPlugin.getContent(payloadId)
|
|
57
|
+
|
|
58
|
+
return (actionPayload as PayloadNode).content.payload
|
|
59
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -26,9 +26,9 @@ import {
|
|
|
26
26
|
StartNode,
|
|
27
27
|
} from './flow-builder-models'
|
|
28
28
|
import { DEFAULT_FUNCTIONS } from './functions'
|
|
29
|
+
import { updateButtonUrls } from './helpers'
|
|
29
30
|
import { BotonicPluginFlowBuilderOptions } from './types'
|
|
30
31
|
import { resolveGetAccessToken } from './utils'
|
|
31
|
-
import { updateButtonUrls } from './helpers'
|
|
32
32
|
|
|
33
33
|
export default class BotonicPluginFlowBuilder implements Plugin {
|
|
34
34
|
private flowUrl: string
|
|
@@ -70,13 +70,9 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
70
70
|
|
|
71
71
|
async getHandoffContent(
|
|
72
72
|
handoffTargetId: string | undefined
|
|
73
|
-
): Promise<HandoffNode> {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
node => node.id === handoffTargetId
|
|
77
|
-
) as HandoffNode
|
|
78
|
-
if (!content) throw Error(`Handoff node not found`)
|
|
79
|
-
return content
|
|
73
|
+
): Promise<HandoffNode | undefined> {
|
|
74
|
+
if (!handoffTargetId) return undefined
|
|
75
|
+
return (await this.getContent(handoffTargetId)) as HandoffNode
|
|
80
76
|
}
|
|
81
77
|
|
|
82
78
|
getFlowContent(
|
|
@@ -129,6 +125,18 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
129
125
|
await updateButtonUrls(hubtypeContent, 'elements', this.getContent)
|
|
130
126
|
await updateButtonUrls(hubtypeContent, 'buttons', this.getContent)
|
|
131
127
|
const content = await this.getFlowContent(hubtypeContent, locale)
|
|
128
|
+
|
|
129
|
+
if (content && 'buttons' in content) {
|
|
130
|
+
content.buttons.forEach(async button => {
|
|
131
|
+
if (button.payload) {
|
|
132
|
+
const contentButton = await this.getContent(button.payload)
|
|
133
|
+
if (contentButton?.type === NodeType.PAYLOAD) {
|
|
134
|
+
button.payload = contentButton.content.payload
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
|
|
132
140
|
if (hubtypeContent.type === NodeType.FUNCTION) {
|
|
133
141
|
const targetId = await this.callFunction(hubtypeContent, locale)
|
|
134
142
|
return this.getContents(targetId, locale, contents)
|
|
@@ -230,12 +238,11 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
230
238
|
locale: string
|
|
231
239
|
): Promise<string> {
|
|
232
240
|
const functionNodeId = functionNode.id
|
|
233
|
-
const nameValues =
|
|
234
|
-
.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
241
|
+
const nameValues =
|
|
242
|
+
functionNode.content.arguments
|
|
243
|
+
.find(arg => arg.locale === locale)
|
|
244
|
+
?.values.map(value => ({ [value.name]: value.value })) || []
|
|
245
|
+
|
|
239
246
|
const args = Object.assign(
|
|
240
247
|
{
|
|
241
248
|
session: this.currentRequest.session,
|