@webex/contact-center 3.12.0-next.12 → 3.12.0-next.121
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/.sdd/manifest.json +884 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +51 -0
- package/ai-docs/GETTING_STARTED.md +168 -0
- package/ai-docs/GLOSSARY.md +43 -0
- package/ai-docs/README.md +138 -0
- package/ai-docs/REVIEW_CHECKLIST.md +41 -0
- package/ai-docs/RULES.md +444 -0
- package/ai-docs/SECURITY.md +52 -0
- package/ai-docs/SERVICE_STATE.md +48 -0
- package/ai-docs/SPEC_INDEX.md +65 -0
- package/ai-docs/adr/0001-spec-source-policy.md +55 -0
- package/ai-docs/adr/README.md +8 -0
- package/ai-docs/adr/_adr-template.md +31 -0
- package/ai-docs/contact-center-spec.md +359 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
- package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
- package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +808 -40
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +27 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsManager.js +16 -0
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +205 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +43 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +18 -15
- package/dist/services/AddressBook.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +202 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/ApiAiAssistant.js +153 -8
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/EntryPoint.js +46 -68
- package/dist/services/EntryPoint.js.map +1 -1
- package/dist/services/Queue.js +27 -22
- package/dist/services/Queue.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/WebexCrossClientService.js +222 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +108 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +6 -3
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +33 -8
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/types.js +53 -9
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +107 -32
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/WebexRequest.js +6 -2
- package/dist/services/core/WebexRequest.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +28 -14
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +754 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +49 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1053 -520
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +211 -27
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/WebexCallingUtils.js +70 -0
- package/dist/services/task/WebexCallingUtils.js.map +1 -0
- package/dist/services/task/constants.js +12 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +29 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +954 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +572 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +379 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +228 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1447 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +152 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +122 -0
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
- package/dist/services/wxAppTelephonyUtils.js +19 -0
- package/dist/services/wxAppTelephonyUtils.js.map +1 -0
- package/dist/types/cc.d.ts +172 -5
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +25 -1
- package/dist/types/index.d.ts +24 -7
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +38 -1
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/ApiAiAssistant.d.ts +22 -4
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebexCrossClientService.d.ts +32 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/config/constants.d.ts +29 -5
- package/dist/types/services/config/types.d.ts +184 -10
- package/dist/types/services/core/Err.d.ts +6 -0
- package/dist/types/services/core/Utils.d.ts +33 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/types.d.ts +2 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +175 -0
- package/dist/types/services/task/TaskFactory.d.ts +13 -0
- package/dist/types/services/task/TaskUtils.d.ts +48 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +10 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1356 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +103 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +277 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +680 -66
- package/dist/types/services/task/voice/Voice.d.ts +227 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +149 -8
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +125 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +19 -5
- package/dist/utils/PageCache.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +986 -42
- package/src/config.ts +13 -0
- package/src/constants.ts +25 -1
- package/src/index.ts +25 -5
- package/src/metrics/MetricsManager.ts +16 -0
- package/src/metrics/ai-docs/AGENTS.md +350 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
- package/src/metrics/ai-docs/metrics-spec.md +922 -0
- package/src/metrics/behavioral-events.ts +212 -0
- package/src/metrics/constants.ts +47 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +203 -8
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebexCrossClientService.ts +293 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -0
- package/src/services/agent/ai-docs/AGENTS.md +240 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
- package/src/services/agent/ai-docs/agent-spec.md +505 -0
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +497 -0
- package/src/services/config/Util.ts +6 -3
- package/src/services/config/ai-docs/AGENTS.md +255 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
- package/src/services/config/ai-docs/config-spec.md +675 -0
- package/src/services/config/constants.ts +35 -7
- package/src/services/config/types.ts +186 -11
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +123 -37
- package/src/services/core/WebexRequest.ts +3 -1
- package/src/services/core/ai-docs/AGENTS.md +381 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
- package/src/services/core/ai-docs/core-spec.md +787 -0
- package/src/services/core/aqm-reqs.ts +30 -15
- package/src/services/core/types.ts +2 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +908 -0
- package/src/services/task/TaskFactory.ts +60 -0
- package/src/services/task/TaskManager.ts +1239 -608
- package/src/services/task/TaskUtils.ts +303 -25
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
- package/src/services/task/ai-docs/task-spec.md +1470 -0
- package/src/services/task/constants.ts +10 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +97 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1293 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1145 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2207 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +442 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +258 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +819 -70
- package/src/services/task/voice/Voice.ts +1809 -0
- package/src/services/task/voice/WebRTC.ts +191 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
- package/src/services/wxAppDiagnosticLogging.ts +174 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +199 -11
- package/src/utils/AGENTS.md +289 -0
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +391 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +1947 -124
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +60 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +178 -20
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +85 -0
- package/test/unit/spec/services/config/index.ts +30 -30
- package/test/unit/spec/services/core/Utils.ts +425 -8
- package/test/unit/spec/services/core/WebexRequest.ts +3 -1
- package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +677 -0
- package/test/unit/spec/services/task/TaskFactory.ts +99 -0
- package/test/unit/spec/services/task/TaskManager.ts +1972 -1549
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
- package/test/unit/spec/services/task/contact.ts +33 -0
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +3459 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +1903 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
8
|
+
var _constants = require("../constants");
|
|
9
|
+
var _types = require("../types");
|
|
10
|
+
var _Utils = require("./core/Utils");
|
|
11
|
+
var _wxAppTelephonyUtils = require("./wxAppTelephonyUtils");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const ANSWER_CALL_ON_WEBEX_FILE = 'AnswerCallOnWebexService';
|
|
14
|
+
const extractWxAppTrackingId = source => {
|
|
15
|
+
const sourceObj = source;
|
|
16
|
+
return sourceObj?.details?.trackingId || sourceObj?.trackingId;
|
|
17
|
+
};
|
|
18
|
+
const extractWxAppHttpStatus = source => {
|
|
19
|
+
const obj = source;
|
|
20
|
+
return obj?.statusCode ?? obj?.status ?? obj?.details?.status;
|
|
21
|
+
};
|
|
22
|
+
const markWxAppTelephonyError = (error, source) => {
|
|
23
|
+
const marked = error;
|
|
24
|
+
marked.isWxAppTelephonyError = true;
|
|
25
|
+
const trackingId = extractWxAppTrackingId(source);
|
|
26
|
+
if (trackingId) {
|
|
27
|
+
marked.trackingId = trackingId;
|
|
28
|
+
}
|
|
29
|
+
const status = extractWxAppHttpStatus(source);
|
|
30
|
+
if (status !== undefined) {
|
|
31
|
+
marked.status = status;
|
|
32
|
+
}
|
|
33
|
+
return marked;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* REST telephony client for wxApp thick-client answer (WXCC-6026).
|
|
37
|
+
* Separate from WebCallingService (WebRTC/Mobius).
|
|
38
|
+
*/
|
|
39
|
+
class AnswerCallOnWebexService {
|
|
40
|
+
constructor(webex) {
|
|
41
|
+
this.webex = webex;
|
|
42
|
+
}
|
|
43
|
+
getTelephonyBaseUrl() {
|
|
44
|
+
const services = this.webex.internal.services;
|
|
45
|
+
const hydraUrl = services._serviceUrls?.hydra || services.get('hydra');
|
|
46
|
+
if (!hydraUrl) {
|
|
47
|
+
throw new Error('Telephony base URL is unavailable');
|
|
48
|
+
}
|
|
49
|
+
return `${hydraUrl.replace(/\/$/, '')}/telephony/calls`;
|
|
50
|
+
}
|
|
51
|
+
extractTrackingId(source) {
|
|
52
|
+
return extractWxAppTrackingId(source);
|
|
53
|
+
}
|
|
54
|
+
async telephonyRequest(resource, method, body, logMethod) {
|
|
55
|
+
try {
|
|
56
|
+
const uri = `${this.getTelephonyBaseUrl()}${resource}`;
|
|
57
|
+
_loggerProxy.default.info(`AnswerCallOnWebexService.${logMethod} request`, {
|
|
58
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
59
|
+
method: logMethod,
|
|
60
|
+
data: {
|
|
61
|
+
uri,
|
|
62
|
+
bodyKeys: Object.keys(body)
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const response = await this.webex.request({
|
|
66
|
+
uri,
|
|
67
|
+
method,
|
|
68
|
+
body,
|
|
69
|
+
addAuthHeader: true
|
|
70
|
+
});
|
|
71
|
+
_loggerProxy.default.info(`AnswerCallOnWebexService.${logMethod} success`, {
|
|
72
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
73
|
+
method: logMethod,
|
|
74
|
+
data: {
|
|
75
|
+
statusCode: response.statusCode
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return response;
|
|
79
|
+
} catch (error) {
|
|
80
|
+
const trackingId = this.extractTrackingId(error);
|
|
81
|
+
_loggerProxy.default.error(`AnswerCallOnWebexService.${logMethod} failed: ${error}`, {
|
|
82
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
83
|
+
method: logMethod,
|
|
84
|
+
data: {
|
|
85
|
+
trackingId,
|
|
86
|
+
status: extractWxAppHttpStatus(error)
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
const {
|
|
90
|
+
error: detailedError
|
|
91
|
+
} = (0, _Utils.getErrorDetails)(error, logMethod, _constants.CC_FILE);
|
|
92
|
+
throw markWxAppTelephonyError(detailedError, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
answerCall(params) {
|
|
96
|
+
const {
|
|
97
|
+
callId,
|
|
98
|
+
endpointId,
|
|
99
|
+
lineOwnerId
|
|
100
|
+
} = params;
|
|
101
|
+
return this.telephonyRequest('/answer', _types.HTTP_METHODS.POST, {
|
|
102
|
+
callId,
|
|
103
|
+
endpointId,
|
|
104
|
+
...(lineOwnerId ? {
|
|
105
|
+
lineOwnerId
|
|
106
|
+
} : {})
|
|
107
|
+
}, _constants.METHODS.ACCEPT);
|
|
108
|
+
}
|
|
109
|
+
rejectCall(params) {
|
|
110
|
+
const {
|
|
111
|
+
callId,
|
|
112
|
+
lineOwnerId
|
|
113
|
+
} = params;
|
|
114
|
+
return this.telephonyRequest('/reject', _types.HTTP_METHODS.POST, {
|
|
115
|
+
callId,
|
|
116
|
+
...(lineOwnerId ? {
|
|
117
|
+
lineOwnerId
|
|
118
|
+
} : {})
|
|
119
|
+
}, _constants.METHODS.REJECT);
|
|
120
|
+
}
|
|
121
|
+
muteCall(params) {
|
|
122
|
+
const {
|
|
123
|
+
callId,
|
|
124
|
+
lineOwnerId
|
|
125
|
+
} = params;
|
|
126
|
+
return this.telephonyRequest('/mute', _types.HTTP_METHODS.POST, {
|
|
127
|
+
callId,
|
|
128
|
+
...(lineOwnerId ? {
|
|
129
|
+
lineOwnerId
|
|
130
|
+
} : {})
|
|
131
|
+
}, _constants.METHODS.TOGGLE_MUTE);
|
|
132
|
+
}
|
|
133
|
+
unmuteCall(params) {
|
|
134
|
+
const {
|
|
135
|
+
callId,
|
|
136
|
+
lineOwnerId
|
|
137
|
+
} = params;
|
|
138
|
+
return this.telephonyRequest('/unmute', _types.HTTP_METHODS.POST, {
|
|
139
|
+
callId,
|
|
140
|
+
...(lineOwnerId ? {
|
|
141
|
+
lineOwnerId
|
|
142
|
+
} : {})
|
|
143
|
+
}, _constants.METHODS.TOGGLE_MUTE);
|
|
144
|
+
}
|
|
145
|
+
transmitDtmf(params) {
|
|
146
|
+
const {
|
|
147
|
+
callId,
|
|
148
|
+
dtmf,
|
|
149
|
+
lineOwnerId
|
|
150
|
+
} = params;
|
|
151
|
+
return this.telephonyRequest('/transmitDtmf', _types.HTTP_METHODS.POST, {
|
|
152
|
+
callId,
|
|
153
|
+
dtmf,
|
|
154
|
+
...(lineOwnerId ? {
|
|
155
|
+
lineOwnerId
|
|
156
|
+
} : {})
|
|
157
|
+
}, _constants.METHODS.TRANSMIT_DTMF);
|
|
158
|
+
}
|
|
159
|
+
async getCallDetails(params) {
|
|
160
|
+
const {
|
|
161
|
+
callId,
|
|
162
|
+
lineOwnerId
|
|
163
|
+
} = params;
|
|
164
|
+
const lineOwnerIdQuery = lineOwnerId ? `?lineOwnerId=${encodeURIComponent(lineOwnerId)}` : '';
|
|
165
|
+
const uri = `${this.getTelephonyBaseUrl()}/${callId}${lineOwnerIdQuery}`;
|
|
166
|
+
try {
|
|
167
|
+
_loggerProxy.default.info('AnswerCallOnWebexService.getCallDetails request', {
|
|
168
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
169
|
+
method: _constants.METHODS.GET_CALL_DETAILS_ON_WEBEX,
|
|
170
|
+
data: {
|
|
171
|
+
callId
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
const response = await this.webex.request({
|
|
175
|
+
uri,
|
|
176
|
+
method: _types.HTTP_METHODS.GET,
|
|
177
|
+
addAuthHeader: true
|
|
178
|
+
});
|
|
179
|
+
return response.body ?? {};
|
|
180
|
+
} catch (error) {
|
|
181
|
+
if ((0, _wxAppTelephonyUtils.isWxAppCallNotFoundError)(error)) {
|
|
182
|
+
const err = error instanceof Error ? error : new Error(String(error?.message ?? error));
|
|
183
|
+
throw markWxAppTelephonyError(err, error);
|
|
184
|
+
}
|
|
185
|
+
const trackingId = this.extractTrackingId(error);
|
|
186
|
+
_loggerProxy.default.error(`AnswerCallOnWebexService.getCallDetails failed: ${error}`, {
|
|
187
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
188
|
+
method: _constants.METHODS.GET_CALL_DETAILS_ON_WEBEX,
|
|
189
|
+
data: {
|
|
190
|
+
trackingId,
|
|
191
|
+
status: extractWxAppHttpStatus(error)
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const {
|
|
195
|
+
error: detailedError
|
|
196
|
+
} = (0, _Utils.getErrorDetails)(error, _constants.METHODS.GET_CALL_DETAILS_ON_WEBEX, _constants.CC_FILE);
|
|
197
|
+
throw markWxAppTelephonyError(detailedError, error);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.default = AnswerCallOnWebexService;
|
|
202
|
+
//# sourceMappingURL=AnswerCallOnWebexService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_types","_Utils","_wxAppTelephonyUtils","e","__esModule","default","ANSWER_CALL_ON_WEBEX_FILE","extractWxAppTrackingId","source","sourceObj","details","trackingId","extractWxAppHttpStatus","obj","statusCode","status","markWxAppTelephonyError","error","marked","isWxAppTelephonyError","undefined","AnswerCallOnWebexService","constructor","webex","getTelephonyBaseUrl","services","internal","hydraUrl","_serviceUrls","hydra","get","Error","replace","extractTrackingId","telephonyRequest","resource","method","body","logMethod","uri","LoggerProxy","info","module","data","bodyKeys","Object","keys","response","request","addAuthHeader","detailedError","getErrorDetails","CC_FILE","answerCall","params","callId","endpointId","lineOwnerId","HTTP_METHODS","POST","METHODS","ACCEPT","rejectCall","REJECT","muteCall","TOGGLE_MUTE","unmuteCall","transmitDtmf","dtmf","TRANSMIT_DTMF","getCallDetails","lineOwnerIdQuery","encodeURIComponent","GET_CALL_DETAILS_ON_WEBEX","GET","isWxAppCallNotFoundError","err","String","message","exports"],"sources":["AnswerCallOnWebexService.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\nimport {CC_FILE, METHODS} from '../constants';\nimport {HTTP_METHODS, IHttpResponse, WebexSDK} from '../types';\nimport {getErrorDetails} from './core/Utils';\nimport {isWxAppCallNotFoundError} from './wxAppTelephonyUtils';\n\nconst ANSWER_CALL_ON_WEBEX_FILE = 'AnswerCallOnWebexService';\n\nexport type WxAppTelephonyError = Error & {\n isWxAppTelephonyError: true;\n trackingId?: string;\n status?: number | string;\n};\n\nconst extractWxAppTrackingId = (source: unknown): string | undefined => {\n const sourceObj = source as {details?: {trackingId?: string}; trackingId?: string};\n\n return sourceObj?.details?.trackingId || sourceObj?.trackingId;\n};\n\nconst extractWxAppHttpStatus = (source: unknown): number | string | undefined => {\n const obj = source as {\n statusCode?: number;\n status?: number | string;\n details?: {status?: number | string};\n };\n\n return obj?.statusCode ?? obj?.status ?? obj?.details?.status;\n};\n\nconst markWxAppTelephonyError = (error: Error, source: unknown): WxAppTelephonyError => {\n const marked = error as WxAppTelephonyError;\n marked.isWxAppTelephonyError = true;\n const trackingId = extractWxAppTrackingId(source);\n if (trackingId) {\n marked.trackingId = trackingId;\n }\n const status = extractWxAppHttpStatus(source);\n if (status !== undefined) {\n marked.status = status;\n }\n\n return marked;\n};\n\nexport type AnswerCallParams = {\n callId: string;\n endpointId: string;\n lineOwnerId?: string;\n};\n\nexport type CallIdParams = {\n callId: string;\n lineOwnerId?: string;\n};\n\nexport type TransmitDtmfParams = CallIdParams & {\n dtmf: string;\n};\n\nexport type CallDetailsResponse = {\n muted?: boolean;\n};\n\n/**\n * REST telephony client for wxApp thick-client answer (WXCC-6026).\n * Separate from WebCallingService (WebRTC/Mobius).\n */\nexport default class AnswerCallOnWebexService {\n private webex: WebexSDK;\n\n constructor(webex: WebexSDK) {\n this.webex = webex;\n }\n\n private getTelephonyBaseUrl(): string {\n const services = this.webex.internal.services;\n const hydraUrl = services._serviceUrls?.hydra || services.get('hydra');\n\n if (!hydraUrl) {\n throw new Error('Telephony base URL is unavailable');\n }\n\n return `${hydraUrl.replace(/\\/$/, '')}/telephony/calls`;\n }\n\n private extractTrackingId(source: unknown): string | undefined {\n return extractWxAppTrackingId(source);\n }\n\n private async telephonyRequest(\n resource: string,\n method: HTTP_METHODS,\n body: Record<string, unknown>,\n logMethod: string\n ): Promise<IHttpResponse> {\n try {\n const uri = `${this.getTelephonyBaseUrl()}${resource}`;\n\n LoggerProxy.info(`AnswerCallOnWebexService.${logMethod} request`, {\n module: ANSWER_CALL_ON_WEBEX_FILE,\n method: logMethod,\n data: {uri, bodyKeys: Object.keys(body)},\n });\n\n const response = (await this.webex.request({\n uri,\n method,\n body,\n addAuthHeader: true,\n })) as IHttpResponse;\n\n LoggerProxy.info(`AnswerCallOnWebexService.${logMethod} success`, {\n module: ANSWER_CALL_ON_WEBEX_FILE,\n method: logMethod,\n data: {statusCode: response.statusCode},\n });\n\n return response;\n } catch (error) {\n const trackingId = this.extractTrackingId(error);\n LoggerProxy.error(`AnswerCallOnWebexService.${logMethod} failed: ${error}`, {\n module: ANSWER_CALL_ON_WEBEX_FILE,\n method: logMethod,\n data: {\n trackingId,\n status: extractWxAppHttpStatus(error),\n },\n });\n const {error: detailedError} = getErrorDetails(error, logMethod, CC_FILE);\n throw markWxAppTelephonyError(detailedError, error);\n }\n }\n\n public answerCall(params: AnswerCallParams): Promise<IHttpResponse> {\n const {callId, endpointId, lineOwnerId} = params;\n\n return this.telephonyRequest(\n '/answer',\n HTTP_METHODS.POST,\n {\n callId,\n endpointId,\n ...(lineOwnerId ? {lineOwnerId} : {}),\n },\n METHODS.ACCEPT\n );\n }\n\n public rejectCall(params: CallIdParams): Promise<IHttpResponse> {\n const {callId, lineOwnerId} = params;\n\n return this.telephonyRequest(\n '/reject',\n HTTP_METHODS.POST,\n {callId, ...(lineOwnerId ? {lineOwnerId} : {})},\n METHODS.REJECT\n );\n }\n\n public muteCall(params: CallIdParams): Promise<IHttpResponse> {\n const {callId, lineOwnerId} = params;\n\n return this.telephonyRequest(\n '/mute',\n HTTP_METHODS.POST,\n {callId, ...(lineOwnerId ? {lineOwnerId} : {})},\n METHODS.TOGGLE_MUTE\n );\n }\n\n public unmuteCall(params: CallIdParams): Promise<IHttpResponse> {\n const {callId, lineOwnerId} = params;\n\n return this.telephonyRequest(\n '/unmute',\n HTTP_METHODS.POST,\n {callId, ...(lineOwnerId ? {lineOwnerId} : {})},\n METHODS.TOGGLE_MUTE\n );\n }\n\n public transmitDtmf(params: TransmitDtmfParams): Promise<IHttpResponse> {\n const {callId, dtmf, lineOwnerId} = params;\n\n return this.telephonyRequest(\n '/transmitDtmf',\n HTTP_METHODS.POST,\n {callId, dtmf, ...(lineOwnerId ? {lineOwnerId} : {})},\n METHODS.TRANSMIT_DTMF\n );\n }\n\n public async getCallDetails(params: CallIdParams): Promise<CallDetailsResponse> {\n const {callId, lineOwnerId} = params;\n const lineOwnerIdQuery = lineOwnerId ? `?lineOwnerId=${encodeURIComponent(lineOwnerId)}` : '';\n const uri = `${this.getTelephonyBaseUrl()}/${callId}${lineOwnerIdQuery}`;\n\n try {\n LoggerProxy.info('AnswerCallOnWebexService.getCallDetails request', {\n module: ANSWER_CALL_ON_WEBEX_FILE,\n method: METHODS.GET_CALL_DETAILS_ON_WEBEX,\n data: {callId},\n });\n\n const response = (await this.webex.request({\n uri,\n method: HTTP_METHODS.GET,\n addAuthHeader: true,\n })) as IHttpResponse;\n\n return (response.body ?? {}) as CallDetailsResponse;\n } catch (error) {\n if (isWxAppCallNotFoundError(error)) {\n const err =\n error instanceof Error\n ? error\n : new Error(String((error as {message?: string})?.message ?? error));\n throw markWxAppTelephonyError(err, error);\n }\n\n const trackingId = this.extractTrackingId(error);\n LoggerProxy.error(`AnswerCallOnWebexService.getCallDetails failed: ${error}`, {\n module: ANSWER_CALL_ON_WEBEX_FILE,\n method: METHODS.GET_CALL_DETAILS_ON_WEBEX,\n data: {\n trackingId,\n status: extractWxAppHttpStatus(error),\n },\n });\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.GET_CALL_DETAILS_ON_WEBEX,\n CC_FILE\n );\n throw markWxAppTelephonyError(detailedError, error);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.ApiAIAssistant = void 0;
|
|
7
|
+
var _uuid = require("uuid");
|
|
7
8
|
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
8
9
|
var _MetricsManager = _interopRequireDefault(require("../metrics/MetricsManager"));
|
|
9
10
|
var _constants = require("../metrics/constants");
|
|
@@ -56,9 +57,11 @@ class ApiAIAssistant {
|
|
|
56
57
|
* @param interactionId - interaction/conversation identifier
|
|
57
58
|
* @param eventType - the type of event (e.g. 'CUSTOM_EVENT')
|
|
58
59
|
* @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
|
|
59
|
-
* @param
|
|
60
|
+
* @param eventMetaData - event-specific fields to include in eventDetails.data
|
|
61
|
+
* @param languageCode - language code within eventDetails.data
|
|
62
|
+
* @param trackingId - tracking identifier within eventDetails.data
|
|
60
63
|
*/
|
|
61
|
-
async sendEvent(agentId, interactionId, eventType, eventName,
|
|
64
|
+
async sendEvent(agentId, interactionId, eventType, eventName, eventMetaData, languageCode, trackingId) {
|
|
62
65
|
_loggerProxy.default.info('Sending event', {
|
|
63
66
|
module: _constants2.CC_FILE,
|
|
64
67
|
method: _constants2.METHODS.SEND_EVENT,
|
|
@@ -66,7 +69,7 @@ class ApiAIAssistant {
|
|
|
66
69
|
data: {
|
|
67
70
|
eventType,
|
|
68
71
|
eventName,
|
|
69
|
-
|
|
72
|
+
eventMetaData
|
|
70
73
|
}
|
|
71
74
|
});
|
|
72
75
|
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED]);
|
|
@@ -84,9 +87,11 @@ class ApiAIAssistant {
|
|
|
84
87
|
eventName,
|
|
85
88
|
eventDetails: {
|
|
86
89
|
data: {
|
|
90
|
+
...eventMetaData,
|
|
87
91
|
interactionId,
|
|
88
|
-
|
|
89
|
-
|
|
92
|
+
actionTimeStamp: String(Date.now()),
|
|
93
|
+
languageCode,
|
|
94
|
+
trackingId
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
}
|
|
@@ -96,8 +101,7 @@ class ApiAIAssistant {
|
|
|
96
101
|
orgId,
|
|
97
102
|
interactionId,
|
|
98
103
|
eventType,
|
|
99
|
-
eventName
|
|
100
|
-
action
|
|
104
|
+
eventName
|
|
101
105
|
}, ['operational']);
|
|
102
106
|
return response?.body || {};
|
|
103
107
|
} catch (error) {
|
|
@@ -105,7 +109,6 @@ class ApiAIAssistant {
|
|
|
105
109
|
interactionId,
|
|
106
110
|
eventType,
|
|
107
111
|
eventName,
|
|
108
|
-
action,
|
|
109
112
|
error: error instanceof Error ? error.message : String(error)
|
|
110
113
|
}, ['operational']);
|
|
111
114
|
const {
|
|
@@ -115,6 +118,148 @@ class ApiAIAssistant {
|
|
|
115
118
|
}
|
|
116
119
|
}
|
|
117
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Requests real-time assistance for an interaction.
|
|
123
|
+
*
|
|
124
|
+
* @param params - Real-time assistance request parameters
|
|
125
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
126
|
+
* @public
|
|
127
|
+
*/
|
|
128
|
+
async getRealTimeAssistance(params) {
|
|
129
|
+
const {
|
|
130
|
+
agentId,
|
|
131
|
+
interactionId,
|
|
132
|
+
context
|
|
133
|
+
} = params;
|
|
134
|
+
const trimmedContext = context?.trim();
|
|
135
|
+
const languageCode = params.languageCode ?? 'en';
|
|
136
|
+
const trackingId = `WX_CC_SDK_${(0, _uuid.v4)()}`;
|
|
137
|
+
const eventName = trimmedContext ? _types.AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT : _types.AIAssistantEventName.GET_SUGGESTIONS;
|
|
138
|
+
const loggerContext = {
|
|
139
|
+
module: _constants2.CC_FILE,
|
|
140
|
+
method: _constants2.METHODS.GET_REAL_TIME_ASSISTANCE,
|
|
141
|
+
interactionId,
|
|
142
|
+
trackingId,
|
|
143
|
+
data: {
|
|
144
|
+
eventName
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
_loggerProxy.default.info('Requesting real-time assistance', loggerContext);
|
|
148
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED]);
|
|
149
|
+
try {
|
|
150
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
151
|
+
const {
|
|
152
|
+
error: detailedError
|
|
153
|
+
} = (0, _Utils.getErrorDetails)(new Error('SUGGESTED_RESPONSES_NOT_ENABLED'), _constants2.METHODS.GET_REAL_TIME_ASSISTANCE, _constants2.CC_FILE);
|
|
154
|
+
throw detailedError;
|
|
155
|
+
}
|
|
156
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
157
|
+
const response = await this.sendEvent(agentId, interactionId, _types.AIAssistantEventType.CUSTOM_EVENT, eventName, trimmedContext !== undefined ? {
|
|
158
|
+
context: trimmedContext
|
|
159
|
+
} : undefined, languageCode, trackingId);
|
|
160
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS, {
|
|
161
|
+
agentId,
|
|
162
|
+
orgId,
|
|
163
|
+
interactionId,
|
|
164
|
+
eventName,
|
|
165
|
+
trackingId,
|
|
166
|
+
context
|
|
167
|
+
}, ['operational']);
|
|
168
|
+
_loggerProxy.default.log('Real-time assistance request succeeded', loggerContext);
|
|
169
|
+
return response;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
_loggerProxy.default.error('Real-time assistance request failed', {
|
|
172
|
+
...loggerContext,
|
|
173
|
+
error
|
|
174
|
+
});
|
|
175
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED, {
|
|
176
|
+
agentId,
|
|
177
|
+
interactionId,
|
|
178
|
+
trackingId,
|
|
179
|
+
eventName,
|
|
180
|
+
error: error instanceof Error ? error.message : String(error)
|
|
181
|
+
}, ['operational']);
|
|
182
|
+
const {
|
|
183
|
+
error: detailedError
|
|
184
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.GET_REAL_TIME_ASSISTANCE, _constants2.CC_FILE);
|
|
185
|
+
throw detailedError;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Sends user action feedback for a real-time assistance adaptive card.
|
|
191
|
+
*
|
|
192
|
+
* @param params - Real-time assistance user action parameters
|
|
193
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
194
|
+
* @public
|
|
195
|
+
*/
|
|
196
|
+
async sendRealTimeAssistanceUserAction(params) {
|
|
197
|
+
const {
|
|
198
|
+
agentId,
|
|
199
|
+
interactionId,
|
|
200
|
+
adaptiveCardId,
|
|
201
|
+
actionId
|
|
202
|
+
} = params;
|
|
203
|
+
const actionType = 'Action.Submit';
|
|
204
|
+
const languageCode = params.languageCode ?? 'en';
|
|
205
|
+
const trackingId = `WX_CC_SDK_${(0, _uuid.v4)()}`;
|
|
206
|
+
const loggerContext = {
|
|
207
|
+
module: _constants2.CC_FILE,
|
|
208
|
+
method: _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,
|
|
209
|
+
interactionId,
|
|
210
|
+
trackingId,
|
|
211
|
+
data: {
|
|
212
|
+
actionId,
|
|
213
|
+
adaptiveCardId
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
_loggerProxy.default.info('Sending real-time assistance user action', loggerContext);
|
|
217
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED]);
|
|
218
|
+
try {
|
|
219
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
220
|
+
const {
|
|
221
|
+
error: detailedError
|
|
222
|
+
} = (0, _Utils.getErrorDetails)(new Error('SUGGESTED_RESPONSES_NOT_ENABLED'), _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION, _constants2.CC_FILE);
|
|
223
|
+
throw detailedError;
|
|
224
|
+
}
|
|
225
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
226
|
+
const response = await this.sendEvent(agentId, interactionId, _types.AIAssistantEventType.CUSTOM_EVENT, _types.AIAssistantEventName.SUGGESTED_RESPONSES_USER_ACTION, {
|
|
227
|
+
adaptiveCardId,
|
|
228
|
+
userAction: {
|
|
229
|
+
actionType,
|
|
230
|
+
actionId
|
|
231
|
+
}
|
|
232
|
+
}, languageCode, trackingId);
|
|
233
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS, {
|
|
234
|
+
agentId,
|
|
235
|
+
orgId,
|
|
236
|
+
interactionId,
|
|
237
|
+
adaptiveCardId,
|
|
238
|
+
actionId,
|
|
239
|
+
trackingId
|
|
240
|
+
}, ['operational']);
|
|
241
|
+
_loggerProxy.default.log('Real-time assistance user action sent', loggerContext);
|
|
242
|
+
return response;
|
|
243
|
+
} catch (error) {
|
|
244
|
+
_loggerProxy.default.error('Real-time assistance user action failed', {
|
|
245
|
+
...loggerContext,
|
|
246
|
+
error
|
|
247
|
+
});
|
|
248
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED, {
|
|
249
|
+
agentId,
|
|
250
|
+
interactionId,
|
|
251
|
+
adaptiveCardId,
|
|
252
|
+
actionId,
|
|
253
|
+
trackingId,
|
|
254
|
+
error: error instanceof Error ? error.message : String(error)
|
|
255
|
+
}, ['operational']);
|
|
256
|
+
const {
|
|
257
|
+
error: detailedError
|
|
258
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION, _constants2.CC_FILE);
|
|
259
|
+
throw detailedError;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
118
263
|
/**
|
|
119
264
|
* Fetches historic transcripts for an interaction.
|
|
120
265
|
* This API is allowed only when real-time transcription feature is enabled.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_MetricsManager","_constants","_constants2","_types","_Utils","_constants3","e","__esModule","default","ApiAIAssistant","constructor","webex","metricsManager","MetricsManager","getInstance","setAIFeatureFlags","aiFeature","getBaseUrl","wccApiGatewayUrl","internal","services","get","WCC_API_GATEWAY","error","detailedError","getErrorDetails","Error","METHODS","GET_BASE_URL","CC_FILE","hostname","URL","toLowerCase","resolvedEnv","AI_ASSISTANT_ENV_MAP","AI_ASSISTANT_BASE_URL_TEMPLATE","replace","sendEvent","agentId","interactionId","eventType","eventName","action","LoggerProxy","info","module","method","SEND_EVENT","data","timeEvent","METRIC_EVENT_NAMES","AI_ASSISTANT_SEND_EVENT_SUCCESS","AI_ASSISTANT_SEND_EVENT_FAILED","baseUrl","orgId","credentials","getOrgId","response","request","uri","AI_ASSISTANT_API_URLS","EVENT","HTTP_METHODS","POST","addAuthHeader","body","eventDetails","actionTimeStamp","String","Date","now","trackEvent","message","fetchHistoricTranscripts","FETCH_HISTORIC_TRANSCRIPTS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED","realtimeTranscripts","enable","TRANSCRIPTS_LIST","exports","_default"],"sources":["ApiAiAssistant.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\nimport MetricsManager from '../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../metrics/constants';\nimport {CC_FILE, METHODS} from '../constants';\nimport {\n HTTP_METHODS,\n WebexSDK,\n IHttpResponse,\n TranscriptAction,\n AIAssistantEventType,\n AIAssistantEventName,\n HistoricTranscriptsResponse,\n} from '../types';\nimport {getErrorDetails} from './core/Utils';\nimport {\n AI_ASSISTANT_BASE_URL_TEMPLATE,\n AI_ASSISTANT_ENV_MAP,\n AI_ASSISTANT_API_URLS,\n WCC_API_GATEWAY,\n} from './constants';\nimport {AIFeatureFlags} from './config/types';\n\n/**\n * ApiAIAssistant provides AI Assistant APIs for transcript controls.\n * @public\n */\nexport class ApiAIAssistant {\n private webex: WebexSDK;\n private metricsManager: MetricsManager;\n public aiFeature: AIFeatureFlags;\n\n constructor(webex: WebexSDK) {\n this.webex = webex;\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n public setAIFeatureFlags(aiFeature: AIFeatureFlags): void {\n this.aiFeature = aiFeature;\n }\n\n private getBaseUrl(): string {\n const wccApiGatewayUrl = this.webex.internal.services.get(WCC_API_GATEWAY) || '';\n\n if (!wccApiGatewayUrl) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n let hostname = '';\n try {\n hostname = new URL(wccApiGatewayUrl).hostname.toLowerCase();\n } catch (error) {\n hostname = wccApiGatewayUrl.toLowerCase();\n }\n\n const resolvedEnv = AI_ASSISTANT_ENV_MAP[hostname];\n if (!resolvedEnv) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n return AI_ASSISTANT_BASE_URL_TEMPLATE.replace('%s', resolvedEnv);\n }\n\n /**\n * Sends an event to the AI Assistant service.\n * @param agentId - agent identifier\n * @param interactionId - interaction/conversation identifier\n * @param eventType - the type of event (e.g. 'CUSTOM_EVENT')\n * @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')\n * @param action - action within eventDetails (e.g. 'START' or 'STOP')\n */\n public async sendEvent(\n agentId: string,\n interactionId: string,\n eventType: AIAssistantEventType,\n eventName: AIAssistantEventName,\n action: TranscriptAction\n ): Promise<Record<string, unknown>> {\n LoggerProxy.info('Sending event', {\n module: CC_FILE,\n method: METHODS.SEND_EVENT,\n interactionId,\n data: {eventType, eventName, action},\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n ]);\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.EVENT}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n eventType,\n eventName,\n eventDetails: {\n data: {\n interactionId,\n action,\n actionTimeStamp: String(Date.now()),\n },\n },\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n {agentId, orgId, interactionId, eventType, eventName, action},\n ['operational']\n );\n\n return response?.body || {};\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n {\n interactionId,\n eventType,\n eventName,\n action,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(error, METHODS.SEND_EVENT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Fetches historic transcripts for an interaction.\n * This API is allowed only when real-time transcription feature is enabled.\n *\n * @param interactionId - interaction/conversation identifier\n */\n public async fetchHistoricTranscripts(\n agentId: string,\n interactionId: string\n ): Promise<HistoricTranscriptsResponse> {\n LoggerProxy.info('Fetching historic transcripts', {\n module: CC_FILE,\n method: METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n ]);\n if (!this.aiFeature?.realtimeTranscripts?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('REAL_TIME_TRANSCRIPTION_NOT_ENABLED'),\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.TRANSCRIPTS_LIST}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n interactionId,\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n {agentId, orgId, interactionId},\n ['operational']\n );\n\n return response.body as HistoricTranscriptsResponse;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n {\n interactionId,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n if (error instanceof Error) {\n throw error;\n }\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n }\n}\n\nexport default ApiAIAssistant;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","require","_loggerProxy","_interopRequireDefault","_MetricsManager","_constants","_constants2","_types","_Utils","_constants3","e","__esModule","default","ApiAIAssistant","constructor","webex","metricsManager","MetricsManager","getInstance","setAIFeatureFlags","aiFeature","getBaseUrl","wccApiGatewayUrl","internal","services","get","WCC_API_GATEWAY","error","detailedError","getErrorDetails","Error","METHODS","GET_BASE_URL","CC_FILE","hostname","URL","toLowerCase","resolvedEnv","AI_ASSISTANT_ENV_MAP","AI_ASSISTANT_BASE_URL_TEMPLATE","replace","sendEvent","agentId","interactionId","eventType","eventName","eventMetaData","languageCode","trackingId","LoggerProxy","info","module","method","SEND_EVENT","data","timeEvent","METRIC_EVENT_NAMES","AI_ASSISTANT_SEND_EVENT_SUCCESS","AI_ASSISTANT_SEND_EVENT_FAILED","baseUrl","orgId","credentials","getOrgId","response","request","uri","AI_ASSISTANT_API_URLS","EVENT","HTTP_METHODS","POST","addAuthHeader","body","eventDetails","actionTimeStamp","String","Date","now","trackEvent","message","getRealTimeAssistance","params","context","trimmedContext","trim","uuidv4","AIAssistantEventName","ADD_SUGGESTIONS_EXTRA_CONTEXT","GET_SUGGESTIONS","loggerContext","GET_REAL_TIME_ASSISTANCE","AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS","AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED","suggestedResponses","enable","AIAssistantEventType","CUSTOM_EVENT","undefined","log","sendRealTimeAssistanceUserAction","adaptiveCardId","actionId","actionType","SEND_REAL_TIME_ASSISTANCE_USER_ACTION","AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS","AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED","SUGGESTED_RESPONSES_USER_ACTION","userAction","fetchHistoricTranscripts","FETCH_HISTORIC_TRANSCRIPTS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED","realtimeTranscripts","TRANSCRIPTS_LIST","exports","_default"],"sources":["ApiAiAssistant.ts"],"sourcesContent":["import {v4 as uuidv4} from 'uuid';\nimport LoggerProxy from '../logger-proxy';\nimport MetricsManager from '../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../metrics/constants';\nimport {CC_FILE, METHODS} from '../constants';\nimport {\n HTTP_METHODS,\n WebexSDK,\n IHttpResponse,\n AIAssistantEventType,\n AIAssistantEventName,\n HistoricTranscriptsResponse,\n RealTimeAssistanceParams,\n RealTimeAssistanceUserActionParams,\n} from '../types';\nimport {getErrorDetails} from './core/Utils';\nimport {\n AI_ASSISTANT_BASE_URL_TEMPLATE,\n AI_ASSISTANT_ENV_MAP,\n AI_ASSISTANT_API_URLS,\n WCC_API_GATEWAY,\n} from './constants';\nimport {AIFeatureFlags} from './config/types';\n\n/**\n * ApiAIAssistant provides AI Assistant APIs for transcript controls.\n * @public\n */\nexport class ApiAIAssistant {\n private webex: WebexSDK;\n private metricsManager: MetricsManager;\n private aiFeature: AIFeatureFlags;\n\n constructor(webex: WebexSDK) {\n this.webex = webex;\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n public setAIFeatureFlags(aiFeature: AIFeatureFlags): void {\n this.aiFeature = aiFeature;\n }\n\n private getBaseUrl(): string {\n const wccApiGatewayUrl = this.webex.internal.services.get(WCC_API_GATEWAY) || '';\n\n if (!wccApiGatewayUrl) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n let hostname = '';\n try {\n hostname = new URL(wccApiGatewayUrl).hostname.toLowerCase();\n } catch (error) {\n hostname = wccApiGatewayUrl.toLowerCase();\n }\n\n const resolvedEnv = AI_ASSISTANT_ENV_MAP[hostname];\n if (!resolvedEnv) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n return AI_ASSISTANT_BASE_URL_TEMPLATE.replace('%s', resolvedEnv);\n }\n\n /**\n * Sends an event to the AI Assistant service.\n * @param agentId - agent identifier\n * @param interactionId - interaction/conversation identifier\n * @param eventType - the type of event (e.g. 'CUSTOM_EVENT')\n * @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')\n * @param eventMetaData - event-specific fields to include in eventDetails.data\n * @param languageCode - language code within eventDetails.data\n * @param trackingId - tracking identifier within eventDetails.data\n */\n public async sendEvent(\n agentId: string,\n interactionId: string,\n eventType: AIAssistantEventType,\n eventName: AIAssistantEventName,\n eventMetaData?: Record<string, unknown>,\n languageCode?: string,\n trackingId?: string\n ): Promise<Record<string, unknown>> {\n LoggerProxy.info('Sending event', {\n module: CC_FILE,\n method: METHODS.SEND_EVENT,\n interactionId,\n data: {eventType, eventName, eventMetaData},\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n ]);\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.EVENT}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n eventType,\n eventName,\n eventDetails: {\n data: {\n ...eventMetaData,\n interactionId,\n actionTimeStamp: String(Date.now()),\n languageCode,\n trackingId,\n },\n },\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n {agentId, orgId, interactionId, eventType, eventName},\n ['operational']\n );\n\n return response?.body || {};\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n {\n interactionId,\n eventType,\n eventName,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(error, METHODS.SEND_EVENT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Requests real-time assistance for an interaction.\n *\n * @param params - Real-time assistance request parameters\n * @returns HTTP response body from the AI Assistant event API\n * @public\n */\n public async getRealTimeAssistance(params: RealTimeAssistanceParams) {\n const {agentId, interactionId, context} = params;\n const trimmedContext = context?.trim();\n const languageCode = params.languageCode ?? 'en';\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n const eventName = trimmedContext\n ? AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT\n : AIAssistantEventName.GET_SUGGESTIONS;\n\n const loggerContext = {\n module: CC_FILE,\n method: METHODS.GET_REAL_TIME_ASSISTANCE,\n interactionId,\n trackingId,\n data: {eventName},\n };\n\n LoggerProxy.info('Requesting real-time assistance', loggerContext);\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,\n ]);\n\n try {\n if (!this.aiFeature?.suggestedResponses?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),\n METHODS.GET_REAL_TIME_ASSISTANCE,\n CC_FILE\n );\n throw detailedError;\n }\n\n const orgId = this.webex.credentials.getOrgId();\n\n const response = await this.sendEvent(\n agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n eventName,\n trimmedContext !== undefined ? {context: trimmedContext} : undefined,\n languageCode,\n trackingId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,\n {\n agentId,\n orgId,\n interactionId,\n eventName,\n trackingId,\n context,\n },\n ['operational']\n );\n LoggerProxy.log('Real-time assistance request succeeded', loggerContext);\n\n return response;\n } catch (error) {\n LoggerProxy.error('Real-time assistance request failed', {...loggerContext, error});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,\n {\n agentId,\n interactionId,\n trackingId,\n eventName,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.GET_REAL_TIME_ASSISTANCE,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Sends user action feedback for a real-time assistance adaptive card.\n *\n * @param params - Real-time assistance user action parameters\n * @returns HTTP response body from the AI Assistant event API\n * @public\n */\n public async sendRealTimeAssistanceUserAction(\n params: RealTimeAssistanceUserActionParams\n ): Promise<Record<string, unknown>> {\n const {agentId, interactionId, adaptiveCardId, actionId} = params;\n const actionType = 'Action.Submit';\n const languageCode = params.languageCode ?? 'en';\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n\n const loggerContext = {\n module: CC_FILE,\n method: METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n interactionId,\n trackingId,\n data: {actionId, adaptiveCardId},\n };\n\n LoggerProxy.info('Sending real-time assistance user action', loggerContext);\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,\n ]);\n\n try {\n if (!this.aiFeature?.suggestedResponses?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),\n METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n CC_FILE\n );\n throw detailedError;\n }\n\n const orgId = this.webex.credentials.getOrgId();\n const response = await this.sendEvent(\n agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.SUGGESTED_RESPONSES_USER_ACTION,\n {\n adaptiveCardId,\n userAction: {\n actionType,\n actionId,\n },\n },\n languageCode,\n trackingId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,\n {\n agentId,\n orgId,\n interactionId,\n adaptiveCardId,\n actionId,\n trackingId,\n },\n ['operational']\n );\n LoggerProxy.log('Real-time assistance user action sent', loggerContext);\n\n return response;\n } catch (error) {\n LoggerProxy.error('Real-time assistance user action failed', {...loggerContext, error});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,\n {\n agentId,\n interactionId,\n adaptiveCardId,\n actionId,\n trackingId,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Fetches historic transcripts for an interaction.\n * This API is allowed only when real-time transcription feature is enabled.\n *\n * @param interactionId - interaction/conversation identifier\n */\n public async fetchHistoricTranscripts(\n agentId: string,\n interactionId: string\n ): Promise<HistoricTranscriptsResponse> {\n LoggerProxy.info('Fetching historic transcripts', {\n module: CC_FILE,\n method: METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n ]);\n if (!this.aiFeature?.realtimeTranscripts?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('REAL_TIME_TRANSCRIPTION_NOT_ENABLED'),\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.TRANSCRIPTS_LIST}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n interactionId,\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n {agentId, orgId, interactionId},\n ['operational']\n );\n\n return response.body as HistoricTranscriptsResponse;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n {\n interactionId,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n if (error instanceof Error) {\n throw error;\n }\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n }\n}\n\nexport default ApiAIAssistant;\n"],"mappings":"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","ignoreList":[]}
|