@botonic/plugin-flow-builder 2.28.0 → 2.30.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.
- package/CHANGELOG.md +31 -0
- package/package.json +3 -3
- package/src/lib/action/ai-agent-from-user-input.d.ts +3 -0
- package/src/lib/action/ai-agent-from-user-input.js +31 -0
- package/src/lib/action/ai-agent-from-user-input.js.map +1 -0
- package/src/lib/action/context.d.ts +11 -0
- package/src/lib/action/context.js +14 -0
- package/src/lib/action/context.js.map +1 -0
- package/src/lib/action/fallback.d.ts +1 -1
- package/src/lib/action/fallback.js.map +1 -1
- package/src/lib/action/first-interaction.d.ts +1 -1
- package/src/lib/action/first-interaction.js +4 -3
- package/src/lib/action/first-interaction.js.map +1 -1
- package/src/lib/action/get-contents.d.ts +3 -0
- package/src/lib/action/get-contents.js +46 -0
- package/src/lib/action/get-contents.js.map +1 -0
- package/src/lib/action/index.d.ts +1 -11
- package/src/lib/action/index.js +17 -94
- package/src/lib/action/index.js.map +1 -1
- package/src/lib/action/knowledge-bases.d.ts +1 -1
- package/src/lib/action/knowledge-bases.js +2 -2
- package/src/lib/action/knowledge-bases.js.map +1 -1
- package/src/lib/action/payload.d.ts +1 -1
- package/src/lib/api.d.ts +0 -3
- package/src/lib/api.js +4 -29
- package/src/lib/api.js.map +1 -1
- package/src/lib/content-fields/content-fields-base.d.ts +3 -0
- package/src/lib/content-fields/content-fields-base.js +14 -0
- package/src/lib/content-fields/content-fields-base.js.map +1 -1
- package/src/lib/content-fields/flow-ai-agent-base.d.ts +23 -0
- package/src/lib/content-fields/flow-ai-agent-base.js +93 -0
- package/src/lib/content-fields/flow-ai-agent-base.js.map +1 -0
- package/src/lib/content-fields/flow-ai-agent-router.d.ts +22 -0
- package/src/lib/content-fields/flow-ai-agent-router.js +135 -0
- package/src/lib/content-fields/flow-ai-agent-router.js.map +1 -0
- package/src/lib/content-fields/flow-ai-agent.d.ts +8 -11
- package/src/lib/content-fields/flow-ai-agent.js +44 -25
- package/src/lib/content-fields/flow-ai-agent.js.map +1 -1
- package/src/lib/content-fields/flow-bot-action.d.ts +1 -0
- package/src/lib/content-fields/flow-bot-action.js +7 -0
- package/src/lib/content-fields/flow-bot-action.js.map +1 -1
- package/src/lib/content-fields/flow-button.d.ts +4 -0
- package/src/lib/content-fields/flow-button.js +7 -0
- package/src/lib/content-fields/flow-button.js.map +1 -1
- package/src/lib/content-fields/flow-capture-user-input.d.ts +2 -1
- package/src/lib/content-fields/flow-capture-user-input.js +7 -3
- package/src/lib/content-fields/flow-capture-user-input.js.map +1 -1
- package/src/lib/content-fields/flow-carousel.d.ts +2 -37
- package/src/lib/content-fields/flow-carousel.js +24 -140
- package/src/lib/content-fields/flow-carousel.js.map +1 -1
- package/src/lib/content-fields/flow-channel-conditional.d.ts +2 -1
- package/src/lib/content-fields/flow-channel-conditional.js +7 -1
- package/src/lib/content-fields/flow-channel-conditional.js.map +1 -1
- package/src/lib/content-fields/flow-country-conditional.d.ts +2 -1
- package/src/lib/content-fields/flow-country-conditional.js +7 -1
- package/src/lib/content-fields/flow-country-conditional.js.map +1 -1
- package/src/lib/content-fields/flow-custom-conditional.d.ts +2 -1
- package/src/lib/content-fields/flow-custom-conditional.js +7 -1
- package/src/lib/content-fields/flow-custom-conditional.js.map +1 -1
- package/src/lib/content-fields/flow-element.d.ts +1 -0
- package/src/lib/content-fields/flow-element.js +6 -0
- package/src/lib/content-fields/flow-element.js.map +1 -1
- package/src/lib/content-fields/flow-go-to-flow.d.ts +2 -1
- package/src/lib/content-fields/flow-go-to-flow.js +7 -1
- package/src/lib/content-fields/flow-go-to-flow.js.map +1 -1
- package/src/lib/content-fields/flow-handoff.d.ts +3 -2
- package/src/lib/content-fields/flow-handoff.js +17 -10
- package/src/lib/content-fields/flow-handoff.js.map +1 -1
- package/src/lib/content-fields/flow-image.d.ts +2 -1
- package/src/lib/content-fields/flow-image.js +7 -1
- package/src/lib/content-fields/flow-image.js.map +1 -1
- package/src/lib/content-fields/flow-knowledge-base.d.ts +3 -2
- package/src/lib/content-fields/flow-knowledge-base.js +8 -6
- package/src/lib/content-fields/flow-knowledge-base.js.map +1 -1
- package/src/lib/content-fields/flow-queue-status-conditional.d.ts +2 -1
- package/src/lib/content-fields/flow-queue-status-conditional.js +7 -1
- package/src/lib/content-fields/flow-queue-status-conditional.js.map +1 -1
- package/src/lib/content-fields/flow-rating.d.ts +2 -1
- package/src/lib/content-fields/flow-rating.js +21 -43
- package/src/lib/content-fields/flow-rating.js.map +1 -1
- package/src/lib/content-fields/flow-text.d.ts +3 -2
- package/src/lib/content-fields/flow-text.js +20 -8
- package/src/lib/content-fields/flow-text.js.map +1 -1
- package/src/lib/content-fields/flow-video.d.ts +2 -1
- package/src/lib/content-fields/flow-video.js +7 -1
- package/src/lib/content-fields/flow-video.js.map +1 -1
- package/src/lib/content-fields/flow-webview.d.ts +1 -0
- package/src/lib/content-fields/flow-webview.js +6 -0
- package/src/lib/content-fields/flow-webview.js.map +1 -1
- package/src/lib/content-fields/flow-whatsapp-cta-url-button.d.ts +1 -0
- package/src/lib/content-fields/flow-whatsapp-cta-url-button.js +6 -0
- package/src/lib/content-fields/flow-whatsapp-cta-url-button.js.map +1 -1
- package/src/lib/content-fields/flow-whatsapp-template.d.ts +3 -1
- package/src/lib/content-fields/flow-whatsapp-template.js +26 -20
- package/src/lib/content-fields/flow-whatsapp-template.js.map +1 -1
- package/src/lib/content-fields/hubtype-fields/ai-agent-router.d.ts +21 -0
- package/src/lib/content-fields/hubtype-fields/ai-agent-router.js +2 -0
- package/src/lib/content-fields/hubtype-fields/ai-agent-router.js.map +1 -0
- package/src/lib/content-fields/hubtype-fields/ai-agent.d.ts +3 -0
- package/src/lib/content-fields/hubtype-fields/index.d.ts +1 -0
- package/src/lib/content-fields/hubtype-fields/index.js +1 -0
- package/src/lib/content-fields/hubtype-fields/index.js.map +1 -1
- package/src/lib/content-fields/hubtype-fields/node-types.d.ts +1 -0
- package/src/lib/content-fields/hubtype-fields/node-types.js +1 -0
- package/src/lib/content-fields/hubtype-fields/node-types.js.map +1 -1
- package/src/lib/content-fields/hubtype-fields/nodes.d.ts +2 -1
- package/src/lib/content-fields/hubtype-fields/whatsapp-template.d.ts +22 -19
- package/src/lib/content-fields/index.d.ts +3 -2
- package/src/lib/content-fields/index.js +2 -1
- package/src/lib/content-fields/index.js.map +1 -1
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.d.ts +2 -2
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js +12 -6
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-row.js.map +1 -1
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.d.ts +2 -2
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js +11 -6
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list-section.js.map +1 -1
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list.d.ts +1 -0
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js +6 -11
- package/src/lib/content-fields/whatsapp-button-list/flow-whatsapp-button-list.js.map +1 -1
- package/src/lib/content-fields/whatsapp-button-list/index.d.ts +3 -0
- package/src/lib/content-fields/whatsapp-button-list/index.js +4 -0
- package/src/lib/content-fields/whatsapp-button-list/index.js.map +1 -0
- package/src/lib/filters/index.d.ts +2 -2
- package/src/lib/filters/index.js.map +1 -1
- package/src/lib/flow-factory.js +4 -2
- package/src/lib/flow-factory.js.map +1 -1
- package/src/lib/functions/index.js.map +1 -1
- package/src/lib/index.d.ts +2 -2
- package/src/lib/index.js +9 -5
- package/src/lib/index.js.map +1 -1
- package/src/lib/services/capture-user-input-client.d.ts +1 -1
- package/src/lib/services/capture-user-input-client.js +2 -2
- package/src/lib/services/capture-user-input-client.js.map +1 -1
- package/src/lib/services/flow-client.js.map +1 -1
- package/src/lib/services/smart-intent-client.js +2 -2
- package/src/lib/services/smart-intent-client.js.map +1 -1
- package/src/lib/tests/helpers/flows/whatsapp-template.js +211 -151
- package/src/lib/tests/helpers/flows/whatsapp-template.js.map +1 -1
- package/src/lib/tests/helpers/utils.d.ts +3 -2
- package/src/lib/tests/helpers/utils.js +4 -2
- package/src/lib/tests/helpers/utils.js.map +1 -1
- package/src/lib/tracking.d.ts +1 -1
- package/src/lib/tracking.js +1 -1
- package/src/lib/tracking.js.map +1 -1
- package/src/lib/types.d.ts +2 -2
- package/src/lib/user-input/capture-user-input.d.ts +2 -1
- package/src/lib/user-input/capture-user-input.js +10 -9
- package/src/lib/user-input/capture-user-input.js.map +1 -1
- package/src/lib/user-input/index.js +7 -8
- package/src/lib/user-input/index.js.map +1 -1
- package/src/lib/user-input/keyword.d.ts +4 -2
- package/src/lib/user-input/keyword.js +6 -5
- package/src/lib/user-input/keyword.js.map +1 -1
- package/src/lib/user-input/smart-intent.d.ts +2 -1
- package/src/lib/user-input/smart-intent.js +5 -5
- package/src/lib/user-input/smart-intent.js.map +1 -1
- package/src/lib/utils/ai-agent.d.ts +22 -0
- package/src/lib/utils/ai-agent.js +188 -0
- package/src/lib/utils/ai-agent.js.map +1 -0
- package/src/lib/utils/flow-locale.d.ts +22 -0
- package/src/lib/utils/flow-locale.js +80 -0
- package/src/lib/utils/flow-locale.js.map +1 -0
- package/src/lib/utils/get-flow-builder-plugin.d.ts +3 -0
- package/src/lib/{helpers.js → utils/get-flow-builder-plugin.js} +1 -1
- package/src/lib/utils/get-flow-builder-plugin.js.map +1 -0
- package/src/lib/utils/index.d.ts +4 -0
- package/src/lib/utils/index.js +5 -0
- package/src/lib/utils/index.js.map +1 -0
- package/src/lib/{utils.d.ts → utils/input.d.ts} +3 -1
- package/src/lib/utils/input.js +32 -0
- package/src/lib/utils/input.js.map +1 -0
- package/src/lib/action/ai-agent.d.ts +0 -3
- package/src/lib/action/ai-agent.js +0 -67
- package/src/lib/action/ai-agent.js.map +0 -1
- package/src/lib/helpers.d.ts +0 -3
- package/src/lib/helpers.js.map +0 -1
- package/src/lib/utils.js +0 -16
- package/src/lib/utils.js.map +0 -1
|
@@ -4,28 +4,29 @@ import { FlowCaptureUserInput } from '../content-fields';
|
|
|
4
4
|
import { HtAiValidationType, } from '../content-fields/hubtype-fields';
|
|
5
5
|
import { CaptureUserInputClient } from '../services/capture-user-input-client';
|
|
6
6
|
import { getCommonFlowContentEventArgsForContentId, trackEvent, } from '../tracking';
|
|
7
|
+
import { inputHasTextOrTranscript } from '../utils';
|
|
7
8
|
export class CaptureUserInputApi {
|
|
8
|
-
constructor(cmsApi, botonicContext) {
|
|
9
|
+
constructor(cmsApi, botonicContext, textOrTranscript) {
|
|
9
10
|
this.cmsApi = cmsApi;
|
|
10
11
|
this.botonicContext = botonicContext;
|
|
12
|
+
this.textOrTranscript = textOrTranscript;
|
|
11
13
|
}
|
|
12
14
|
getNextNodeId() {
|
|
13
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
-
|
|
15
|
-
if (this.botonicContext.input.hasInputText() &&
|
|
16
|
+
if (inputHasTextOrTranscript(this.botonicContext.input) &&
|
|
16
17
|
this.cmsApi.shouldCaptureUserInput()) {
|
|
17
18
|
const captureUserInputNode = this.cmsApi.getCaptureUserInputNode();
|
|
18
|
-
if (!captureUserInputNode) {
|
|
19
|
+
if (!captureUserInputNode || !this.textOrTranscript) {
|
|
19
20
|
return undefined;
|
|
20
21
|
}
|
|
21
22
|
const captureUserInput = FlowCaptureUserInput.fromHubtypeCMS(captureUserInputNode);
|
|
22
23
|
if (captureUserInput.aiValidationType === HtAiValidationType.NONE) {
|
|
23
|
-
yield this.cmsApi.setUserExtraDataVariable(captureUserInputNode.content.field_name,
|
|
24
|
+
yield this.cmsApi.setUserExtraDataVariable(captureUserInputNode.content.field_name, this.textOrTranscript);
|
|
24
25
|
yield this.trackUserInputCapture(captureUserInputNode, true);
|
|
25
26
|
return captureUserInput.captureSuccessId;
|
|
26
27
|
}
|
|
27
28
|
const client = new CaptureUserInputClient(this.botonicContext);
|
|
28
|
-
const aiCaptureResponse = yield client.getCaptureUserInputResponse(captureUserInputNode);
|
|
29
|
+
const aiCaptureResponse = yield client.getCaptureUserInputResponse(captureUserInputNode, this.textOrTranscript);
|
|
29
30
|
if (!aiCaptureResponse.success) {
|
|
30
31
|
yield this.trackUserInputCapture(captureUserInputNode, false);
|
|
31
32
|
return captureUserInput.captureFailId;
|
|
@@ -39,7 +40,7 @@ export class CaptureUserInputApi {
|
|
|
39
40
|
}
|
|
40
41
|
trackUserInputCapture(captureUserInputNode, captureSuccess) {
|
|
41
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
var _a
|
|
43
|
+
var _a;
|
|
43
44
|
const { flowThreadId, flowId, flowName, flowNodeId, flowNodeContentId } = yield getCommonFlowContentEventArgsForContentId(this.botonicContext, captureUserInputNode.id);
|
|
44
45
|
const event = {
|
|
45
46
|
action: EventAction.CaptureUserInput,
|
|
@@ -50,9 +51,9 @@ export class CaptureUserInputApi {
|
|
|
50
51
|
flowNodeContentId,
|
|
51
52
|
flowNodeIsMeaningful: false,
|
|
52
53
|
fieldName: captureUserInputNode.content.field_name,
|
|
53
|
-
userInput:
|
|
54
|
+
userInput: this.textOrTranscript,
|
|
54
55
|
captureSuccess,
|
|
55
|
-
messageId: (
|
|
56
|
+
messageId: (_a = this.botonicContext.input.messageId) !== null && _a !== void 0 ? _a : '',
|
|
56
57
|
};
|
|
57
58
|
const { action } = event, eventArgs = __rest(event, ["action"]);
|
|
58
59
|
yield trackEvent(this.botonicContext, action, eventArgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture-user-input.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/capture-user-input.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAyB,MAAM,iBAAiB,CAAA;AAGpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EACL,kBAAkB,GAEnB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAA;AAC9E,OAAO,EACL,yCAAyC,EACzC,UAAU,GACX,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"capture-user-input.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/capture-user-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { isKeywordsAllowed, isSmartIntentsAllowed } from '../utils';
|
|
2
|
+
import { getTextOrTranscript, isKeywordsAllowed, isSmartIntentsAllowed, } from '../utils';
|
|
3
3
|
import { CaptureUserInputApi } from './capture-user-input';
|
|
4
4
|
import { KeywordMatcher } from './keyword';
|
|
5
5
|
import { SmartIntentsApi } from './smart-intent';
|
|
6
6
|
export function getNextPayloadByUserInput(cmsApi, locale, botonicContext, smartIntentsConfig) {
|
|
7
7
|
return __awaiter(this, void 0, void 0, function* () {
|
|
8
|
-
|
|
8
|
+
const userTextOrTranscript = getTextOrTranscript(botonicContext.input);
|
|
9
|
+
if (userTextOrTranscript) {
|
|
9
10
|
if (cmsApi.shouldCaptureUserInput()) {
|
|
10
|
-
const captureUserInputApi = new CaptureUserInputApi(cmsApi, botonicContext);
|
|
11
|
+
const captureUserInputApi = new CaptureUserInputApi(cmsApi, botonicContext, userTextOrTranscript);
|
|
11
12
|
return yield captureUserInputApi.getNextNodeId();
|
|
12
13
|
}
|
|
13
14
|
if (isKeywordsAllowed(botonicContext)) {
|
|
@@ -15,17 +16,15 @@ export function getNextPayloadByUserInput(cmsApi, locale, botonicContext, smartI
|
|
|
15
16
|
cmsApi,
|
|
16
17
|
locale,
|
|
17
18
|
botonicContext,
|
|
19
|
+
userTextOrTranscript,
|
|
18
20
|
});
|
|
19
|
-
const
|
|
20
|
-
const keywordNode = text
|
|
21
|
-
? yield keywordMatcher.getNodeByInput(text)
|
|
22
|
-
: undefined;
|
|
21
|
+
const keywordNode = yield keywordMatcher.getNodeByInput();
|
|
23
22
|
if (keywordNode) {
|
|
24
23
|
return cmsApi.getPayload(keywordNode.target);
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
if (isSmartIntentsAllowed(botonicContext)) {
|
|
28
|
-
const smartIntentsApi = new SmartIntentsApi(cmsApi, botonicContext, smartIntentsConfig);
|
|
27
|
+
const smartIntentsApi = new SmartIntentsApi(cmsApi, botonicContext, smartIntentsConfig, userTextOrTranscript);
|
|
29
28
|
const smartIntentNode = yield smartIntentsApi.getNodeByInput();
|
|
30
29
|
if (smartIntentNode) {
|
|
31
30
|
return cmsApi.getPayload(smartIntentNode.target);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/index.ts"],"names":[],"mappings":";AAIA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,UAAgB,yBAAyB,CAC7C,MAAsB,EACtB,MAAc,EACd,cAA8B,EAC9B,kBAA+C;;QAE/C,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACtE,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC;gBACpC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,MAAM,EACN,cAAc,EACd,oBAAoB,CACrB,CAAA;gBACD,OAAO,MAAM,mBAAmB,CAAC,aAAa,EAAE,CAAA;YAClD,CAAC;YAED,IAAI,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;oBACxC,MAAM;oBACN,MAAM;oBACN,cAAc;oBACd,oBAAoB;iBACrB,CAAC,CAAA;gBACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAA;gBACzD,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;YAED,IAAI,qBAAqB,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,oBAAoB,CACrB,CAAA;gBACD,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,CAAA;gBAC9D,IAAI,eAAe,EAAE,CAAC;oBACpB,OAAO,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CAAA"}
|
|
@@ -5,6 +5,7 @@ interface KeywordProps {
|
|
|
5
5
|
cmsApi: FlowBuilderApi;
|
|
6
6
|
locale: string;
|
|
7
7
|
botonicContext: BotonicContext;
|
|
8
|
+
userTextOrTranscript: string;
|
|
8
9
|
}
|
|
9
10
|
export declare class KeywordMatcher {
|
|
10
11
|
cmsApi: FlowBuilderApi;
|
|
@@ -13,9 +14,10 @@ export declare class KeywordMatcher {
|
|
|
13
14
|
isRegExp: boolean;
|
|
14
15
|
matchedKeyword?: string;
|
|
15
16
|
keywordNodeId?: string;
|
|
17
|
+
userTextOrTranscript: string;
|
|
16
18
|
flowId?: string;
|
|
17
|
-
constructor({ cmsApi, locale, botonicContext }: KeywordProps);
|
|
18
|
-
getNodeByInput(
|
|
19
|
+
constructor({ cmsApi, locale, botonicContext, userTextOrTranscript, }: KeywordProps);
|
|
20
|
+
getNodeByInput(): Promise<HtKeywordNode | undefined>;
|
|
19
21
|
private getNodeByKeyword;
|
|
20
22
|
private matchKeywords;
|
|
21
23
|
private inputMatchesAnyKeyword;
|
|
@@ -4,16 +4,17 @@ import { EventAction } from '@botonic/shared';
|
|
|
4
4
|
import { REG_EXP_PATTERN } from '../constants';
|
|
5
5
|
import { getCommonFlowContentEventArgsForContentId, trackEvent, } from '../tracking';
|
|
6
6
|
export class KeywordMatcher {
|
|
7
|
-
constructor({ cmsApi, locale, botonicContext }) {
|
|
7
|
+
constructor({ cmsApi, locale, botonicContext, userTextOrTranscript, }) {
|
|
8
8
|
this.cmsApi = cmsApi;
|
|
9
9
|
this.locale = locale;
|
|
10
10
|
this.botonicContext = botonicContext;
|
|
11
11
|
this.isRegExp = false;
|
|
12
|
+
this.userTextOrTranscript = userTextOrTranscript;
|
|
12
13
|
}
|
|
13
|
-
getNodeByInput(
|
|
14
|
+
getNodeByInput() {
|
|
14
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15
16
|
const keywordNodes = this.cmsApi.getKeywordNodes();
|
|
16
|
-
const keywordNode = this.getNodeByKeyword(
|
|
17
|
+
const keywordNode = this.getNodeByKeyword(this.userTextOrTranscript, keywordNodes);
|
|
17
18
|
if (!keywordNode || !this.matchedKeyword) {
|
|
18
19
|
return undefined;
|
|
19
20
|
}
|
|
@@ -64,7 +65,7 @@ export class KeywordMatcher {
|
|
|
64
65
|
}
|
|
65
66
|
trackKeywordEvent() {
|
|
66
67
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
var _a, _b
|
|
68
|
+
var _a, _b;
|
|
68
69
|
const { flowId, flowName, flowNodeId, flowNodeContentId } = yield getCommonFlowContentEventArgsForContentId(this.botonicContext, this.keywordNodeId);
|
|
69
70
|
const event = {
|
|
70
71
|
action: EventAction.Keyword,
|
|
@@ -76,7 +77,7 @@ export class KeywordMatcher {
|
|
|
76
77
|
nluKeywordName: this.matchedKeyword,
|
|
77
78
|
nluKeywordIsRegex: this.isRegExp,
|
|
78
79
|
nluKeywordMessageId: (_b = this.botonicContext.input.messageId) !== null && _b !== void 0 ? _b : '',
|
|
79
|
-
userInput:
|
|
80
|
+
userInput: this.userTextOrTranscript,
|
|
80
81
|
};
|
|
81
82
|
const { action } = event, eventArgs = __rest(event, ["action"]);
|
|
82
83
|
yield trackEvent(this.botonicContext, action, eventArgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/keyword.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,WAAW,EAAgB,MAAM,iBAAiB,CAAA;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAK9C,OAAO,EACL,yCAAyC,EACzC,UAAU,GACX,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"keyword.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/keyword.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,9 @@ export declare class SmartIntentsApi {
|
|
|
15
15
|
cmsApi: FlowBuilderApi;
|
|
16
16
|
botonicContext: BotonicContext;
|
|
17
17
|
smartIntentsConfig: SmartIntentsInferenceConfig;
|
|
18
|
+
userTextOrTranscript: string;
|
|
18
19
|
flowId?: string | undefined;
|
|
19
|
-
constructor(cmsApi: FlowBuilderApi, botonicContext: BotonicContext, smartIntentsConfig: SmartIntentsInferenceConfig, flowId?: string | undefined);
|
|
20
|
+
constructor(cmsApi: FlowBuilderApi, botonicContext: BotonicContext, smartIntentsConfig: SmartIntentsInferenceConfig, userTextOrTranscript: string, flowId?: string | undefined);
|
|
20
21
|
getNodeByInput(): Promise<HtSmartIntentNode | undefined>;
|
|
21
22
|
private resolveUseLatest;
|
|
22
23
|
}
|
|
@@ -4,17 +4,17 @@ import { EventAction } from '@botonic/shared';
|
|
|
4
4
|
import { SmartIntentClient } from '../services/smart-intent-client';
|
|
5
5
|
import { getCommonFlowContentEventArgsForContentId, trackEvent, } from '../tracking';
|
|
6
6
|
export class SmartIntentsApi {
|
|
7
|
-
constructor(cmsApi, botonicContext, smartIntentsConfig, flowId) {
|
|
7
|
+
constructor(cmsApi, botonicContext, smartIntentsConfig, userTextOrTranscript, flowId) {
|
|
8
8
|
this.cmsApi = cmsApi;
|
|
9
9
|
this.botonicContext = botonicContext;
|
|
10
10
|
this.smartIntentsConfig = smartIntentsConfig;
|
|
11
|
+
this.userTextOrTranscript = userTextOrTranscript;
|
|
11
12
|
this.flowId = flowId;
|
|
12
13
|
}
|
|
13
14
|
getNodeByInput() {
|
|
14
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
15
16
|
var _a, _b;
|
|
16
|
-
|
|
17
|
-
if (!text)
|
|
17
|
+
if (!this.userTextOrTranscript)
|
|
18
18
|
return undefined;
|
|
19
19
|
const smartIntentNodes = this.cmsApi.getSmartIntentNodes();
|
|
20
20
|
if (!smartIntentNodes.length)
|
|
@@ -22,7 +22,7 @@ export class SmartIntentsApi {
|
|
|
22
22
|
const smartIntentClient = new SmartIntentClient(this.botonicContext);
|
|
23
23
|
const requestData = {
|
|
24
24
|
bot_id: this.botonicContext.session.bot.id,
|
|
25
|
-
text,
|
|
25
|
+
text: this.userTextOrTranscript,
|
|
26
26
|
num_smart_intents_to_use: this.smartIntentsConfig.numSmartIntentsToUse,
|
|
27
27
|
use_latest: this.resolveUseLatest(),
|
|
28
28
|
};
|
|
@@ -42,7 +42,7 @@ export class SmartIntentsApi {
|
|
|
42
42
|
nluIntentSmartTitle: response.smart_intent_title,
|
|
43
43
|
nluIntentSmartNumUsed: response.smart_intents_used.length,
|
|
44
44
|
nluIntentSmartMessageId: (_a = this.botonicContext.input.messageId) !== null && _a !== void 0 ? _a : '',
|
|
45
|
-
userInput:
|
|
45
|
+
userInput: this.userTextOrTranscript,
|
|
46
46
|
flowThreadId: (_b = this.botonicContext.session.flowThreadId) !== null && _b !== void 0 ? _b : undefined,
|
|
47
47
|
flowId,
|
|
48
48
|
flowName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-intent.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/smart-intent.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,WAAW,EAAoB,MAAM,iBAAiB,CAAA;AAI/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EACL,yCAAyC,EACzC,UAAU,GACX,MAAM,aAAa,CAAA;AAcpB,MAAM,OAAO,eAAe;IAC1B,YACS,MAAsB,EACtB,cAA8B,EAC9B,kBAA+C,EAC/C,MAAe;
|
|
1
|
+
{"version":3,"file":"smart-intent.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/user-input/smart-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FlowAiAgent, FlowAiAgentRouter, type FlowContent } from '../content-fields/index';
|
|
2
|
+
interface AiAgentRouterResult {
|
|
3
|
+
aiAgentRouterContent: FlowAiAgentRouter;
|
|
4
|
+
contentsBeforeAiAgentRouter: FlowContent[];
|
|
5
|
+
}
|
|
6
|
+
interface AiAgentResult {
|
|
7
|
+
aiAgentContent: FlowAiAgent;
|
|
8
|
+
contentsBeforeAiAgent: FlowContent[];
|
|
9
|
+
}
|
|
10
|
+
export declare function splitAiAgentContents(contents: FlowContent[]): AiAgentRouterResult | AiAgentResult | undefined;
|
|
11
|
+
export declare class HubtypeAssistantContent {
|
|
12
|
+
static adapt(content: FlowContent): string;
|
|
13
|
+
private static quickReplyLabel;
|
|
14
|
+
private static persistentButtonLabel;
|
|
15
|
+
private static carouselButtonLabel;
|
|
16
|
+
private static formatFlowTextContent;
|
|
17
|
+
private static formatCarouselContent;
|
|
18
|
+
private static formatWhatsappButtonListContent;
|
|
19
|
+
private static formatWhatsappCtaContent;
|
|
20
|
+
private static formatWhatsappTemplateContent;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { WhatsappHeaderType } from '@botonic/shared';
|
|
2
|
+
import { HtButtonStyle } from '../content-fields/hubtype-fields';
|
|
3
|
+
import { FlowAiAgent, FlowAiAgentRouter, FlowCarousel, FlowImage, FlowText, FlowVideo, FlowWhatsappButtonList, FlowWhatsappCtaUrlButtonNode, FlowWhatsappTemplate, } from '../content-fields/index';
|
|
4
|
+
export function splitAiAgentContents(contents) {
|
|
5
|
+
const routerIndex = contents.findIndex(content => content instanceof FlowAiAgentRouter);
|
|
6
|
+
if (routerIndex >= 0) {
|
|
7
|
+
return {
|
|
8
|
+
aiAgentRouterContent: contents[routerIndex],
|
|
9
|
+
contentsBeforeAiAgentRouter: contents.slice(0, routerIndex),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const aiAgentIndex = contents.findIndex(content => content instanceof FlowAiAgent);
|
|
13
|
+
if (aiAgentIndex < 0) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
aiAgentContent: contents[aiAgentIndex],
|
|
18
|
+
contentsBeforeAiAgent: contents.slice(0, aiAgentIndex),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: namespace-like adapter with private static helpers
|
|
22
|
+
export class HubtypeAssistantContent {
|
|
23
|
+
static adapt(content) {
|
|
24
|
+
if (content instanceof FlowText) {
|
|
25
|
+
return HubtypeAssistantContent.formatFlowTextContent(content);
|
|
26
|
+
}
|
|
27
|
+
if (content instanceof FlowCarousel) {
|
|
28
|
+
return HubtypeAssistantContent.formatCarouselContent(content);
|
|
29
|
+
}
|
|
30
|
+
if (content instanceof FlowImage) {
|
|
31
|
+
return content.src ? `[Image]\n${content.src}` : '[Image]';
|
|
32
|
+
}
|
|
33
|
+
if (content instanceof FlowVideo) {
|
|
34
|
+
return content.src ? `[Video]\n${content.src}` : '[Video]';
|
|
35
|
+
}
|
|
36
|
+
if (content instanceof FlowWhatsappButtonList) {
|
|
37
|
+
return HubtypeAssistantContent.formatWhatsappButtonListContent(content);
|
|
38
|
+
}
|
|
39
|
+
if (content instanceof FlowWhatsappCtaUrlButtonNode) {
|
|
40
|
+
return HubtypeAssistantContent.formatWhatsappCtaContent(content);
|
|
41
|
+
}
|
|
42
|
+
if (content instanceof FlowWhatsappTemplate) {
|
|
43
|
+
return HubtypeAssistantContent.formatWhatsappTemplateContent(content);
|
|
44
|
+
}
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
static quickReplyLabel(button) {
|
|
48
|
+
var _a;
|
|
49
|
+
const buttonText = (_a = button.text) === null || _a === void 0 ? void 0 : _a.trim();
|
|
50
|
+
if (buttonText) {
|
|
51
|
+
return buttonText;
|
|
52
|
+
}
|
|
53
|
+
return button.payload || 'Option';
|
|
54
|
+
}
|
|
55
|
+
static persistentButtonLabel(button) {
|
|
56
|
+
var _a;
|
|
57
|
+
return ((_a = button.text) === null || _a === void 0 ? void 0 : _a.trim()) || 'Button';
|
|
58
|
+
}
|
|
59
|
+
static carouselButtonLabel(button) {
|
|
60
|
+
var _a;
|
|
61
|
+
return ((_a = button.text) === null || _a === void 0 ? void 0 : _a.trim()) || 'Action';
|
|
62
|
+
}
|
|
63
|
+
static formatFlowTextContent(text) {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
const body = (_b = (_a = text.text) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
|
|
66
|
+
const buttons = text.buttons;
|
|
67
|
+
if (!body && buttons.length === 0) {
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
if (buttons.length === 0) {
|
|
71
|
+
return text.text;
|
|
72
|
+
}
|
|
73
|
+
const isQuickReply = text.buttonStyle === HtButtonStyle.QUICK_REPLY;
|
|
74
|
+
const blockTitle = isQuickReply ? 'Quick replies:' : 'Buttons:';
|
|
75
|
+
const lines = buttons.map((button, i) => {
|
|
76
|
+
const label = isQuickReply
|
|
77
|
+
? HubtypeAssistantContent.quickReplyLabel(button)
|
|
78
|
+
: HubtypeAssistantContent.persistentButtonLabel(button);
|
|
79
|
+
return ` [${i + 1}] ${label}`;
|
|
80
|
+
});
|
|
81
|
+
const block = [blockTitle, ...lines].join('\n');
|
|
82
|
+
if (!body) {
|
|
83
|
+
return block;
|
|
84
|
+
}
|
|
85
|
+
return `${body}\n\n${block}`;
|
|
86
|
+
}
|
|
87
|
+
static formatCarouselContent(carousel) {
|
|
88
|
+
var _a;
|
|
89
|
+
const elements = carousel.elements;
|
|
90
|
+
const n = elements.length;
|
|
91
|
+
const mainText = ((_a = carousel.whatsappText) !== null && _a !== void 0 ? _a : '').trim();
|
|
92
|
+
if (n === 0) {
|
|
93
|
+
return mainText;
|
|
94
|
+
}
|
|
95
|
+
let header;
|
|
96
|
+
if (!mainText) {
|
|
97
|
+
header = `Carousel displayed with ${n} items:`;
|
|
98
|
+
}
|
|
99
|
+
else if (mainText.endsWith(':')) {
|
|
100
|
+
header = mainText;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
header = `${mainText}\nCarousel with ${n} items:`;
|
|
104
|
+
}
|
|
105
|
+
const itemLines = elements.map((element, index) => {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
const title = ((_a = element.title) === null || _a === void 0 ? void 0 : _a.trim()) || 'Item';
|
|
108
|
+
const subtitle = (_b = element.subtitle) === null || _b === void 0 ? void 0 : _b.trim();
|
|
109
|
+
const subtitlePart = subtitle ? ` - ${subtitle}` : '';
|
|
110
|
+
const btnLabels = [];
|
|
111
|
+
if (element.button) {
|
|
112
|
+
btnLabels.push(HubtypeAssistantContent.carouselButtonLabel(element.button));
|
|
113
|
+
}
|
|
114
|
+
const btnPart = btnLabels.length > 0 ? ` [${btnLabels.join(', ')}]` : '';
|
|
115
|
+
return ` ${index + 1}. "${title}"${subtitlePart}${btnPart}`;
|
|
116
|
+
});
|
|
117
|
+
return [header, ...itemLines].join('\n');
|
|
118
|
+
}
|
|
119
|
+
static formatWhatsappButtonListContent(list) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
const body = (_b = (_a = list.text) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
|
|
122
|
+
const hasSections = list.sections.some(s => s.rows.length > 0);
|
|
123
|
+
if (!body && !hasSections) {
|
|
124
|
+
return '[WhatsApp Button List]';
|
|
125
|
+
}
|
|
126
|
+
const parts = [];
|
|
127
|
+
if (body) {
|
|
128
|
+
parts.push(body);
|
|
129
|
+
}
|
|
130
|
+
if (hasSections) {
|
|
131
|
+
const sectionBlocks = list.sections.map(section => {
|
|
132
|
+
var _a;
|
|
133
|
+
const rowLines = section.rows.map(row => {
|
|
134
|
+
var _a, _b, _c, _d;
|
|
135
|
+
const rowTitle = (_b = (_a = row.title) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : '';
|
|
136
|
+
const rowDescription = (_d = (_c = row.description) === null || _c === void 0 ? void 0 : _c.trim()) !== null && _d !== void 0 ? _d : '';
|
|
137
|
+
if (!rowTitle && !rowDescription) {
|
|
138
|
+
return ' - ';
|
|
139
|
+
}
|
|
140
|
+
if (!rowTitle) {
|
|
141
|
+
return ` - ${rowDescription}`;
|
|
142
|
+
}
|
|
143
|
+
if (!rowDescription) {
|
|
144
|
+
return ` - ${rowTitle}`;
|
|
145
|
+
}
|
|
146
|
+
return ` - ${rowTitle}: ${rowDescription}`;
|
|
147
|
+
});
|
|
148
|
+
const rowsText = rowLines.join('\n');
|
|
149
|
+
const sectionTitle = (_a = section.title) === null || _a === void 0 ? void 0 : _a.trim();
|
|
150
|
+
if (sectionTitle) {
|
|
151
|
+
return `${sectionTitle}:\n${rowsText}`;
|
|
152
|
+
}
|
|
153
|
+
return rowsText;
|
|
154
|
+
});
|
|
155
|
+
parts.push(sectionBlocks.join('\n'));
|
|
156
|
+
}
|
|
157
|
+
return parts.join('\n\n');
|
|
158
|
+
}
|
|
159
|
+
static formatWhatsappCtaContent(cta) {
|
|
160
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
161
|
+
const hasStructuredData = (cta.headerType === WhatsappHeaderType.Text && !!((_a = cta.header) === null || _a === void 0 ? void 0 : _a.trim())) ||
|
|
162
|
+
((_b = cta.text) === null || _b === void 0 ? void 0 : _b.trim()) ||
|
|
163
|
+
((_c = cta.footer) === null || _c === void 0 ? void 0 : _c.trim()) ||
|
|
164
|
+
((_d = cta.displayText) === null || _d === void 0 ? void 0 : _d.trim()) ||
|
|
165
|
+
cta.url;
|
|
166
|
+
if (!hasStructuredData) {
|
|
167
|
+
return ((_e = cta.text) === null || _e === void 0 ? void 0 : _e.trim()) || '[WhatsApp CTA Button]';
|
|
168
|
+
}
|
|
169
|
+
const lines = [];
|
|
170
|
+
if (cta.headerType === WhatsappHeaderType.Text && ((_f = cta.header) === null || _f === void 0 ? void 0 : _f.trim())) {
|
|
171
|
+
lines.push(cta.header.trim());
|
|
172
|
+
}
|
|
173
|
+
if ((_g = cta.text) === null || _g === void 0 ? void 0 : _g.trim()) {
|
|
174
|
+
lines.push(cta.text.trim());
|
|
175
|
+
}
|
|
176
|
+
if ((_h = cta.footer) === null || _h === void 0 ? void 0 : _h.trim()) {
|
|
177
|
+
lines.push(cta.footer.trim());
|
|
178
|
+
}
|
|
179
|
+
const ctaLine = `[${cta.displayText || ''}]${cta.url ? ` (${cta.url})` : ''}`;
|
|
180
|
+
lines.push(ctaLine);
|
|
181
|
+
return lines.join('\n');
|
|
182
|
+
}
|
|
183
|
+
static formatWhatsappTemplateContent(template) {
|
|
184
|
+
const { name, language } = template.htWhatsappTemplate;
|
|
185
|
+
return `WhatsApp Template: ${name} (${language})`;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=ai-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-agent.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/utils/ai-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BotonicContext } from '@botonic/core';
|
|
2
|
+
export declare class FlowLocale {
|
|
3
|
+
private readonly botonicContext;
|
|
4
|
+
private readonly flowLocales;
|
|
5
|
+
private readonly defaultLocaleCode;
|
|
6
|
+
constructor(botonicContext: BotonicContext, flowLocales: string[], defaultLocaleCode: string);
|
|
7
|
+
resolve(): string;
|
|
8
|
+
private isLanguageDetectionEnabled;
|
|
9
|
+
/**
|
|
10
|
+
* Rules:
|
|
11
|
+
* - If user and system languages differ, user locale takes priority.
|
|
12
|
+
* - If both share the same language, the more specific locale wins.
|
|
13
|
+
* - If both have the same specificity, user locale wins.
|
|
14
|
+
*/
|
|
15
|
+
private getPriorityLocale;
|
|
16
|
+
private matchExactLocale;
|
|
17
|
+
private matchLanguage;
|
|
18
|
+
private getDefaultLocale;
|
|
19
|
+
private applyLocale;
|
|
20
|
+
private getLanguage;
|
|
21
|
+
private isSpecificLocale;
|
|
22
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export class FlowLocale {
|
|
2
|
+
constructor(botonicContext, flowLocales, defaultLocaleCode) {
|
|
3
|
+
this.botonicContext = botonicContext;
|
|
4
|
+
this.flowLocales = flowLocales;
|
|
5
|
+
this.defaultLocaleCode = defaultLocaleCode;
|
|
6
|
+
}
|
|
7
|
+
resolve() {
|
|
8
|
+
const priorityLocale = this.isLanguageDetectionEnabled()
|
|
9
|
+
? this.getPriorityLocale()
|
|
10
|
+
: this.botonicContext.session.user.systemLocale;
|
|
11
|
+
if (priorityLocale) {
|
|
12
|
+
const exactMatch = this.matchExactLocale(priorityLocale);
|
|
13
|
+
if (exactMatch) {
|
|
14
|
+
return this.applyLocale(exactMatch);
|
|
15
|
+
}
|
|
16
|
+
const languageMatch = this.matchLanguage(priorityLocale);
|
|
17
|
+
if (languageMatch) {
|
|
18
|
+
return this.applyLocale(languageMatch);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return this.applyLocale(this.getDefaultLocale());
|
|
22
|
+
}
|
|
23
|
+
isLanguageDetectionEnabled() {
|
|
24
|
+
return !!this.botonicContext.settings.languageDetectionEnabled;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Rules:
|
|
28
|
+
* - If user and system languages differ, user locale takes priority.
|
|
29
|
+
* - If both share the same language, the more specific locale wins.
|
|
30
|
+
* - If both have the same specificity, user locale wins.
|
|
31
|
+
*/
|
|
32
|
+
getPriorityLocale() {
|
|
33
|
+
const userLocale = this.botonicContext.session.user.locale;
|
|
34
|
+
const systemLocale = this.botonicContext.session.user.systemLocale;
|
|
35
|
+
if (!userLocale || !systemLocale) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
const userLanguage = this.getLanguage(userLocale);
|
|
39
|
+
const systemLanguage = this.getLanguage(systemLocale);
|
|
40
|
+
if (userLanguage !== systemLanguage) {
|
|
41
|
+
return userLocale;
|
|
42
|
+
}
|
|
43
|
+
const userIsSpecific = this.isSpecificLocale(userLocale);
|
|
44
|
+
const systemIsSpecific = this.isSpecificLocale(systemLocale);
|
|
45
|
+
if (userIsSpecific && !systemIsSpecific) {
|
|
46
|
+
return userLocale;
|
|
47
|
+
}
|
|
48
|
+
if (!userIsSpecific && systemIsSpecific) {
|
|
49
|
+
return systemLocale;
|
|
50
|
+
}
|
|
51
|
+
return userLocale;
|
|
52
|
+
}
|
|
53
|
+
matchExactLocale(locale) {
|
|
54
|
+
return this.flowLocales.includes(locale) ? locale : undefined;
|
|
55
|
+
}
|
|
56
|
+
matchLanguage(locale) {
|
|
57
|
+
const language = this.getLanguage(locale);
|
|
58
|
+
return this.flowLocales.includes(language) ? language : undefined;
|
|
59
|
+
}
|
|
60
|
+
getDefaultLocale() {
|
|
61
|
+
return this.defaultLocaleCode || 'en';
|
|
62
|
+
}
|
|
63
|
+
applyLocale(locale) {
|
|
64
|
+
this.botonicContext.session.user.systemLocale = locale;
|
|
65
|
+
this.botonicContext.updateBotSession({
|
|
66
|
+
user: {
|
|
67
|
+
systemLocale: locale,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// TODO: We need to update the webchat user.system_locale
|
|
71
|
+
return locale;
|
|
72
|
+
}
|
|
73
|
+
getLanguage(locale) {
|
|
74
|
+
return locale.split('-')[0];
|
|
75
|
+
}
|
|
76
|
+
isSpecificLocale(locale) {
|
|
77
|
+
return locale.includes('-');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=flow-locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-locale.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/utils/flow-locale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-flow-builder-plugin.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/plugin-flow-builder/src/lib/utils/get-flow-builder-plugin.ts"],"names":[],"mappings":"AAIA,MAAM,wBAAwB,GAAG,0BAA0B,CAAA;AAE3D,MAAM,UAAU,oBAAoB,CAClC,OAAwB;IAExB,MAAM,aAAa,GAAG,uEAAuE,CAAA;IAE7F,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,wBAAwB,CACxB,CAAA;IAExC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,iBAAiB,CAAA;AAC1B,CAAC"}
|