@webex/contact-center 3.12.0-next.16 → 3.12.0-next.161
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 +887 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +62 -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 +52 -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 +385 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/contact-owner-change-refactor.md +78 -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 +888 -49
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +38 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +54 -17
- 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 +185 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +54 -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 +369 -14
- 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/WebCallingService.js +10 -2
- package/dist/services/WebCallingService.js.map +1 -1
- package/dist/services/WebexCrossClientService.js +225 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +111 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +48 -48
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +56 -78
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +100 -226
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +93 -24
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +11 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +131 -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 +17 -11
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/constants.js +9 -1
- package/dist/services/core/constants.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +19 -2
- 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 +955 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +50 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1272 -605
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +221 -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 +19 -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/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +982 -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 +215 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1504 -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/wxAppOfferObservability.js +145 -0
- package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +395 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +159 -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 +152 -9
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +36 -1
- package/dist/types/index.d.ts +54 -20
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +48 -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 +67 -5
- 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/Util.d.ts +4 -8
- package/dist/types/services/config/constants.d.ts +49 -76
- package/dist/types/services/config/index.d.ts +16 -64
- package/dist/types/services/config/types.d.ts +240 -114
- package/dist/types/services/constants.d.ts +9 -0
- package/dist/types/services/core/Err.d.ts +2 -0
- package/dist/types/services/core/Utils.d.ts +43 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/constants.d.ts +7 -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 +186 -0
- package/dist/types/services/task/TaskFactory.d.ts +14 -0
- package/dist/types/services/task/TaskUtils.d.ts +54 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +17 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/digital/Digital.d.ts +23 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -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 +738 -66
- package/dist/types/services/task/voice/Voice.d.ts +241 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +54 -0
- package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +68 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +63 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +213 -11
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +168 -6
- 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 +22 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +1137 -67
- package/src/config.ts +13 -0
- package/src/constants.ts +39 -1
- package/src/index.ts +62 -15
- 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 +971 -0
- package/src/metrics/behavioral-events.ts +190 -0
- package/src/metrics/constants.ts +59 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +494 -15
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebCallingService.ts +16 -2
- package/src/services/WebexCrossClientService.ts +298 -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 +512 -0
- package/src/services/config/Util.ts +54 -84
- package/src/services/config/ai-docs/AGENTS.md +250 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +413 -0
- package/src/services/config/ai-docs/config-spec.md +669 -0
- package/src/services/config/constants.ts +63 -85
- package/src/services/config/index.ts +116 -277
- package/src/services/config/types.ts +229 -125
- package/src/services/constants.ts +10 -0
- package/src/services/core/Err.ts +1 -0
- package/src/services/core/Utils.ts +151 -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 +797 -0
- package/src/services/core/aqm-reqs.ts +18 -12
- package/src/services/core/constants.ts +8 -0
- package/src/services/core/types.ts +33 -1
- package/src/services/core/websocket/WebSocketManager.ts +28 -2
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +1211 -0
- package/src/services/task/TaskFactory.ts +82 -0
- package/src/services/task/TaskManager.ts +1585 -724
- package/src/services/task/TaskUtils.ts +316 -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 +1501 -0
- package/src/services/task/constants.ts +18 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/digital/Digital.ts +102 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1320 -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 +1156 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -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 +918 -70
- package/src/services/task/voice/Voice.ts +1878 -0
- package/src/services/task/voice/WebRTC.ts +194 -0
- package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +575 -0
- package/src/services/wxAppDiagnosticLogging.ts +286 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +272 -13
- 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 +10 -0
- package/test/unit/fixtures/aiSummaryTestUtils.ts +40 -0
- package/test/unit/spec/cc.ts +3553 -107
- package/test/unit/spec/index.ts +885 -0
- 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 +442 -23
- 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 +45 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +509 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +501 -0
- package/test/unit/spec/services/config/index.ts +317 -547
- package/test/unit/spec/services/core/Utils.ts +447 -8
- package/test/unit/spec/services/core/WebexRequest.ts +8 -7
- package/test/unit/spec/services/core/aqm-reqs.ts +142 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +129 -53
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +2723 -0
- package/test/unit/spec/services/task/TaskFactory.ts +116 -0
- package/test/unit/spec/services/task/TaskManager.ts +4734 -1769
- package/test/unit/spec/services/task/TaskUtils.ts +307 -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/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -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 +2355 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +719 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +179 -0
- package/test/unit/spec/wellnessSampleUtils.ts +288 -0
- package/typedoc.md +1 -1
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1530
- 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 -1806
- package/test/unit/spec/services/task/index.ts +0 -2205
package/src/config.ts
CHANGED
|
@@ -25,6 +25,19 @@ export default {
|
|
|
25
25
|
* @default true
|
|
26
26
|
*/
|
|
27
27
|
allowAutomatedRelogin: true,
|
|
28
|
+
/**
|
|
29
|
+
* Whether to skip Mobius/WebRTC registration for browser login flows.
|
|
30
|
+
* @type {boolean}
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
disableWebRTCRegistration: false,
|
|
34
|
+
/**
|
|
35
|
+
* Whether wxApp Better Together is enabled at SDK init.
|
|
36
|
+
* Must be set before SDK init. Default false (WXCC-6026).
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
enableWxBetterTogether: false,
|
|
28
41
|
/**
|
|
29
42
|
* The type of client making the connection.
|
|
30
43
|
* @type {string}
|
package/src/constants.ts
CHANGED
|
@@ -8,6 +8,7 @@ export const LOG_PREFIX = 'PLUGIN_CC';
|
|
|
8
8
|
export const WEB_CALLING_SERVICE_FILE = 'WebCallingService';
|
|
9
9
|
export const CONFIG_FILE_NAME = 'config-index';
|
|
10
10
|
export const CC_FILE = 'cc';
|
|
11
|
+
export const WELLNESS_BREAK_HANDLER = 'Wellness_Break_Handler';
|
|
11
12
|
export const CONNECTION_SERVICE_FILE = 'connection-service';
|
|
12
13
|
export const WEB_SOCKET_MANAGER_FILE = 'WebSocketManager';
|
|
13
14
|
export const AQM_REQS_FILE = 'aqm-reqs';
|
|
@@ -15,6 +16,7 @@ export const WEBEX_REQUEST_FILE = 'WebexRequest';
|
|
|
15
16
|
export const TASK_MANAGER_FILE = 'TaskManager';
|
|
16
17
|
export const TASK_FILE = 'Task';
|
|
17
18
|
// AGENT OUTDIAL CONSTANTS
|
|
19
|
+
export const INBOUND_DIRECTION = 'INBOUND';
|
|
18
20
|
export const OUTDIAL_DIRECTION = 'OUTBOUND';
|
|
19
21
|
export const ATTRIBUTES = {};
|
|
20
22
|
export const OUTDIAL_MEDIA_TYPE = 'telephony';
|
|
@@ -42,17 +44,53 @@ export const METHODS = {
|
|
|
42
44
|
HANDLE_DEVICE_TYPE: 'handleDeviceType',
|
|
43
45
|
START_OUTDIAL: 'startOutdial',
|
|
44
46
|
GET_QUEUES: 'getQueues',
|
|
45
|
-
GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
|
|
46
47
|
UPLOAD_LOGS: 'uploadLogs',
|
|
47
48
|
UPDATE_AGENT_PROFILE: 'updateAgentProfile',
|
|
48
49
|
GET_DEVICE_ID: 'getDeviceId',
|
|
49
50
|
HANDLE_INCOMING_TASK: 'handleIncomingTask',
|
|
50
51
|
HANDLE_TASK_HYDRATE: 'handleTaskHydrate',
|
|
51
52
|
INCOMING_TASK_LISTENER: 'incomingTaskListener',
|
|
53
|
+
ACCEPT: 'accept',
|
|
54
|
+
REJECT: 'decline',
|
|
55
|
+
HOLD: 'hold',
|
|
56
|
+
RESUME: 'resume',
|
|
57
|
+
HOLD_RESUME: 'holdResume',
|
|
58
|
+
TRANSFER_CALL: 'transfer',
|
|
59
|
+
CONSULT_TRANSFER: 'consultTransfer',
|
|
60
|
+
CONSULT_CONFERENCE: 'consultConference',
|
|
61
|
+
DROP_CONFERENCE_PARTICIPANT: 'dropConferenceParticipant',
|
|
62
|
+
EXIT_CONFERENCE: 'exitConference',
|
|
63
|
+
TRANSFER_CONFERENCE: 'transferConference',
|
|
64
|
+
TOGGLE_MUTE: 'toggleMute',
|
|
65
|
+
TRANSMIT_DTMF: 'transmitDtmf',
|
|
66
|
+
COMPLETE_TRANSFER: 'completeTransfer',
|
|
67
|
+
GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
|
|
52
68
|
ACCEPT_PREVIEW_CONTACT: 'acceptPreviewContact',
|
|
53
69
|
SKIP_PREVIEW_CONTACT: 'skipPreviewContact',
|
|
54
70
|
REMOVE_PREVIEW_CONTACT: 'removePreviewContact',
|
|
55
71
|
GET_BASE_URL: 'getBaseUrl',
|
|
56
72
|
SEND_EVENT: 'sendEvent',
|
|
73
|
+
GET_REAL_TIME_ASSISTANCE: 'getRealTimeAssistance',
|
|
74
|
+
SEND_REAL_TIME_ASSISTANCE_USER_ACTION: 'sendRealTimeAssistanceUserAction',
|
|
57
75
|
FETCH_HISTORIC_TRANSCRIPTS: 'fetchHistoricTranscripts',
|
|
76
|
+
REQUEST_WELLNESS_BREAK: 'requestWellnessBreak',
|
|
77
|
+
RESPOND_TO_WELLNESS_BREAK: 'respondToWellnessBreak',
|
|
78
|
+
GET_WELLBEING_BREAK_IDLE_CODE: 'getWellbeingBreakIdleCode',
|
|
79
|
+
SET_MANAGE_WEBEX_CALLING_IN_WXCC: 'setManageWebexCallingInWxcc',
|
|
80
|
+
IS_WX_BETTER_TOGETHER_ENABLED: 'isWxBetterTogetherEnabled',
|
|
81
|
+
SYNC_WXAPP_MUTE_FROM_MERCURY: 'syncWxAppMuteFromMercury',
|
|
82
|
+
GET_CALL_DETAILS_ON_WEBEX: 'getCallDetailsOnWebex',
|
|
83
|
+
ENSURE_WXAPP_MERCURY_CONNECTED: 'ensureWxAppMercuryConnected',
|
|
58
84
|
};
|
|
85
|
+
|
|
86
|
+
export const AI_SUMMARY_ERROR_CODES = {
|
|
87
|
+
POST_CALL_SUMMARY_DISABLED: 'POST_CALL_SUMMARY_DISABLED',
|
|
88
|
+
MID_CALL_SUMMARY_DISABLED: 'MID_CALL_SUMMARY_DISABLED',
|
|
89
|
+
AI_ASSISTANT_BASE_URL_NOT_AVAILABLE: 'AI_ASSISTANT_BASE_URL_NOT_AVAILABLE',
|
|
90
|
+
POST_CALL_SUMMARY_TIMEOUT: 'POST_CALL_SUMMARY_TIMEOUT',
|
|
91
|
+
MID_CALL_SUMMARY_TIMEOUT: 'MID_CALL_SUMMARY_TIMEOUT',
|
|
92
|
+
} as const;
|
|
93
|
+
|
|
94
|
+
export const AI_SUMMARY_INVALID_RESPONSE_PAYLOAD = 'AI_SUMMARY_INVALID_RESPONSE_PAYLOAD';
|
|
95
|
+
|
|
96
|
+
export const AI_ASSISTANT_CLIENT_TYPE = 'WxCC' as const;
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ import ContactCenter from './cc';
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @module ContactCenterModule
|
|
7
|
-
|
|
7
|
+
*/
|
|
8
8
|
|
|
9
9
|
// Core exports
|
|
10
10
|
/**
|
|
@@ -13,22 +13,26 @@ import ContactCenter from './cc';
|
|
|
13
13
|
*/
|
|
14
14
|
export {default as ContactCenter} from './cc';
|
|
15
15
|
|
|
16
|
-
// Service exports
|
|
17
16
|
/**
|
|
18
|
-
*
|
|
17
|
+
* Agent routing service for Contact Center operations
|
|
19
18
|
* @category Services
|
|
20
19
|
*/
|
|
21
|
-
export {default as
|
|
20
|
+
export {default as routingAgent} from './services/agent';
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
23
|
+
* Task class represents a contact center task that can be managed by an agent
|
|
25
24
|
* @category Services
|
|
26
25
|
*/
|
|
27
|
-
export {default as
|
|
26
|
+
export {default as Task} from './services/task/Task';
|
|
28
27
|
|
|
29
28
|
// API exports (AddressBook is public, EntryPoint and Queue are accessed via cc wrappers)
|
|
30
29
|
export {default as AddressBook} from './services/AddressBook';
|
|
31
30
|
export {default as ApiAIAssistant} from './services/ApiAiAssistant';
|
|
31
|
+
export {AI_SUMMARY_ERROR_CODES} from './constants';
|
|
32
|
+
export {default as UserPreference} from './services/UserPreference';
|
|
33
|
+
|
|
34
|
+
/** Agent Wellness Break notification and action wire values. */
|
|
35
|
+
export {WELLNESS_BREAK_NOTIFICATION_ACTIONS, WELLNESS_BREAK_USER_ACTIONS} from './types';
|
|
32
36
|
|
|
33
37
|
/** EntryPoint API types */
|
|
34
38
|
export type {
|
|
@@ -61,7 +65,7 @@ export {AGENT_EVENTS} from './services/agent/types';
|
|
|
61
65
|
export type {AGENT_EVENTS as AgentEvents} from './services/agent/types';
|
|
62
66
|
|
|
63
67
|
/**
|
|
64
|
-
* Contact Center
|
|
68
|
+
* Contact Center task, realtime, and AI Assistant events
|
|
65
69
|
* @enum {string}
|
|
66
70
|
* @category Enums
|
|
67
71
|
*/
|
|
@@ -120,17 +124,29 @@ export type {
|
|
|
120
124
|
GenericError,
|
|
121
125
|
/** Set state response */
|
|
122
126
|
SetStateResponse,
|
|
127
|
+
/** Wellness notification action */
|
|
128
|
+
WellnessBreakNotificationAction,
|
|
129
|
+
/** Wellness action API value */
|
|
130
|
+
WellnessBreakUserAction,
|
|
131
|
+
/** Validated agent-scoped wellness notification */
|
|
132
|
+
WellnessBreakEvent,
|
|
133
|
+
/** Wellness offer-response parameters */
|
|
134
|
+
RespondToWellnessBreakParams,
|
|
123
135
|
} from './types';
|
|
124
136
|
|
|
125
137
|
/** Task related types */
|
|
126
138
|
export type {
|
|
127
139
|
AgentContact,
|
|
140
|
+
/** Event emitter contract for task consumers (no @types/node needed) */
|
|
141
|
+
IEventEmitter,
|
|
128
142
|
/** Task interface */
|
|
129
143
|
ITask,
|
|
130
144
|
Interaction,
|
|
131
145
|
TaskData,
|
|
132
146
|
/** Task response */
|
|
133
147
|
TaskResponse,
|
|
148
|
+
/** Conference participant drop request */
|
|
149
|
+
DropConferenceParticipantPayload,
|
|
134
150
|
ConsultPayload,
|
|
135
151
|
ConsultEndPayload,
|
|
136
152
|
ConsultTransferPayLoad,
|
|
@@ -139,8 +155,23 @@ export type {
|
|
|
139
155
|
TransferPayLoad,
|
|
140
156
|
ResumeRecordingPayload,
|
|
141
157
|
WrapupPayLoad,
|
|
158
|
+
/** UI control types for task buttons */
|
|
159
|
+
InteractionUIControls,
|
|
160
|
+
TaskUILeg,
|
|
161
|
+
TaskUIControls,
|
|
162
|
+
TaskUIControlState,
|
|
163
|
+
AISummaryAction,
|
|
164
|
+
AISummaryFeedback,
|
|
165
|
+
AISummaryState,
|
|
166
|
+
AISummarySections,
|
|
167
|
+
AISummary,
|
|
168
|
+
AISummaryFeatureEnablement,
|
|
169
|
+
AISummaryResponse,
|
|
142
170
|
} from './services/task/types';
|
|
143
171
|
|
|
172
|
+
/** UI controls utilities */
|
|
173
|
+
export {getDefaultUIControls} from './services/task/state-machine/uiControlsComputer';
|
|
174
|
+
|
|
144
175
|
/** Agent related types */
|
|
145
176
|
export type {
|
|
146
177
|
/** State change interface */
|
|
@@ -175,10 +206,14 @@ export type {
|
|
|
175
206
|
export type {
|
|
176
207
|
/** Profile interface */
|
|
177
208
|
Profile,
|
|
178
|
-
/**
|
|
209
|
+
/** Aggregated organization configuration from getOrgDesktopLoginConfig */
|
|
210
|
+
OrgDesktopLoginResponse,
|
|
211
|
+
/** Aggregated user configuration from getUserDesktopLoginConfig */
|
|
212
|
+
UserDesktopLoginResponse,
|
|
213
|
+
/** Agent identity, the `user` section of the user desktop-login aggregate */
|
|
179
214
|
AgentResponse,
|
|
180
|
-
/**
|
|
181
|
-
|
|
215
|
+
/** Desktop Profile settings, the `agentProfile` section of the user desktop-login aggregate */
|
|
216
|
+
AgentProfile,
|
|
182
217
|
/** Response from getMultimediaProfileById */
|
|
183
218
|
MultimediaProfileResponse,
|
|
184
219
|
/** Response from getListOfTeams */
|
|
@@ -187,14 +222,18 @@ export type {
|
|
|
187
222
|
ListAuxCodesResponse,
|
|
188
223
|
/** Response from getSiteInfo */
|
|
189
224
|
SiteInfo,
|
|
190
|
-
/**
|
|
225
|
+
/** Organization identity, the `organization` section of the org desktop-login aggregate */
|
|
191
226
|
OrgInfo,
|
|
192
|
-
/**
|
|
227
|
+
/** Organization settings, the `organizationSetting` section of the org desktop-login aggregate */
|
|
193
228
|
OrgSettings,
|
|
194
|
-
/**
|
|
229
|
+
/** Tenant configuration, the `tenantConfiguration` section of the org desktop-login aggregate */
|
|
195
230
|
TenantData,
|
|
196
|
-
/**
|
|
197
|
-
|
|
231
|
+
/** Microsoft Teams integration configuration, from the org desktop-login aggregate */
|
|
232
|
+
MicrosoftConfig,
|
|
233
|
+
/** Webex integration configuration, from the org desktop-login aggregate */
|
|
234
|
+
WebexConfig,
|
|
235
|
+
/** External integration URLs, the `urlMappings` section of the org desktop-login aggregate */
|
|
236
|
+
OrgUrlMappings,
|
|
198
237
|
/** Response from getDialPlanData */
|
|
199
238
|
DialPlanEntity,
|
|
200
239
|
/** Auxiliary code information */
|
|
@@ -213,6 +252,14 @@ export type {
|
|
|
213
252
|
DialPlan,
|
|
214
253
|
/** Auxiliary code type (IDLE_CODE or WRAP_UP_CODE) */
|
|
215
254
|
AuxCodeType,
|
|
255
|
+
/** User preference data structure */
|
|
256
|
+
UserPreference as UserPreferenceData,
|
|
257
|
+
/** Request payload for creating user preferences */
|
|
258
|
+
CreateUserPreferenceRequest,
|
|
259
|
+
/** Request payload for updating user preferences */
|
|
260
|
+
UpdateUserPreferenceRequest,
|
|
261
|
+
/** Query parameters for fetching user preferences */
|
|
262
|
+
GetUserPreferenceParams,
|
|
216
263
|
} from './services/config/types';
|
|
217
264
|
|
|
218
265
|
// Constants
|
|
@@ -412,6 +412,22 @@ export default class MetricsManager {
|
|
|
412
412
|
this.runningEvents[genericKey] = {startTime: Date.now(), keys: new Set(keyArray)};
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
+
/**
|
|
416
|
+
* Clears a running timed event without emitting a metric.
|
|
417
|
+
* @param keys - A string or array of strings representing event keys (same as timeEvent).
|
|
418
|
+
* @public
|
|
419
|
+
*/
|
|
420
|
+
public cancelTimedEvent(keys: string | string[]): void {
|
|
421
|
+
if (this.isMetricsDisabled()) {
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
425
|
+
if (keyArray.length === 0) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
delete this.runningEvents[keyArray[0]];
|
|
429
|
+
}
|
|
430
|
+
|
|
415
431
|
/**
|
|
416
432
|
* Sets the Webex SDK instance and marks the manager as ready when the SDK is ready.
|
|
417
433
|
* @param webex - The Webex SDK instance.
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# Metrics Module - AI Agent Guide
|
|
2
|
+
|
|
3
|
+
> **Legacy/reference-only.** Canonical SDD: [`metrics-spec.md`](metrics-spec.md). Use the package [manifest](../../../.sdd/manifest.json) and [`SPEC_INDEX.md`](../../../ai-docs/SPEC_INDEX.md) for routing; code and tests remain the behavioral referee.
|
|
4
|
+
|
|
5
|
+
> **Purpose**: Track behavioral, operational, and business metrics for Contact Center SDK operations using a singleton `MetricsManager`. Provides event timing, payload preparation, batching, and submission to the Webex metrics backend.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import MetricsManager from '../metrics/MetricsManager';
|
|
13
|
+
import {METRIC_EVENT_NAMES} from '../metrics/constants';
|
|
14
|
+
|
|
15
|
+
// Get the singleton instance (webex is set during cc.register())
|
|
16
|
+
const metrics = MetricsManager.getInstance();
|
|
17
|
+
|
|
18
|
+
// Time an operation, then track its result
|
|
19
|
+
metrics.timeEvent(METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS);
|
|
20
|
+
// ... perform the operation ...
|
|
21
|
+
metrics.trackEvent(METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS, {agentId: '123'});
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Key Capabilities
|
|
27
|
+
|
|
28
|
+
- **Singleton Pattern**: Single `MetricsManager` instance shared across the entire SDK
|
|
29
|
+
- **Three Metric Types**: Behavioral (user actions), operational (system events), business (business-level analytics)
|
|
30
|
+
- **Event Timing**: `timeEvent` + `trackEvent` pattern automatically calculates `duration_ms`
|
|
31
|
+
- **Queued Submission**: Events are queued until the Webex SDK is ready, then submitted in order
|
|
32
|
+
- **Behavioral Taxonomy**: Structured `product.agent.target.verb` naming convention for behavioral events
|
|
33
|
+
- **Payload Preparation**: Automatic cleanup of empty fields, space-to-underscore conversion, and `tabHidden` metadata
|
|
34
|
+
- **AQM Response Helpers**: Static methods to extract common tracking fields from AQM responses
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## API Reference
|
|
39
|
+
|
|
40
|
+
### Methods
|
|
41
|
+
|
|
42
|
+
#### `MetricsManager.getInstance(options?)`
|
|
43
|
+
|
|
44
|
+
Returns the singleton instance. On first call with `{webex}`, binds to the Webex SDK and begins listening for the `ready` event.
|
|
45
|
+
|
|
46
|
+
**Parameters**:
|
|
47
|
+
- `options` (object, optional): `{webex: WebexSDK}` - The Webex SDK instance
|
|
48
|
+
|
|
49
|
+
**Returns**: `MetricsManager`
|
|
50
|
+
|
|
51
|
+
**Example**:
|
|
52
|
+
```typescript
|
|
53
|
+
// During initialization (called internally by cc.register())
|
|
54
|
+
const metrics = MetricsManager.getInstance({webex});
|
|
55
|
+
|
|
56
|
+
// Subsequent calls (no webex needed)
|
|
57
|
+
const metrics = MetricsManager.getInstance();
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
#### `metrics.timeEvent(keys)`
|
|
63
|
+
|
|
64
|
+
Starts a timer for one or more event keys. When a matching `trackEvent` / `trackBehavioralEvent` / `trackOperationalEvent` / `trackBusinessEvent` is called, `duration_ms` is automatically added to the payload.
|
|
65
|
+
|
|
66
|
+
**Parameters**:
|
|
67
|
+
- `keys` (string | string[]): One or more `METRIC_EVENT_NAMES` values. The first key is the tracking key; all keys in the array will resolve the same timer.
|
|
68
|
+
|
|
69
|
+
**Returns**: `void`
|
|
70
|
+
|
|
71
|
+
**Example**:
|
|
72
|
+
```typescript
|
|
73
|
+
// Single key
|
|
74
|
+
metrics.timeEvent(METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS);
|
|
75
|
+
|
|
76
|
+
// Multiple keys (success/failure share one timer)
|
|
77
|
+
metrics.timeEvent([
|
|
78
|
+
METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,
|
|
79
|
+
METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,
|
|
80
|
+
]);
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
#### `metrics.trackEvent(name, payload?, metricServices?)`
|
|
86
|
+
|
|
87
|
+
Tracks an event across one or more metric services.
|
|
88
|
+
|
|
89
|
+
**Parameters**:
|
|
90
|
+
- `name` (METRIC_EVENT_NAMES): The event name constant
|
|
91
|
+
- `payload` (EventPayload, optional): Key-value pairs of event data
|
|
92
|
+
- `metricServices` (MetricsType[], optional): Array of `'behavioral'` | `'operational'` | `'business'` (default: `['behavioral']`)
|
|
93
|
+
|
|
94
|
+
**Returns**: `void`
|
|
95
|
+
|
|
96
|
+
**Example**:
|
|
97
|
+
```typescript
|
|
98
|
+
// Behavioral only (default)
|
|
99
|
+
metrics.trackEvent(METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS, {agentId: '123'});
|
|
100
|
+
|
|
101
|
+
// Multiple services
|
|
102
|
+
metrics.trackEvent(
|
|
103
|
+
METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,
|
|
104
|
+
{interactionId: 'abc'},
|
|
105
|
+
['behavioral', 'operational']
|
|
106
|
+
);
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
#### `metrics.trackBehavioralEvent(name, options?)`
|
|
112
|
+
|
|
113
|
+
Tracks a single behavioral event. Looks up the event taxonomy from `behavioral-events.ts` and submits via `webex.internal.newMetrics.submitBehavioralEvent`.
|
|
114
|
+
|
|
115
|
+
**Parameters**:
|
|
116
|
+
- `name` (METRIC_EVENT_NAMES): The event name
|
|
117
|
+
- `options` (EventPayload, optional): Additional payload data
|
|
118
|
+
|
|
119
|
+
**Returns**: `void`
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
#### `metrics.trackOperationalEvent(name, options?)`
|
|
124
|
+
|
|
125
|
+
Tracks a single operational event. Prefixes the event name with `WXCC_SDK_` and submits via `webex.internal.newMetrics.submitOperationalEvent`.
|
|
126
|
+
|
|
127
|
+
**Parameters**:
|
|
128
|
+
- `name` (METRIC_EVENT_NAMES): The event name
|
|
129
|
+
- `options` (EventPayload, optional): Additional payload data
|
|
130
|
+
|
|
131
|
+
**Returns**: `void`
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
#### `metrics.trackBusinessEvent(name, options?)`
|
|
136
|
+
|
|
137
|
+
Tracks a single business event. Prefixes the event name with `WXCC_SDK_` and submits via `webex.internal.newMetrics.submitBusinessEvent` with `appType: 'wxcc_sdk'`.
|
|
138
|
+
|
|
139
|
+
**Parameters**:
|
|
140
|
+
- `name` (METRIC_EVENT_NAMES): The event name
|
|
141
|
+
- `options` (EventPayload, optional): Additional payload data
|
|
142
|
+
|
|
143
|
+
**Returns**: `void`
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
#### `metrics.setMetricsDisabled(disabled)`
|
|
148
|
+
|
|
149
|
+
Enables or disables metrics collection. When disabled, all pending events are cleared and new events are dropped.
|
|
150
|
+
|
|
151
|
+
**Parameters**:
|
|
152
|
+
- `disabled` (boolean): `true` to disable, `false` to enable
|
|
153
|
+
|
|
154
|
+
**Returns**: `void`
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
#### `MetricsManager.getCommonTrackingFieldForAQMResponse(response)`
|
|
159
|
+
|
|
160
|
+
Static helper that extracts common tracking fields from an AQM success response.
|
|
161
|
+
|
|
162
|
+
**Parameters**:
|
|
163
|
+
- `response` (any): The AQM response object
|
|
164
|
+
|
|
165
|
+
**Returns**: `Record<string, any>` with fields: `agentId`, `agentSessionId`, `teamId`, `siteId`, `orgId`, `eventType`, `trackingId`, `notifTrackingId`
|
|
166
|
+
|
|
167
|
+
**Example**:
|
|
168
|
+
```typescript
|
|
169
|
+
const fields = MetricsManager.getCommonTrackingFieldForAQMResponse(aqmResponse);
|
|
170
|
+
metrics.trackEvent(METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, {
|
|
171
|
+
...fields,
|
|
172
|
+
interactionId: task.interactionId,
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
#### `MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failureResponse)`
|
|
179
|
+
|
|
180
|
+
Static helper that extracts common tracking fields from an AQM failure response.
|
|
181
|
+
|
|
182
|
+
**Parameters**:
|
|
183
|
+
- `failureResponse` (Failure): The AQM failure response object
|
|
184
|
+
|
|
185
|
+
**Returns**: `Record<string, any>` with fields: `agentId`, `trackingId`, `notifTrackingId`, `orgId`, `failureType`, `failureReason`, `reasonCode`
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
#### `MetricsManager.resetInstance()`
|
|
190
|
+
|
|
191
|
+
Resets the singleton instance. Used for testing only.
|
|
192
|
+
|
|
193
|
+
**Returns**: `void`
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Metric Event Names
|
|
198
|
+
|
|
199
|
+
All event names are defined in `METRIC_EVENT_NAMES` (`constants.ts`). Events follow a `<Category> <Action> <Result>` pattern.
|
|
200
|
+
|
|
201
|
+
### Agent Events
|
|
202
|
+
|
|
203
|
+
| Constant | Value | Description |
|
|
204
|
+
|----------|-------|-------------|
|
|
205
|
+
| `STATION_LOGIN_SUCCESS` | `'Station Login Success'` | Agent station login succeeded |
|
|
206
|
+
| `STATION_LOGIN_FAILED` | `'Station Login Failed'` | Agent station login failed |
|
|
207
|
+
| `STATION_LOGOUT_SUCCESS` | `'Station Logout Success'` | Agent station logout succeeded |
|
|
208
|
+
| `STATION_LOGOUT_FAILED` | `'Station Logout Failed'` | Agent station logout failed |
|
|
209
|
+
| `STATION_RELOGIN_SUCCESS` | `'Station Relogin Success'` | Silent relogin succeeded |
|
|
210
|
+
| `STATION_RELOGIN_FAILED` | `'Station Relogin Failed'` | Silent relogin failed |
|
|
211
|
+
| `AGENT_STATE_CHANGE_SUCCESS` | `'Agent State Change Success'` | State change succeeded |
|
|
212
|
+
| `AGENT_STATE_CHANGE_FAILED` | `'Agent State Change Failed'` | State change failed |
|
|
213
|
+
| `FETCH_BUDDY_AGENTS_SUCCESS` | `'Fetch Buddy Agents Success'` | Buddy agents fetch succeeded |
|
|
214
|
+
| `FETCH_BUDDY_AGENTS_FAILED` | `'Fetch Buddy Agents Failed'` | Buddy agents fetch failed |
|
|
215
|
+
| `AGENT_RONA` | `'Agent RONA'` | Agent Ring-On-No-Answer triggered |
|
|
216
|
+
| `AGENT_CONTACT_ASSIGN_FAILED` | `'Agent Contact Assign Failed'` | Contact assignment failed |
|
|
217
|
+
| `AGENT_INVITE_FAILED` | `'Agent Invite Failed'` | Agent invite failed |
|
|
218
|
+
| `AGENT_DEVICE_TYPE_UPDATE_SUCCESS` | `'Agent Device Type Update Success'` | Device type update succeeded |
|
|
219
|
+
| `AGENT_DEVICE_TYPE_UPDATE_FAILED` | `'Agent Device Type Update Failed'` | Device type update failed |
|
|
220
|
+
|
|
221
|
+
### Task Events
|
|
222
|
+
|
|
223
|
+
| Constant | Value | Description |
|
|
224
|
+
|----------|-------|-------------|
|
|
225
|
+
| `TASK_ACCEPT_SUCCESS` / `FAILED` | `'Task Accept ...'` | Task accept result |
|
|
226
|
+
| `TASK_DECLINE_SUCCESS` / `FAILED` | `'Task Decline ...'` | Task decline result |
|
|
227
|
+
| `TASK_END_SUCCESS` / `FAILED` | `'Task End ...'` | Task end result |
|
|
228
|
+
| `TASK_WRAPUP_SUCCESS` / `FAILED` | `'Task Wrapup ...'` | Task wrapup result |
|
|
229
|
+
| `TASK_HOLD_SUCCESS` / `FAILED` | `'Task Hold ...'` | Task hold result |
|
|
230
|
+
| `TASK_RESUME_SUCCESS` / `FAILED` | `'Task Resume ...'` | Task resume result |
|
|
231
|
+
| `TASK_CONSULT_START_SUCCESS` / `FAILED` | `'Task Consult Start ...'` | Consult start result |
|
|
232
|
+
| `TASK_CONSULT_END_SUCCESS` / `FAILED` | `'Task Consult End ...'` | Consult end result |
|
|
233
|
+
| `TASK_TRANSFER_SUCCESS` / `FAILED` | `'Task Transfer ...'` | Transfer result |
|
|
234
|
+
| `TASK_PAUSE_RECORDING_SUCCESS` / `FAILED` | `'Task Pause Recording ...'` | Pause recording result |
|
|
235
|
+
| `TASK_RESUME_RECORDING_SUCCESS` / `FAILED` | `'Task Resume Recording ...'` | Resume recording result |
|
|
236
|
+
| `TASK_ACCEPT_CONSULT_SUCCESS` / `FAILED` | `'Task Accept Consult ...'` | Accept consult result |
|
|
237
|
+
| `TASK_AUTO_ANSWER_SUCCESS` / `FAILED` | `'Task Auto Answer ...'` | Auto-answer result |
|
|
238
|
+
| `TASK_OUTDIAL_SUCCESS` / `FAILED` | `'Task Outdial ...'` | Outdial result |
|
|
239
|
+
|
|
240
|
+
### Conference Events
|
|
241
|
+
|
|
242
|
+
| Constant | Value | Description |
|
|
243
|
+
|----------|-------|-------------|
|
|
244
|
+
| `TASK_CONFERENCE_START_SUCCESS` / `FAILED` | `'Task Conference Start ...'` | Conference start result |
|
|
245
|
+
| `TASK_CONFERENCE_END_SUCCESS` / `FAILED` | `'Task Conference End ...'` | Conference end result |
|
|
246
|
+
| `TASK_CONFERENCE_TRANSFER_SUCCESS` / `FAILED` | `'Task Conference Transfer ...'` | Conference transfer result |
|
|
247
|
+
| `TASK_CONFERENCE_EXIT_SUCCESS` / `FAILED` | `'Task Conference Exit ...'` | Conference exit result |
|
|
248
|
+
| `TASK_SWITCH_CALL_SUCCESS` / `FAILED` | `'Task Switch Call ...'` | Switch call result |
|
|
249
|
+
|
|
250
|
+
### System Events
|
|
251
|
+
|
|
252
|
+
| Constant | Value | Description |
|
|
253
|
+
|----------|-------|-------------|
|
|
254
|
+
| `WEBSOCKET_REGISTER_SUCCESS` / `FAILED` | `'Websocket Register ...'` | WebSocket registration result |
|
|
255
|
+
| `WEBSOCKET_DEREGISTER_SUCCESS` / `FAIL` | `'Websocket Deregister ...'` | WebSocket deregistration result |
|
|
256
|
+
| `WEBSOCKET_EVENT_RECEIVED` | `'Websocket Event Received'` | WebSocket event received |
|
|
257
|
+
| `UPLOAD_LOGS_SUCCESS` / `FAILED` | `'Upload Logs ...'` | Log upload result |
|
|
258
|
+
|
|
259
|
+
### Data Fetch Events
|
|
260
|
+
|
|
261
|
+
| Constant | Value | Description |
|
|
262
|
+
|----------|-------|-------------|
|
|
263
|
+
| `ENTRYPOINT_FETCH_SUCCESS` / `FAILED` | `'Entrypoint Fetch ...'` | Entry point fetch result |
|
|
264
|
+
| `ADDRESSBOOK_FETCH_SUCCESS` / `FAILED` | `'AddressBook Fetch ...'` | Address book fetch result |
|
|
265
|
+
| `QUEUE_FETCH_SUCCESS` / `FAILED` | `'Queue Fetch ...'` | Queue fetch result |
|
|
266
|
+
| `OUTDIAL_ANI_EP_FETCH_SUCCESS` / `FAILED` | `'Outdial ANI Entries Fetch ...'` | Outdial ANI entries fetch result |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Behavioral Event Taxonomy
|
|
271
|
+
|
|
272
|
+
Each behavioral event maps to a structured taxonomy in `behavioral-events.ts`:
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
{product}.{agent}.{target}.{verb}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
- **product**: Always `'wxcc_sdk'` (from `PRODUCT_NAME`)
|
|
279
|
+
- **agent**: `'user'` for user-initiated actions, `'service'` for system-generated events
|
|
280
|
+
- **target**: Snake_case description of the action (e.g., `'station_login'`, `'task_accept'`)
|
|
281
|
+
- **verb**: `'complete'` for success, `'fail'` for failure, `'set'` for RONA events
|
|
282
|
+
|
|
283
|
+
**Example**: `STATION_LOGIN_SUCCESS` maps to `wxcc_sdk.user.station_login.complete`
|
|
284
|
+
|
|
285
|
+
> **Note**: The following events do **not** have behavioral taxonomy mappings in `behavioral-events.ts`:
|
|
286
|
+
> - `WEBSOCKET_DEREGISTER_SUCCESS`
|
|
287
|
+
> - `WEBSOCKET_DEREGISTER_FAIL`
|
|
288
|
+
> - `WEBSOCKET_EVENT_RECEIVED`
|
|
289
|
+
>
|
|
290
|
+
> Calling `trackBehavioralEvent` with these event names will push an event with an `undefined` taxonomy.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Usage Pattern (timeEvent + trackEvent)
|
|
295
|
+
|
|
296
|
+
The standard pattern used throughout the Contact Center SDK:
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
const metrics = MetricsManager.getInstance();
|
|
300
|
+
|
|
301
|
+
// 1. Start timing before the operation
|
|
302
|
+
metrics.timeEvent([
|
|
303
|
+
METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,
|
|
304
|
+
METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,
|
|
305
|
+
]);
|
|
306
|
+
|
|
307
|
+
try {
|
|
308
|
+
const response = await performLogin(params);
|
|
309
|
+
|
|
310
|
+
// 2a. Track success (duration_ms auto-added)
|
|
311
|
+
metrics.trackEvent(METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS, {
|
|
312
|
+
...MetricsManager.getCommonTrackingFieldForAQMResponse(response),
|
|
313
|
+
});
|
|
314
|
+
} catch (error) {
|
|
315
|
+
// 2b. Track failure (duration_ms auto-added)
|
|
316
|
+
metrics.trackEvent(METRIC_EVENT_NAMES.STATION_LOGIN_FAILED, {
|
|
317
|
+
...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Error Handling
|
|
325
|
+
|
|
326
|
+
MetricsManager is designed to be non-blocking. Metric failures do not propagate to callers:
|
|
327
|
+
|
|
328
|
+
- If `webex` is not yet ready, events are queued in `pendingBehavioralEvents`, `pendingOperationalEvents`, or `pendingBusinessEvents`
|
|
329
|
+
- Once `webex.ready` fires, all pending events are flushed
|
|
330
|
+
- If metrics are disabled via `setMetricsDisabled(true)`, all track methods silently return
|
|
331
|
+
- Invalid metric types log an error via `LoggerProxy` but do not throw
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Dependencies
|
|
336
|
+
|
|
337
|
+
- **`@webex/internal-plugin-metrics`**: Provides `webex.internal.newMetrics` for actual metric submission (`submitBehavioralEvent`, `submitOperationalEvent`, `submitBusinessEvent`)
|
|
338
|
+
- **`LoggerProxy`**: Used for error logging within the metrics module
|
|
339
|
+
- **`Failure` type** (from `services/core/GlobalTypes`): Used in `getCommonTrackingFieldForAQMResponseFailed`
|
|
340
|
+
- **`PRODUCT_NAME`** (from `constants.ts`): Set to `'wxcc_sdk'`, used as the product identifier in behavioral taxonomy and as prefix for operational/business event names
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Related
|
|
345
|
+
|
|
346
|
+
- [`MetricsManager.ts`](../MetricsManager.ts) - Singleton metrics manager implementation
|
|
347
|
+
- [`behavioral-events.ts`](../behavioral-events.ts) - Event taxonomy mapping
|
|
348
|
+
- [`constants.ts`](../constants.ts) - `METRIC_EVENT_NAMES` definitions
|
|
349
|
+
- [`../../constants.ts`](../../constants.ts) - `PRODUCT_NAME` constant
|
|
350
|
+
- [`services/core/GlobalTypes.ts`](../../services/core/GlobalTypes.ts) - `Failure` type definition
|