@botonic/plugin-flow-builder
Version:
Botonic plugin for **Hubtype Flow Builder**: run and bridge flow-driven logic from bots on the **current** line.
63 lines • 3.38 kB
JavaScript
import { __awaiter, __rest } from "tslib";
import { EventAction } from '@botonic/shared';
import { FlowCaptureUserInput } from '../content-fields';
import { HtAiValidationType, } from '../content-fields/hubtype-fields';
import { CaptureUserInputClient } from '../services/capture-user-input-client';
import { getCommonFlowContentEventArgsForContentId, trackEvent, } from '../tracking';
import { inputHasTextOrTranscript } from '../utils';
export class CaptureUserInputApi {
constructor(cmsApi, botonicContext, textOrTranscript) {
this.cmsApi = cmsApi;
this.botonicContext = botonicContext;
this.textOrTranscript = textOrTranscript;
}
getNextNodeId() {
return __awaiter(this, void 0, void 0, function* () {
if (inputHasTextOrTranscript(this.botonicContext.input) &&
this.cmsApi.shouldCaptureUserInput()) {
const captureUserInputNode = this.cmsApi.getCaptureUserInputNode();
if (!captureUserInputNode || !this.textOrTranscript) {
return undefined;
}
const captureUserInput = FlowCaptureUserInput.fromHubtypeCMS(captureUserInputNode);
if (captureUserInput.aiValidationType === HtAiValidationType.NONE) {
yield this.cmsApi.setUserExtraDataVariable(captureUserInputNode.content.field_name, this.textOrTranscript);
yield this.trackUserInputCapture(captureUserInputNode, true);
return captureUserInput.captureSuccessId;
}
const client = new CaptureUserInputClient(this.botonicContext);
const aiCaptureResponse = yield client.getCaptureUserInputResponse(captureUserInputNode, this.textOrTranscript);
if (!aiCaptureResponse.success) {
yield this.trackUserInputCapture(captureUserInputNode, false);
return captureUserInput.captureFailId;
}
yield this.cmsApi.setUserExtraDataVariable(captureUserInputNode.content.field_name, aiCaptureResponse.value);
yield this.trackUserInputCapture(captureUserInputNode, true);
return captureUserInput.captureSuccessId;
}
return undefined;
});
}
trackUserInputCapture(captureUserInputNode, captureSuccess) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const { flowThreadId, flowId, flowName, flowNodeId, flowNodeContentId } = yield getCommonFlowContentEventArgsForContentId(this.botonicContext, captureUserInputNode.id);
const event = {
action: EventAction.CaptureUserInput,
flowThreadId,
flowId,
flowName,
flowNodeId,
flowNodeContentId,
flowNodeIsMeaningful: false,
fieldName: captureUserInputNode.content.field_name,
userInput: this.textOrTranscript,
captureSuccess,
messageId: (_a = this.botonicContext.input.dbId) !== null && _a !== void 0 ? _a : '',
};
const { action } = event, eventArgs = __rest(event, ["action"]);
yield trackEvent(this.botonicContext, action, eventArgs);
});
}
}
//# sourceMappingURL=capture-user-input.js.map