@botonic/plugin-flow-builder 0.27.5 → 0.27.7-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.
- package/lib/cjs/action/first-interaction.d.ts +3 -0
- package/lib/cjs/action/first-interaction.js +72 -0
- package/lib/cjs/action/first-interaction.js.map +1 -0
- package/lib/cjs/action/index.js +10 -16
- package/lib/cjs/action/index.js.map +1 -1
- package/lib/cjs/action/knowledge-bases.js +7 -16
- package/lib/cjs/action/knowledge-bases.js.map +1 -1
- package/lib/cjs/action/payload.d.ts +3 -0
- package/lib/cjs/action/payload.js +17 -0
- package/lib/cjs/action/payload.js.map +1 -0
- package/lib/cjs/index.js +1 -3
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/tracking.d.ts +0 -14
- package/lib/cjs/tracking.js +13 -14
- package/lib/cjs/tracking.js.map +1 -1
- package/lib/cjs/user-input/index.js +17 -5
- package/lib/cjs/user-input/index.js.map +1 -1
- package/lib/cjs/utils.d.ts +2 -1
- package/lib/cjs/utils.js +6 -1
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/action/first-interaction.d.ts +3 -0
- package/lib/esm/action/first-interaction.js +68 -0
- package/lib/esm/action/first-interaction.js.map +1 -0
- package/lib/esm/action/index.js +9 -15
- package/lib/esm/action/index.js.map +1 -1
- package/lib/esm/action/knowledge-bases.js +7 -16
- package/lib/esm/action/knowledge-bases.js.map +1 -1
- package/lib/esm/action/payload.d.ts +3 -0
- package/lib/esm/action/payload.js +13 -0
- package/lib/esm/action/payload.js.map +1 -0
- package/lib/esm/index.js +2 -4
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/tracking.d.ts +0 -14
- package/lib/esm/tracking.js +13 -13
- package/lib/esm/tracking.js.map +1 -1
- package/lib/esm/user-input/index.js +17 -5
- package/lib/esm/user-input/index.js.map +1 -1
- package/lib/esm/utils.d.ts +2 -1
- package/lib/esm/utils.js +4 -0
- package/lib/esm/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/action/first-interaction.ts +111 -0
- package/src/action/index.tsx +9 -22
- package/src/action/knowledge-bases.ts +9 -16
- package/src/action/payload.ts +20 -0
- package/src/index.ts +2 -3
- package/src/tracking.ts +13 -13
- package/src/user-input/index.ts +21 -6
- package/src/utils.ts +5 -1
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { INPUT } from '@botonic/core';
|
|
3
2
|
import { FlowKnowledgeBase } from '../content-fields';
|
|
4
3
|
import { EventAction, KnowledgebaseFailReason, trackEvent } from '../tracking';
|
|
5
|
-
import {
|
|
4
|
+
import { inputHasTextData } from '../utils';
|
|
6
5
|
export function getContentsByKnowledgeBase({ cmsApi, flowBuilderPlugin, request, resolvedLocale, }) {
|
|
7
6
|
return __awaiter(this, void 0, void 0, function* () {
|
|
8
7
|
const startNodeKnowledeBaseFlow = cmsApi.getStartNodeKnowledeBaseFlow();
|
|
9
8
|
if (!startNodeKnowledeBaseFlow) {
|
|
10
|
-
return
|
|
11
|
-
cmsApi,
|
|
12
|
-
flowBuilderPlugin,
|
|
13
|
-
request,
|
|
14
|
-
resolvedLocale,
|
|
15
|
-
});
|
|
9
|
+
return [];
|
|
16
10
|
}
|
|
17
11
|
const contents = yield flowBuilderPlugin.getContentsByNode(startNodeKnowledeBaseFlow, resolvedLocale);
|
|
18
12
|
const knowledgeBaseContent = contents.find(content => content instanceof FlowKnowledgeBase);
|
|
@@ -20,19 +14,13 @@ export function getContentsByKnowledgeBase({ cmsApi, flowBuilderPlugin, request,
|
|
|
20
14
|
return contents;
|
|
21
15
|
}
|
|
22
16
|
if (flowBuilderPlugin.getKnowledgeBaseResponse &&
|
|
23
|
-
request.input
|
|
24
|
-
request.input.type === INPUT.TEXT) {
|
|
17
|
+
inputHasTextData(request.input)) {
|
|
25
18
|
const contentsWithKnowledgeResponse = yield getContentsWithKnowledgeResponse(flowBuilderPlugin.getKnowledgeBaseResponse, request, knowledgeBaseContent, contents);
|
|
26
19
|
if (contentsWithKnowledgeResponse) {
|
|
27
20
|
return contentsWithKnowledgeResponse;
|
|
28
21
|
}
|
|
29
22
|
}
|
|
30
|
-
return
|
|
31
|
-
cmsApi,
|
|
32
|
-
flowBuilderPlugin,
|
|
33
|
-
request,
|
|
34
|
-
resolvedLocale,
|
|
35
|
-
});
|
|
23
|
+
return [];
|
|
36
24
|
});
|
|
37
25
|
}
|
|
38
26
|
function getContentsWithKnowledgeResponse(getKnowledgeBaseResponse, request, knowledgeBaseContent, contents) {
|
|
@@ -43,6 +31,9 @@ function getContentsWithKnowledgeResponse(getKnowledgeBaseResponse, request, kno
|
|
|
43
31
|
!knowledgeBaseResponse.isFaithuful) {
|
|
44
32
|
return undefined;
|
|
45
33
|
}
|
|
34
|
+
console.log('KnowledgeBaseResponse:', knowledgeBaseResponse.answer, {
|
|
35
|
+
knowledgeBaseResponse,
|
|
36
|
+
});
|
|
46
37
|
return updateContentsWithAnswer(contents, knowledgeBaseResponse.answer);
|
|
47
38
|
});
|
|
48
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-bases.js","sourceRoot":"","sources":["../../../src/action/knowledge-bases.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"knowledge-bases.js","sourceRoot":"","sources":["../../../src/action/knowledge-bases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
export function getContentsByPayload({ cmsApi, flowBuilderPlugin, request, resolvedLocale, }) {
|
|
3
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4
|
+
const targetNode = request.input.payload
|
|
5
|
+
? cmsApi.getNodeById(request.input.payload)
|
|
6
|
+
: undefined;
|
|
7
|
+
if (targetNode) {
|
|
8
|
+
return yield flowBuilderPlugin.getContentsByNode(targetNode, resolvedLocale);
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/action/payload.ts"],"names":[],"mappings":";AAIA,MAAM,UAAgB,oBAAoB,CAAC,EACzC,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,cAAc,GACK;;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO;YACtC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAoB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9D,CAAC,CAAC,SAAS,CAAA;QAEb,IAAI,UAAU,EAAE;YACd,OAAO,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;SAC7E;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CAAA"}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { INPUT } from '@botonic/core';
|
|
3
2
|
import { v4 as uuid } from 'uuid';
|
|
4
3
|
import { FlowBuilderApi } from './api';
|
|
5
4
|
import { BOT_ACTION_PAYLOAD_PREFIX, FLOW_BUILDER_API_URL_PROD, SEPARATOR, SOURCE_INFO_SEPARATOR, } from './constants';
|
|
@@ -8,7 +7,7 @@ import { HtNodeWithContentType, } from './content-fields/hubtype-fields';
|
|
|
8
7
|
import { DEFAULT_FUNCTIONS } from './functions';
|
|
9
8
|
import { FlowBuilderJSONVersion, } from './types';
|
|
10
9
|
import { getNodeByUserInput } from './user-input';
|
|
11
|
-
import { resolveGetAccessToken } from './utils';
|
|
10
|
+
import { inputHasTextData, resolveGetAccessToken } from './utils';
|
|
12
11
|
export default class BotonicPluginFlowBuilder {
|
|
13
12
|
constructor(options) {
|
|
14
13
|
this.options = options;
|
|
@@ -33,8 +32,7 @@ export default class BotonicPluginFlowBuilder {
|
|
|
33
32
|
accessToken: this.getAccessToken(request.session),
|
|
34
33
|
request: this.currentRequest,
|
|
35
34
|
});
|
|
36
|
-
const checkUserTextInput = request.input
|
|
37
|
-
request.input.type === INPUT.TEXT &&
|
|
35
|
+
const checkUserTextInput = inputHasTextData(request.input) &&
|
|
38
36
|
!request.input.payload &&
|
|
39
37
|
!request.session.is_first_interaction;
|
|
40
38
|
if (checkUserTextInput) {
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/tracking.d.ts
CHANGED
|
@@ -14,17 +14,3 @@ export declare enum KnowledgebaseFailReason {
|
|
|
14
14
|
}
|
|
15
15
|
export declare function trackEvent(request: ActionRequest, eventAction: EventAction, args?: Record<string, any>): Promise<void>;
|
|
16
16
|
export declare function trackFlowContent(request: ActionRequest, contents: FlowContent[]): Promise<void>;
|
|
17
|
-
export declare function getContentEventArgs(request: ActionRequest, contentInfo: {
|
|
18
|
-
code: string;
|
|
19
|
-
flowId: string;
|
|
20
|
-
flowName: string;
|
|
21
|
-
id: string;
|
|
22
|
-
isMeaningful: boolean;
|
|
23
|
-
}): {
|
|
24
|
-
flowThreadId: string;
|
|
25
|
-
flowId: string;
|
|
26
|
-
flowName: string;
|
|
27
|
-
flowNodeId: string;
|
|
28
|
-
flowNodeContentId: string;
|
|
29
|
-
flowNodeIsMeaningful: boolean;
|
|
30
|
-
};
|
package/lib/esm/tracking.js
CHANGED
|
@@ -29,26 +29,26 @@ export function trackFlowContent(request, contents) {
|
|
|
29
29
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
30
|
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins);
|
|
31
31
|
const cmsApi = flowBuilderPlugin.cmsApi;
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
for (const content of contents) {
|
|
33
|
+
const nodeContent = cmsApi.getNodeById(content.id);
|
|
34
|
+
const eventArgs = getContentEventArgs(request, {
|
|
35
|
+
code: nodeContent.code,
|
|
36
|
+
flowId: nodeContent.flow_id,
|
|
37
|
+
flowName: flowBuilderPlugin.getFlowName(nodeContent.flow_id),
|
|
38
|
+
id: nodeContent.id,
|
|
39
|
+
isMeaningful: (_a = nodeContent.is_meaningful) !== null && _a !== void 0 ? _a : false,
|
|
40
|
+
});
|
|
41
|
+
yield trackEvent(request, EventAction.FlowNode, eventArgs);
|
|
42
|
+
}
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
+
function getContentEventArgs(request, contentInfo) {
|
|
45
46
|
var _a;
|
|
46
|
-
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins);
|
|
47
47
|
const flowThreadId = (_a = request.session.flow_thread_id) !== null && _a !== void 0 ? _a : uuid();
|
|
48
48
|
return {
|
|
49
49
|
flowThreadId,
|
|
50
50
|
flowId: contentInfo.flowId,
|
|
51
|
-
flowName:
|
|
51
|
+
flowName: contentInfo.flowName,
|
|
52
52
|
flowNodeId: contentInfo.id,
|
|
53
53
|
flowNodeContentId: contentInfo.code,
|
|
54
54
|
flowNodeIsMeaningful: contentInfo.isMeaningful,
|
package/lib/esm/tracking.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/tracking.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AAIjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,qCAAsB,CAAA;IACtB,sCAAuB,CAAA;IACvB,oCAAqB,CAAA;IACrB,+CAAgC,CAAA;IAChC,8CAA+B,CAAA;IAC/B,oCAAqB,CAAA;AACvB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAED,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,uDAA4B,CAAA;IAC5B,0DAA+B,CAAA;AACjC,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAED,MAAM,UAAgB,UAAU,CAC9B,OAAsB,EACtB,WAAwB,EACxB,IAA0B;;QAE1B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,IAAI,iBAAiB,CAAC,UAAU,EAAE;YAChC,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;SAC/D;QACD,OAAM;IACR,CAAC;CAAA;AAED,MAAM,UAAgB,gBAAgB,CACpC,OAAsB,EACtB,QAAuB;;;QAEvB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAA;QACvC,
|
|
1
|
+
{"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/tracking.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AAIjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,qCAAsB,CAAA;IACtB,sCAAuB,CAAA;IACvB,oCAAqB,CAAA;IACrB,+CAAgC,CAAA;IAChC,8CAA+B,CAAA;IAC/B,oCAAqB,CAAA;AACvB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAED,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,uDAA4B,CAAA;IAC5B,0DAA+B,CAAA;AACjC,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAED,MAAM,UAAgB,UAAU,CAC9B,OAAsB,EACtB,WAAwB,EACxB,IAA0B;;QAE1B,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,IAAI,iBAAiB,CAAC,UAAU,EAAE;YAChC,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;SAC/D;QACD,OAAM;IACR,CAAC;CAAA;AAED,MAAM,UAAgB,gBAAgB,CACpC,OAAsB,EACtB,QAAuB;;;QAEvB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAA;QACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAoB,OAAO,CAAC,EAAE,CAAC,CAAA;YACrE,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE;gBAC7C,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM,EAAE,WAAW,CAAC,OAAO;gBAC3B,QAAQ,EAAE,iBAAiB,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC5D,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,YAAY,EAAE,MAAA,WAAW,CAAC,aAAa,mCAAI,KAAK;aACjD,CAAC,CAAA;YACF,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;SAC3D;;CACF;AAED,SAAS,mBAAmB,CAC1B,OAAsB,EACtB,WAMC;;IAED,MAAM,YAAY,GAAG,MAAA,OAAO,CAAC,OAAO,CAAC,cAAc,mCAAI,IAAI,EAAE,CAAA;IAC7D,OAAO;QACL,YAAY;QACZ,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,UAAU,EAAE,WAAW,CAAC,EAAE;QAC1B,iBAAiB,EAAE,WAAW,CAAC,IAAI;QACnC,oBAAoB,EAAE,WAAW,CAAC,YAAY;KAC/C,CAAA;AACH,CAAC"}
|
|
@@ -1,26 +1,38 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { inputHasTextData } from '../utils';
|
|
3
3
|
import { getIntentNodeByInput } from './intent';
|
|
4
4
|
import { KeywordMatcher } from './keyword';
|
|
5
5
|
import { SmartIntentsApi } from './smart-intent';
|
|
6
6
|
export function getNodeByUserInput(cmsApi, locale, request, smartIntentsConfig) {
|
|
7
7
|
return __awaiter(this, void 0, void 0, function* () {
|
|
8
|
-
if (request.input
|
|
8
|
+
if (inputHasTextData(request.input)) {
|
|
9
9
|
const keywordMatcher = new KeywordMatcher({
|
|
10
10
|
cmsApi,
|
|
11
11
|
locale,
|
|
12
12
|
request,
|
|
13
13
|
});
|
|
14
14
|
const keywordNode = yield keywordMatcher.getNodeByInput(request.input.data);
|
|
15
|
-
if (keywordNode)
|
|
15
|
+
if (keywordNode) {
|
|
16
|
+
console.log('Keyword node found:', keywordNode.content.title, {
|
|
17
|
+
keywordNode,
|
|
18
|
+
});
|
|
16
19
|
return keywordNode;
|
|
20
|
+
}
|
|
17
21
|
const smartIntentsApi = new SmartIntentsApi(cmsApi, request, smartIntentsConfig);
|
|
18
22
|
const smartIntentNode = yield smartIntentsApi.getNodeByInput();
|
|
19
|
-
if (smartIntentNode)
|
|
23
|
+
if (smartIntentNode) {
|
|
24
|
+
console.log('Smart intent node found:', smartIntentNode.content.title, {
|
|
25
|
+
smartIntentNode,
|
|
26
|
+
});
|
|
20
27
|
return smartIntentNode;
|
|
28
|
+
}
|
|
21
29
|
const intentNode = yield getIntentNodeByInput(cmsApi, locale, request);
|
|
22
|
-
if (intentNode)
|
|
30
|
+
if (intentNode) {
|
|
31
|
+
console.log('Intent node found:', intentNode.content.title, {
|
|
32
|
+
intentNode,
|
|
33
|
+
});
|
|
23
34
|
return intentNode;
|
|
35
|
+
}
|
|
24
36
|
}
|
|
25
37
|
return undefined;
|
|
26
38
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/user-input/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/user-input/index.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,eAAe,EAA+B,MAAM,gBAAgB,CAAA;AAE7E,MAAM,UAAgB,kBAAkB,CACtC,MAAsB,EACtB,MAAc,EACd,OAAsB,EACtB,kBAA+C;;QAE/C,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;gBACxC,MAAM;gBACN,MAAM;gBACN,OAAO;aACR,CAAC,CAAA;YACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,IAAK,CAAC,CAAA;YAC5E,IAAI,WAAW,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;oBAC5D,WAAW;iBACZ,CAAC,CAAA;gBACF,OAAO,WAAW,CAAA;aACnB;YACD,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,MAAM,EACN,OAAO,EACP,kBAAkB,CACnB,CAAA;YACD,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,CAAA;YAC9D,IAAI,eAAe,EAAE;gBACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE;oBACrE,eAAe;iBAChB,CAAC,CAAA;gBACF,OAAO,eAAe,CAAA;aACvB;YAED,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;YACtE,IAAI,UAAU,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE;oBAC1D,UAAU;iBACX,CAAC,CAAA;gBACF,OAAO,UAAU,CAAA;aAClB;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;CAAA"}
|
package/lib/esm/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Session } from '@botonic/core';
|
|
1
|
+
import { Input, Session } from '@botonic/core';
|
|
2
2
|
import { ActionRequest } from '@botonic/react';
|
|
3
3
|
import { BotonicPluginFlowBuilderOptions } from './types';
|
|
4
4
|
export declare function resolveGetAccessToken(options: BotonicPluginFlowBuilderOptions): (session: Session) => string;
|
|
5
5
|
export declare function getValueFromKeyPath(request: ActionRequest, keyPath: string): any;
|
|
6
|
+
export declare function inputHasTextData(input: Input): boolean;
|
package/lib/esm/utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { INPUT } from '@botonic/core';
|
|
1
2
|
import { ProcessEnvNodeEnvs } from './types';
|
|
2
3
|
function getAccessTokenFromSession(session) {
|
|
3
4
|
if (!session._access_token) {
|
|
@@ -31,4 +32,7 @@ function resolveObjectKey(object, key) {
|
|
|
31
32
|
}
|
|
32
33
|
return undefined;
|
|
33
34
|
}
|
|
35
|
+
export function inputHasTextData(input) {
|
|
36
|
+
return input.data !== undefined && input.type === INPUT.TEXT;
|
|
37
|
+
}
|
|
34
38
|
//# sourceMappingURL=utils.js.map
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,eAAe,CAAA;AAGrD,OAAO,EAAmC,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE7E,SAAS,yBAAyB,CAAC,OAAgB;IACjD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IACD,OAAO,OAAO,CAAC,aAAa,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAwC;IAExC,QAAQ,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC5B,KAAK,kBAAkB,CAAC,UAAU;YAChC,OAAO,yBAAyB,CAAA;QAClC,KAAK,kBAAkB,CAAC,WAAW;YACjC,OAAO,OAAO,CAAC,cAAc,CAAA;QAC/B;YACE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;KAChE;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAsB,EACtB,OAAe;IAEf,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAChE,OAAO,OAAO;aACX,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;KACnE;IAED,OAAO,OAAO;SACX,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CACL,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAChC,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAW,EAAE,GAAW;IAChD,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;QACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;KACnB;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAA;AAC9D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/plugin-flow-builder",
|
|
3
|
-
"version": "0.27.
|
|
3
|
+
"version": "0.27.7-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.27.
|
|
17
|
+
"@botonic/react": "^0.27.2",
|
|
18
18
|
"axios": "^1.6.8",
|
|
19
19
|
"uuid": "^9.0.1"
|
|
20
20
|
},
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { FlowBuilderApi } from '../api'
|
|
2
|
+
import { BOT_ACTION_PAYLOAD_PREFIX, MAIN_FLOW_NAME } from '../constants'
|
|
3
|
+
import { FlowContent } from '../content-fields'
|
|
4
|
+
import BotonicPluginFlowBuilder from '../index'
|
|
5
|
+
import { getNodeByUserInput } from '../user-input'
|
|
6
|
+
import { inputHasTextData } from '../utils'
|
|
7
|
+
import { FlowBuilderContext } from './index'
|
|
8
|
+
import { getContentsByKnowledgeBase } from './knowledge-bases'
|
|
9
|
+
import { getContentsByPayload } from './payload'
|
|
10
|
+
|
|
11
|
+
export async function getContentsByFirstInteraction({
|
|
12
|
+
cmsApi,
|
|
13
|
+
flowBuilderPlugin,
|
|
14
|
+
request,
|
|
15
|
+
resolvedLocale,
|
|
16
|
+
}: FlowBuilderContext): Promise<FlowContent[]> {
|
|
17
|
+
const firstInteractionContents =
|
|
18
|
+
await flowBuilderPlugin.getStartContents(resolvedLocale)
|
|
19
|
+
|
|
20
|
+
if (inputHasTextData(request.input)) {
|
|
21
|
+
const contentsByUserInput = await getContentsByUserInput({
|
|
22
|
+
cmsApi,
|
|
23
|
+
flowBuilderPlugin,
|
|
24
|
+
request,
|
|
25
|
+
resolvedLocale,
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
return [...firstInteractionContents, ...contentsByUserInput]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return firstInteractionContents
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function getContentsByUserInput({
|
|
35
|
+
cmsApi,
|
|
36
|
+
flowBuilderPlugin,
|
|
37
|
+
request,
|
|
38
|
+
resolvedLocale,
|
|
39
|
+
}: FlowBuilderContext): Promise<FlowContent[]> {
|
|
40
|
+
const nodeByUserInput = await getNodeByUserInput(
|
|
41
|
+
cmsApi,
|
|
42
|
+
resolvedLocale,
|
|
43
|
+
request,
|
|
44
|
+
flowBuilderPlugin.smartIntentsConfig
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
request.input.payload = cmsApi.getPayload(nodeByUserInput?.target)
|
|
48
|
+
const conversationStartId = getConversationStartId(cmsApi)
|
|
49
|
+
|
|
50
|
+
if (request.input.payload === conversationStartId) {
|
|
51
|
+
return []
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (request.input.payload?.startsWith(BOT_ACTION_PAYLOAD_PREFIX)) {
|
|
55
|
+
request.input.payload = flowBuilderPlugin.replaceBotActionPayload(
|
|
56
|
+
request.input.payload
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const contentsByKeywordsOrIntents = await getContentsByPayload({
|
|
61
|
+
cmsApi,
|
|
62
|
+
flowBuilderPlugin,
|
|
63
|
+
request,
|
|
64
|
+
resolvedLocale,
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
const hasRepeatedContent = await checkRepetedContents(
|
|
68
|
+
flowBuilderPlugin,
|
|
69
|
+
resolvedLocale,
|
|
70
|
+
contentsByKeywordsOrIntents
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
if (hasRepeatedContent) {
|
|
74
|
+
return []
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (contentsByKeywordsOrIntents.length > 0) {
|
|
78
|
+
return contentsByKeywordsOrIntents
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return await getContentsByKnowledgeBase({
|
|
82
|
+
cmsApi,
|
|
83
|
+
flowBuilderPlugin,
|
|
84
|
+
request,
|
|
85
|
+
resolvedLocale,
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function getConversationStartId(cmsApi: FlowBuilderApi) {
|
|
90
|
+
const conversationStartId = cmsApi.flow.flows.find(
|
|
91
|
+
flow => flow.name === MAIN_FLOW_NAME
|
|
92
|
+
)?.start_node_id
|
|
93
|
+
|
|
94
|
+
return conversationStartId
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async function checkRepetedContents(
|
|
98
|
+
flowBuilderPlugin: BotonicPluginFlowBuilder,
|
|
99
|
+
resolvedLocale: string,
|
|
100
|
+
contentsByKeywordsOrIntents: FlowContent[]
|
|
101
|
+
) {
|
|
102
|
+
const startContents = await flowBuilderPlugin.getStartContents(resolvedLocale)
|
|
103
|
+
const contentIds = new Set(
|
|
104
|
+
contentsByKeywordsOrIntents.map(content => content.id)
|
|
105
|
+
)
|
|
106
|
+
const hasRepeatedContent = startContents.some(content =>
|
|
107
|
+
contentIds.has(content.id)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return hasRepeatedContent
|
|
111
|
+
}
|
package/src/action/index.tsx
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { INPUT } from '@botonic/core'
|
|
2
1
|
import { ActionRequest, Multichannel, RequestContext } from '@botonic/react'
|
|
3
2
|
import React from 'react'
|
|
4
3
|
|
|
5
4
|
import { FlowBuilderApi } from '../api'
|
|
6
5
|
import { FlowContent, FlowHandoff } from '../content-fields'
|
|
7
|
-
import { HtNodeWithContent } from '../content-fields/hubtype-fields'
|
|
8
6
|
import { getFlowBuilderPlugin } from '../helpers'
|
|
9
7
|
import BotonicPluginFlowBuilder from '../index'
|
|
10
8
|
import { trackFlowContent } from '../tracking'
|
|
9
|
+
import { inputHasTextData } from '../utils'
|
|
11
10
|
import { getContentsByFallback } from './fallback'
|
|
11
|
+
import { getContentsByFirstInteraction } from './first-interaction'
|
|
12
12
|
import { getContentsByKnowledgeBase } from './knowledge-bases'
|
|
13
|
+
import { getContentsByPayload } from './payload'
|
|
13
14
|
|
|
14
15
|
export type FlowBuilderActionProps = {
|
|
15
16
|
contents: FlowContent[]
|
|
@@ -66,15 +67,18 @@ async function getContents(request: ActionRequest): Promise<FlowContent[]> {
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
if (request.session.is_first_interaction) {
|
|
69
|
-
return await
|
|
70
|
+
return await getContentsByFirstInteraction(context)
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
if (request.input.payload) {
|
|
73
74
|
return await getContentsByPayload(context)
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
if (request.input
|
|
77
|
-
|
|
77
|
+
if (inputHasTextData(request.input)) {
|
|
78
|
+
const knowledgeBaseContents = await getContentsByKnowledgeBase(context)
|
|
79
|
+
if (knowledgeBaseContents.length > 0) {
|
|
80
|
+
return knowledgeBaseContents
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
return await getContentsByFallback(context)
|
|
@@ -86,20 +90,3 @@ export interface FlowBuilderContext {
|
|
|
86
90
|
request: ActionRequest
|
|
87
91
|
resolvedLocale: string
|
|
88
92
|
}
|
|
89
|
-
|
|
90
|
-
async function getContentsByPayload({
|
|
91
|
-
cmsApi,
|
|
92
|
-
flowBuilderPlugin,
|
|
93
|
-
request,
|
|
94
|
-
resolvedLocale,
|
|
95
|
-
}: FlowBuilderContext): Promise<FlowContent[]> {
|
|
96
|
-
const targetNode = request.input.payload
|
|
97
|
-
? cmsApi.getNodeById<HtNodeWithContent>(request.input.payload)
|
|
98
|
-
: undefined
|
|
99
|
-
|
|
100
|
-
if (targetNode) {
|
|
101
|
-
return await flowBuilderPlugin.getContentsByNode(targetNode, resolvedLocale)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return []
|
|
105
|
-
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { INPUT } from '@botonic/core'
|
|
2
1
|
import { ActionRequest } from '@botonic/react'
|
|
3
2
|
|
|
4
3
|
import { FlowContent, FlowKnowledgeBase } from '../content-fields'
|
|
5
4
|
import { EventAction, KnowledgebaseFailReason, trackEvent } from '../tracking'
|
|
6
5
|
import { KnowledgeBaseFunction, KnowledgeBaseResponse } from '../types'
|
|
7
|
-
import {
|
|
6
|
+
import { inputHasTextData } from '../utils'
|
|
8
7
|
import { FlowBuilderContext } from './index'
|
|
9
8
|
|
|
10
9
|
export async function getContentsByKnowledgeBase({
|
|
@@ -16,12 +15,7 @@ export async function getContentsByKnowledgeBase({
|
|
|
16
15
|
const startNodeKnowledeBaseFlow = cmsApi.getStartNodeKnowledeBaseFlow()
|
|
17
16
|
|
|
18
17
|
if (!startNodeKnowledeBaseFlow) {
|
|
19
|
-
return
|
|
20
|
-
cmsApi,
|
|
21
|
-
flowBuilderPlugin,
|
|
22
|
-
request,
|
|
23
|
-
resolvedLocale,
|
|
24
|
-
})
|
|
18
|
+
return []
|
|
25
19
|
}
|
|
26
20
|
|
|
27
21
|
const contents = await flowBuilderPlugin.getContentsByNode(
|
|
@@ -39,8 +33,7 @@ export async function getContentsByKnowledgeBase({
|
|
|
39
33
|
|
|
40
34
|
if (
|
|
41
35
|
flowBuilderPlugin.getKnowledgeBaseResponse &&
|
|
42
|
-
request.input
|
|
43
|
-
request.input.type === INPUT.TEXT
|
|
36
|
+
inputHasTextData(request.input)
|
|
44
37
|
) {
|
|
45
38
|
const contentsWithKnowledgeResponse =
|
|
46
39
|
await getContentsWithKnowledgeResponse(
|
|
@@ -55,12 +48,7 @@ export async function getContentsByKnowledgeBase({
|
|
|
55
48
|
}
|
|
56
49
|
}
|
|
57
50
|
|
|
58
|
-
return
|
|
59
|
-
cmsApi,
|
|
60
|
-
flowBuilderPlugin,
|
|
61
|
-
request,
|
|
62
|
-
resolvedLocale,
|
|
63
|
-
})
|
|
51
|
+
return []
|
|
64
52
|
}
|
|
65
53
|
|
|
66
54
|
async function getContentsWithKnowledgeResponse(
|
|
@@ -82,6 +70,9 @@ async function getContentsWithKnowledgeResponse(
|
|
|
82
70
|
) {
|
|
83
71
|
return undefined
|
|
84
72
|
}
|
|
73
|
+
console.log('KnowledgeBaseResponse:', knowledgeBaseResponse.answer, {
|
|
74
|
+
knowledgeBaseResponse,
|
|
75
|
+
})
|
|
85
76
|
|
|
86
77
|
return updateContentsWithAnswer(contents, knowledgeBaseResponse.answer)
|
|
87
78
|
}
|
|
@@ -113,9 +104,11 @@ async function trackKnowledgeBase(
|
|
|
113
104
|
const knowledgebaseMessageId = request.input.message_id
|
|
114
105
|
|
|
115
106
|
let knowledgebaseFailReason: KnowledgebaseFailReason | undefined
|
|
107
|
+
|
|
116
108
|
if (!response.isFaithuful) {
|
|
117
109
|
knowledgebaseFailReason = KnowledgebaseFailReason.Hallucination
|
|
118
110
|
}
|
|
111
|
+
|
|
119
112
|
if (!response.hasKnowledge) {
|
|
120
113
|
knowledgebaseFailReason = KnowledgebaseFailReason.NoKnowledge
|
|
121
114
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FlowContent } from '../content-fields'
|
|
2
|
+
import { HtNodeWithContent } from '../content-fields/hubtype-fields'
|
|
3
|
+
import { FlowBuilderContext } from './index'
|
|
4
|
+
|
|
5
|
+
export async function getContentsByPayload({
|
|
6
|
+
cmsApi,
|
|
7
|
+
flowBuilderPlugin,
|
|
8
|
+
request,
|
|
9
|
+
resolvedLocale,
|
|
10
|
+
}: FlowBuilderContext): Promise<FlowContent[]> {
|
|
11
|
+
const targetNode = request.input.payload
|
|
12
|
+
? cmsApi.getNodeById<HtNodeWithContent>(request.input.payload)
|
|
13
|
+
: undefined
|
|
14
|
+
|
|
15
|
+
if (targetNode) {
|
|
16
|
+
return await flowBuilderPlugin.getContentsByNode(targetNode, resolvedLocale)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return []
|
|
20
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
} from './types'
|
|
41
41
|
import { getNodeByUserInput } from './user-input'
|
|
42
42
|
import { SmartIntentsInferenceConfig } from './user-input/smart-intent'
|
|
43
|
-
import { resolveGetAccessToken } from './utils'
|
|
43
|
+
import { inputHasTextData, resolveGetAccessToken } from './utils'
|
|
44
44
|
export default class BotonicPluginFlowBuilder implements Plugin {
|
|
45
45
|
public cmsApi: FlowBuilderApi
|
|
46
46
|
private flowUrl: string
|
|
@@ -80,8 +80,7 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
80
80
|
})
|
|
81
81
|
|
|
82
82
|
const checkUserTextInput =
|
|
83
|
-
request.input
|
|
84
|
-
request.input.type === INPUT.TEXT &&
|
|
83
|
+
inputHasTextData(request.input) &&
|
|
85
84
|
!request.input.payload &&
|
|
86
85
|
!request.session.is_first_interaction
|
|
87
86
|
|