@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
|
@@ -313,6 +313,104 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
313
313
|
target: 'task_outdial',
|
|
314
314
|
verb: 'fail',
|
|
315
315
|
},
|
|
316
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS]: {
|
|
317
|
+
product,
|
|
318
|
+
agent: 'user',
|
|
319
|
+
target: 'task_mute_webex_together',
|
|
320
|
+
verb: 'complete',
|
|
321
|
+
},
|
|
322
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED]: {
|
|
323
|
+
product,
|
|
324
|
+
agent: 'user',
|
|
325
|
+
target: 'task_mute_webex_together',
|
|
326
|
+
verb: 'fail',
|
|
327
|
+
},
|
|
328
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS]: {
|
|
329
|
+
product,
|
|
330
|
+
agent: 'user',
|
|
331
|
+
target: 'task_dtmf_webex_together',
|
|
332
|
+
verb: 'complete',
|
|
333
|
+
},
|
|
334
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED]: {
|
|
335
|
+
product,
|
|
336
|
+
agent: 'user',
|
|
337
|
+
target: 'task_dtmf_webex_together',
|
|
338
|
+
verb: 'fail',
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
// Webex Together (wxApp)
|
|
342
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS]: {
|
|
343
|
+
product,
|
|
344
|
+
agent: 'user',
|
|
345
|
+
target: 'task_accept_webex_together',
|
|
346
|
+
verb: 'complete',
|
|
347
|
+
},
|
|
348
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]: {
|
|
349
|
+
product,
|
|
350
|
+
agent: 'user',
|
|
351
|
+
target: 'task_accept_webex_together',
|
|
352
|
+
verb: 'fail',
|
|
353
|
+
},
|
|
354
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS]: {
|
|
355
|
+
product,
|
|
356
|
+
agent: 'user',
|
|
357
|
+
target: 'task_reject_webex_together',
|
|
358
|
+
verb: 'complete',
|
|
359
|
+
},
|
|
360
|
+
[METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]: {
|
|
361
|
+
product,
|
|
362
|
+
agent: 'user',
|
|
363
|
+
target: 'task_reject_webex_together',
|
|
364
|
+
verb: 'fail',
|
|
365
|
+
},
|
|
366
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_SUCCESS]: {
|
|
367
|
+
product,
|
|
368
|
+
agent: 'user',
|
|
369
|
+
target: 'webex_together_session_init',
|
|
370
|
+
verb: 'complete',
|
|
371
|
+
},
|
|
372
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_INIT_FAILED]: {
|
|
373
|
+
product,
|
|
374
|
+
agent: 'user',
|
|
375
|
+
target: 'webex_together_session_init',
|
|
376
|
+
verb: 'fail',
|
|
377
|
+
},
|
|
378
|
+
[METRIC_EVENT_NAMES.WXAPP_SESSION_SKIPPED]: {
|
|
379
|
+
product,
|
|
380
|
+
agent: 'user',
|
|
381
|
+
target: 'webex_together_session_init',
|
|
382
|
+
verb: 'ignore',
|
|
383
|
+
},
|
|
384
|
+
[METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_SUCCESS]: {
|
|
385
|
+
product,
|
|
386
|
+
agent: 'user',
|
|
387
|
+
target: 'webex_together_usersub_publish',
|
|
388
|
+
verb: 'complete',
|
|
389
|
+
},
|
|
390
|
+
[METRIC_EVENT_NAMES.WXAPP_USERSUB_PUBLISH_FAILED]: {
|
|
391
|
+
product,
|
|
392
|
+
agent: 'user',
|
|
393
|
+
target: 'webex_together_usersub_publish',
|
|
394
|
+
verb: 'fail',
|
|
395
|
+
},
|
|
396
|
+
[METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_SUCCESS]: {
|
|
397
|
+
product,
|
|
398
|
+
agent: 'user',
|
|
399
|
+
target: 'webex_together_mercury_subscribe',
|
|
400
|
+
verb: 'complete',
|
|
401
|
+
},
|
|
402
|
+
[METRIC_EVENT_NAMES.WXAPP_MERCURY_SUBSCRIBE_FAILED]: {
|
|
403
|
+
product,
|
|
404
|
+
agent: 'user',
|
|
405
|
+
target: 'webex_together_mercury_subscribe',
|
|
406
|
+
verb: 'fail',
|
|
407
|
+
},
|
|
408
|
+
[METRIC_EVENT_NAMES.WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING]: {
|
|
409
|
+
product,
|
|
410
|
+
agent: 'user',
|
|
411
|
+
target: 'webex_together_offer_participant_fields',
|
|
412
|
+
verb: 'fail',
|
|
413
|
+
},
|
|
316
414
|
|
|
317
415
|
// Conference Tasks
|
|
318
416
|
[METRIC_EVENT_NAMES.TASK_CONFERENCE_START_SUCCESS]: {
|
|
@@ -352,6 +450,48 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
352
450
|
verb: 'fail',
|
|
353
451
|
},
|
|
354
452
|
|
|
453
|
+
// Conference Exit
|
|
454
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS]: {
|
|
455
|
+
product,
|
|
456
|
+
agent: 'user',
|
|
457
|
+
target: 'task_conference_exit',
|
|
458
|
+
verb: 'complete',
|
|
459
|
+
},
|
|
460
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED]: {
|
|
461
|
+
product,
|
|
462
|
+
agent: 'user',
|
|
463
|
+
target: 'task_conference_exit',
|
|
464
|
+
verb: 'fail',
|
|
465
|
+
},
|
|
466
|
+
|
|
467
|
+
// Conference Participant Drop
|
|
468
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS]: {
|
|
469
|
+
product,
|
|
470
|
+
agent: 'user',
|
|
471
|
+
target: 'task_conference_participant_drop',
|
|
472
|
+
verb: 'complete',
|
|
473
|
+
},
|
|
474
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_FAILED]: {
|
|
475
|
+
product,
|
|
476
|
+
agent: 'user',
|
|
477
|
+
target: 'task_conference_participant_drop',
|
|
478
|
+
verb: 'fail',
|
|
479
|
+
},
|
|
480
|
+
|
|
481
|
+
// Switch Call
|
|
482
|
+
[METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS]: {
|
|
483
|
+
product,
|
|
484
|
+
agent: 'user',
|
|
485
|
+
target: 'task_switch_call',
|
|
486
|
+
verb: 'complete',
|
|
487
|
+
},
|
|
488
|
+
[METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED]: {
|
|
489
|
+
product,
|
|
490
|
+
agent: 'user',
|
|
491
|
+
target: 'task_switch_call',
|
|
492
|
+
verb: 'fail',
|
|
493
|
+
},
|
|
494
|
+
|
|
355
495
|
// upload logs
|
|
356
496
|
[METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS]: {
|
|
357
497
|
product,
|
|
@@ -477,6 +617,56 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
477
617
|
target: 'campaign_preview_remove',
|
|
478
618
|
verb: 'fail',
|
|
479
619
|
},
|
|
620
|
+
|
|
621
|
+
// User Preference API Events
|
|
622
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS]: {
|
|
623
|
+
product,
|
|
624
|
+
agent: 'user',
|
|
625
|
+
target: 'user_preference_get',
|
|
626
|
+
verb: 'complete',
|
|
627
|
+
},
|
|
628
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED]: {
|
|
629
|
+
product,
|
|
630
|
+
agent: 'user',
|
|
631
|
+
target: 'user_preference_get',
|
|
632
|
+
verb: 'fail',
|
|
633
|
+
},
|
|
634
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS]: {
|
|
635
|
+
product,
|
|
636
|
+
agent: 'user',
|
|
637
|
+
target: 'user_preference_create',
|
|
638
|
+
verb: 'complete',
|
|
639
|
+
},
|
|
640
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED]: {
|
|
641
|
+
product,
|
|
642
|
+
agent: 'user',
|
|
643
|
+
target: 'user_preference_create',
|
|
644
|
+
verb: 'fail',
|
|
645
|
+
},
|
|
646
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS]: {
|
|
647
|
+
product,
|
|
648
|
+
agent: 'user',
|
|
649
|
+
target: 'user_preference_update',
|
|
650
|
+
verb: 'complete',
|
|
651
|
+
},
|
|
652
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED]: {
|
|
653
|
+
product,
|
|
654
|
+
agent: 'user',
|
|
655
|
+
target: 'user_preference_update',
|
|
656
|
+
verb: 'fail',
|
|
657
|
+
},
|
|
658
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS]: {
|
|
659
|
+
product,
|
|
660
|
+
agent: 'user',
|
|
661
|
+
target: 'user_preference_delete',
|
|
662
|
+
verb: 'complete',
|
|
663
|
+
},
|
|
664
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED]: {
|
|
665
|
+
product,
|
|
666
|
+
agent: 'user',
|
|
667
|
+
target: 'user_preference_delete',
|
|
668
|
+
verb: 'fail',
|
|
669
|
+
},
|
|
480
670
|
};
|
|
481
671
|
|
|
482
672
|
/**
|
package/src/metrics/constants.ts
CHANGED
|
@@ -129,20 +129,44 @@ export const METRIC_EVENT_NAMES = {
|
|
|
129
129
|
TASK_CONFERENCE_END_FAILED: 'Task Conference End Failed',
|
|
130
130
|
TASK_CONFERENCE_TRANSFER_SUCCESS: 'Task Conference Transfer Success',
|
|
131
131
|
TASK_CONFERENCE_TRANSFER_FAILED: 'Task Conference Transfer Failed',
|
|
132
|
+
TASK_CONFERENCE_EXIT_SUCCESS: 'Task Conference Exit Success',
|
|
133
|
+
TASK_CONFERENCE_EXIT_FAILED: 'Task Conference Exit Failed',
|
|
134
|
+
TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS: 'Task Conference Participant Drop Success',
|
|
135
|
+
TASK_CONFERENCE_PARTICIPANT_DROP_FAILED: 'Task Conference Participant Drop Failed',
|
|
136
|
+
TASK_SWITCH_CALL_SUCCESS: 'Task Switch Call Success',
|
|
137
|
+
TASK_SWITCH_CALL_FAILED: 'Task Switch Call Failed',
|
|
132
138
|
|
|
133
139
|
TASK_OUTDIAL_SUCCESS: 'Task Outdial Success',
|
|
134
140
|
TASK_OUTDIAL_FAILED: 'Task Outdial Failed',
|
|
135
141
|
|
|
142
|
+
WXAPP_TASK_MUTE_SUCCESS: 'WxApp Task Mute Success',
|
|
143
|
+
WXAPP_TASK_MUTE_FAILED: 'WxApp Task Mute Failed',
|
|
144
|
+
WXAPP_TASK_DTMF_SUCCESS: 'WxApp Task Dtmf Success',
|
|
145
|
+
WXAPP_TASK_DTMF_FAILED: 'WxApp Task Dtmf Failed',
|
|
146
|
+
|
|
147
|
+
// WxApp Better Together
|
|
148
|
+
WXAPP_TASK_ACCEPT_SUCCESS: 'WxApp Task Accept Success',
|
|
149
|
+
WXAPP_TASK_ACCEPT_FAILED: 'WxApp Task Accept Failed',
|
|
150
|
+
WXAPP_TASK_DECLINE_SUCCESS: 'WxApp Task Decline Success',
|
|
151
|
+
WXAPP_TASK_DECLINE_FAILED: 'WxApp Task Decline Failed',
|
|
152
|
+
WXAPP_SESSION_INIT_SUCCESS: 'WxApp Session Init Success',
|
|
153
|
+
WXAPP_SESSION_INIT_FAILED: 'WxApp Session Init Failed',
|
|
154
|
+
WXAPP_SESSION_SKIPPED: 'WxApp Session Skipped',
|
|
155
|
+
WXAPP_USERSUB_PUBLISH_SUCCESS: 'WxApp Usersub Publish Success',
|
|
156
|
+
WXAPP_USERSUB_PUBLISH_FAILED: 'WxApp Usersub Publish Failed',
|
|
157
|
+
WXAPP_MERCURY_SUBSCRIBE_SUCCESS: 'WxApp Mercury Subscribe Success',
|
|
158
|
+
WXAPP_MERCURY_SUBSCRIBE_FAILED: 'WxApp Mercury Subscribe Failed',
|
|
159
|
+
WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING: 'WxApp Offer Participant Fields Missing',
|
|
160
|
+
|
|
136
161
|
UPLOAD_LOGS_SUCCESS: 'Upload Logs Success',
|
|
137
162
|
UPLOAD_LOGS_FAILED: 'Upload Logs Failed',
|
|
138
163
|
WEBSOCKET_DEREGISTER_SUCCESS: 'Websocket Deregister Success',
|
|
139
164
|
WEBSOCKET_DEREGISTER_FAIL: 'Websocket Deregister Failed',
|
|
140
165
|
|
|
141
|
-
// WebSocket message events
|
|
142
|
-
WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
|
|
143
|
-
|
|
144
166
|
AGENT_DEVICE_TYPE_UPDATE_SUCCESS: 'Agent Device Type Update Success',
|
|
145
167
|
AGENT_DEVICE_TYPE_UPDATE_FAILED: 'Agent Device Type Update Failed',
|
|
168
|
+
// WebSocket message events
|
|
169
|
+
WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
|
|
146
170
|
|
|
147
171
|
// EntryPoint API Events
|
|
148
172
|
ENTRYPOINT_FETCH_SUCCESS: 'Entrypoint Fetch Success',
|
|
@@ -168,12 +192,43 @@ export const METRIC_EVENT_NAMES = {
|
|
|
168
192
|
CAMPAIGN_PREVIEW_REMOVE_SUCCESS: 'Campaign Preview Remove Success',
|
|
169
193
|
CAMPAIGN_PREVIEW_REMOVE_FAILED: 'Campaign Preview Remove Failed',
|
|
170
194
|
|
|
171
|
-
// AI Assistant
|
|
195
|
+
// AI Assistant Transcript events
|
|
172
196
|
AI_ASSISTANT_SEND_EVENT_SUCCESS: 'AI Assistant Send Event Success',
|
|
173
197
|
AI_ASSISTANT_SEND_EVENT_FAILED: 'AI Assistant Send Event Failed',
|
|
198
|
+
AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS: 'AI Assistant Get Real Time Assistance Success',
|
|
199
|
+
AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED: 'AI Assistant Get Real Time Assistance Failed',
|
|
200
|
+
AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS:
|
|
201
|
+
'AI Assistant Send Real Time Assistance User Action Success',
|
|
202
|
+
AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED:
|
|
203
|
+
'AI Assistant Send Real Time Assistance User Action Failed',
|
|
174
204
|
AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS:
|
|
175
205
|
'AI Assistant Fetch Historic Transcripts Success',
|
|
176
206
|
AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED: 'AI Assistant Fetch Historic Transcripts Failed',
|
|
207
|
+
AI_ASSISTANT_WELLNESS_ACTION_ACCEPTED: 'AI Assistant Wellness Action Accepted',
|
|
208
|
+
AI_ASSISTANT_WELLNESS_ACTION_FAILED: 'AI Assistant Wellness Action Failed',
|
|
209
|
+
AI_ASSISTANT_WELLNESS_EVENT_INVALID: 'AI Assistant Wellness Event Invalid',
|
|
210
|
+
WELLBEING_BREAK_IDLE_CODE_FETCH_SUCCESS: 'Wellbeing Break Idle Code Fetch Success',
|
|
211
|
+
WELLBEING_BREAK_IDLE_CODE_FETCH_FAILED: 'Wellbeing Break Idle Code Fetch Failed',
|
|
212
|
+
|
|
213
|
+
// AI summary events
|
|
214
|
+
AI_SUMMARY_GET_POST_CALL_SUCCESS: 'Post Call Summary Get Success',
|
|
215
|
+
AI_SUMMARY_GET_POST_CALL_FAILED: 'Post Call Summary Get Failed',
|
|
216
|
+
AI_SUMMARY_GET_MID_CALL_SUCCESS: 'Mid Call Summary Get Success',
|
|
217
|
+
AI_SUMMARY_GET_MID_CALL_FAILED: 'Mid Call Summary Get Failed',
|
|
218
|
+
AI_SUMMARY_POST_CALL_RESPONSE_SUCCESS: 'Post Call Summary Response Success',
|
|
219
|
+
AI_SUMMARY_POST_CALL_RESPONSE_FAILED: 'Post Call Summary Response Failed',
|
|
220
|
+
AI_SUMMARY_MID_CALL_RESPONSE_SUCCESS: 'Mid Call Summary Response Success',
|
|
221
|
+
AI_SUMMARY_MID_CALL_RESPONSE_FAILED: 'Mid Call Summary Response Failed',
|
|
222
|
+
|
|
223
|
+
// User Preference API Events
|
|
224
|
+
USER_PREFERENCE_GET_SUCCESS: 'User Preference Get Success',
|
|
225
|
+
USER_PREFERENCE_GET_FAILED: 'User Preference Get Failed',
|
|
226
|
+
USER_PREFERENCE_CREATE_SUCCESS: 'User Preference Create Success',
|
|
227
|
+
USER_PREFERENCE_CREATE_FAILED: 'User Preference Create Failed',
|
|
228
|
+
USER_PREFERENCE_UPDATE_SUCCESS: 'User Preference Update Success',
|
|
229
|
+
USER_PREFERENCE_UPDATE_FAILED: 'User Preference Update Failed',
|
|
230
|
+
USER_PREFERENCE_DELETE_SUCCESS: 'User Preference Delete Success',
|
|
231
|
+
USER_PREFERENCE_DELETE_FAILED: 'User Preference Delete Failed',
|
|
177
232
|
} as const;
|
|
178
233
|
|
|
179
234
|
/**
|
|
@@ -74,7 +74,8 @@ export class AddressBook {
|
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Fetches address book entries for a specific address book using the entry API
|
|
77
|
-
* @param {AddressBookEntrySearchParams} [params] - Search and
|
|
77
|
+
* @param {AddressBookEntrySearchParams} [params] - Search, pagination, and optional sort parameters
|
|
78
|
+
* including addressBookId. Sorting defaults to name ascending.
|
|
78
79
|
* @returns {Promise<AddressBookEntriesResponse>} Promise resolving to address book entries
|
|
79
80
|
* @throws {Error} If the API call fails
|
|
80
81
|
* @public
|
|
@@ -102,12 +103,21 @@ export class AddressBook {
|
|
|
102
103
|
search,
|
|
103
104
|
filter,
|
|
104
105
|
attributes,
|
|
106
|
+
sortBy = 'name',
|
|
107
|
+
sortOrder = 'asc',
|
|
105
108
|
} = params;
|
|
106
109
|
|
|
107
110
|
// Use provided addressBookId or fall back to agent's address book
|
|
108
111
|
const bookId = addressBookId || this.getAddressBookId();
|
|
109
112
|
const orgId = this.webex.credentials.getOrgId();
|
|
110
|
-
const
|
|
113
|
+
const hasCustomSort = sortBy !== 'name' || sortOrder !== 'asc';
|
|
114
|
+
const isSearchRequest = !!(search || filter || attributes || hasCustomSort);
|
|
115
|
+
const canUseCache = this.pageCache.canUseCache({
|
|
116
|
+
search,
|
|
117
|
+
filter,
|
|
118
|
+
attributes,
|
|
119
|
+
sortBy: hasCustomSort ? sortBy : undefined,
|
|
120
|
+
});
|
|
111
121
|
|
|
112
122
|
LoggerProxy.info('Fetching address book entries', {
|
|
113
123
|
module: 'AddressBook',
|
|
@@ -121,8 +131,8 @@ export class AddressBook {
|
|
|
121
131
|
},
|
|
122
132
|
});
|
|
123
133
|
|
|
124
|
-
//
|
|
125
|
-
if (
|
|
134
|
+
// Default name-ascending pagination is cache-compatible; result-changing overrides are not.
|
|
135
|
+
if (canUseCache) {
|
|
126
136
|
const cacheKey = this.pageCache.buildCacheKey(bookId, page, pageSize);
|
|
127
137
|
const cachedPage = this.pageCache.getCachedPage(cacheKey);
|
|
128
138
|
|
|
@@ -190,6 +200,7 @@ export class AddressBook {
|
|
|
190
200
|
if (filter) queryParams.append('filter', filter);
|
|
191
201
|
if (attributes) queryParams.append('attributes', attributes);
|
|
192
202
|
if (search) queryParams.append('search', search);
|
|
203
|
+
if (sortBy) queryParams.append('sort', `${sortBy},${sortOrder.toUpperCase()}`);
|
|
193
204
|
|
|
194
205
|
const resource = endPointMap.addressBookEntries(orgId, bookId, queryParams.toString());
|
|
195
206
|
|
|
@@ -244,8 +255,8 @@ export class AddressBook {
|
|
|
244
255
|
);
|
|
245
256
|
}
|
|
246
257
|
|
|
247
|
-
// Cache the
|
|
248
|
-
if (
|
|
258
|
+
// Cache only the invariant default-order pagination shape.
|
|
259
|
+
if (canUseCache && response.body?.data) {
|
|
249
260
|
const cacheKey = this.pageCache.buildCacheKey(bookId, page, pageSize);
|
|
250
261
|
this.pageCache.cachePage(cacheKey, response.body.data, response.body.meta);
|
|
251
262
|
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import LoggerProxy from '../logger-proxy';
|
|
2
|
+
import {CC_FILE, METHODS} from '../constants';
|
|
3
|
+
import {HTTP_METHODS, IHttpResponse, WebexSDK} from '../types';
|
|
4
|
+
import {getErrorDetails} from './core/Utils';
|
|
5
|
+
import {isWxAppCallNotFoundError} from './wxAppTelephonyUtils';
|
|
6
|
+
|
|
7
|
+
const ANSWER_CALL_ON_WEBEX_FILE = 'AnswerCallOnWebexService';
|
|
8
|
+
|
|
9
|
+
export type WxAppTelephonyError = Error & {
|
|
10
|
+
isWxAppTelephonyError: true;
|
|
11
|
+
trackingId?: string;
|
|
12
|
+
status?: number | string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const extractWxAppTrackingId = (source: unknown): string | undefined => {
|
|
16
|
+
const sourceObj = source as {details?: {trackingId?: string}; trackingId?: string};
|
|
17
|
+
|
|
18
|
+
return sourceObj?.details?.trackingId || sourceObj?.trackingId;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const extractWxAppHttpStatus = (source: unknown): number | string | undefined => {
|
|
22
|
+
const obj = source as {
|
|
23
|
+
statusCode?: number;
|
|
24
|
+
status?: number | string;
|
|
25
|
+
details?: {status?: number | string};
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
return obj?.statusCode ?? obj?.status ?? obj?.details?.status;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const markWxAppTelephonyError = (error: Error, source: unknown): WxAppTelephonyError => {
|
|
32
|
+
const marked = error as WxAppTelephonyError;
|
|
33
|
+
marked.isWxAppTelephonyError = true;
|
|
34
|
+
const trackingId = extractWxAppTrackingId(source);
|
|
35
|
+
if (trackingId) {
|
|
36
|
+
marked.trackingId = trackingId;
|
|
37
|
+
}
|
|
38
|
+
const status = extractWxAppHttpStatus(source);
|
|
39
|
+
if (status !== undefined) {
|
|
40
|
+
marked.status = status;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return marked;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type AnswerCallParams = {
|
|
47
|
+
callId: string;
|
|
48
|
+
endpointId: string;
|
|
49
|
+
lineOwnerId?: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export type CallIdParams = {
|
|
53
|
+
callId: string;
|
|
54
|
+
lineOwnerId?: string;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export type TransmitDtmfParams = CallIdParams & {
|
|
58
|
+
dtmf: string;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export type CallDetailsResponse = {
|
|
62
|
+
muted?: boolean;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* REST telephony client for wxApp thick-client answer (WXCC-6026).
|
|
67
|
+
* Separate from WebCallingService (WebRTC/Mobius).
|
|
68
|
+
*/
|
|
69
|
+
export default class AnswerCallOnWebexService {
|
|
70
|
+
private webex: WebexSDK;
|
|
71
|
+
|
|
72
|
+
constructor(webex: WebexSDK) {
|
|
73
|
+
this.webex = webex;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private getTelephonyBaseUrl(): string {
|
|
77
|
+
const services = this.webex.internal.services;
|
|
78
|
+
const hydraUrl = services._serviceUrls?.hydra || services.get('hydra');
|
|
79
|
+
|
|
80
|
+
if (!hydraUrl) {
|
|
81
|
+
throw new Error('Telephony base URL is unavailable');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return `${hydraUrl.replace(/\/$/, '')}/telephony/calls`;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private extractTrackingId(source: unknown): string | undefined {
|
|
88
|
+
return extractWxAppTrackingId(source);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private async telephonyRequest(
|
|
92
|
+
resource: string,
|
|
93
|
+
method: HTTP_METHODS,
|
|
94
|
+
body: Record<string, unknown>,
|
|
95
|
+
logMethod: string
|
|
96
|
+
): Promise<IHttpResponse> {
|
|
97
|
+
try {
|
|
98
|
+
const uri = `${this.getTelephonyBaseUrl()}${resource}`;
|
|
99
|
+
|
|
100
|
+
LoggerProxy.log(`AnswerCallOnWebexService.${logMethod} request`, {
|
|
101
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
102
|
+
method: logMethod,
|
|
103
|
+
data: {uri, bodyKeys: Object.keys(body)},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const response = (await this.webex.request({
|
|
107
|
+
uri,
|
|
108
|
+
method,
|
|
109
|
+
body,
|
|
110
|
+
addAuthHeader: true,
|
|
111
|
+
})) as IHttpResponse;
|
|
112
|
+
|
|
113
|
+
LoggerProxy.log(`AnswerCallOnWebexService.${logMethod} success`, {
|
|
114
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
115
|
+
method: logMethod,
|
|
116
|
+
data: {statusCode: response.statusCode},
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return response;
|
|
120
|
+
} catch (error) {
|
|
121
|
+
const trackingId = this.extractTrackingId(error);
|
|
122
|
+
LoggerProxy.error(`AnswerCallOnWebexService.${logMethod} failed: ${error}`, {
|
|
123
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
124
|
+
method: logMethod,
|
|
125
|
+
data: {
|
|
126
|
+
trackingId,
|
|
127
|
+
status: extractWxAppHttpStatus(error),
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
const {error: detailedError} = getErrorDetails(error, logMethod, CC_FILE);
|
|
131
|
+
throw markWxAppTelephonyError(detailedError, error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public answerCall(params: AnswerCallParams): Promise<IHttpResponse> {
|
|
136
|
+
const {callId, endpointId, lineOwnerId} = params;
|
|
137
|
+
|
|
138
|
+
return this.telephonyRequest(
|
|
139
|
+
'/answer',
|
|
140
|
+
HTTP_METHODS.POST,
|
|
141
|
+
{
|
|
142
|
+
callId,
|
|
143
|
+
endpointId,
|
|
144
|
+
...(lineOwnerId ? {lineOwnerId} : {}),
|
|
145
|
+
},
|
|
146
|
+
METHODS.ACCEPT
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
public rejectCall(params: CallIdParams): Promise<IHttpResponse> {
|
|
151
|
+
const {callId, lineOwnerId} = params;
|
|
152
|
+
|
|
153
|
+
return this.telephonyRequest(
|
|
154
|
+
'/reject',
|
|
155
|
+
HTTP_METHODS.POST,
|
|
156
|
+
{callId, ...(lineOwnerId ? {lineOwnerId} : {})},
|
|
157
|
+
METHODS.REJECT
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
public muteCall(params: CallIdParams): Promise<IHttpResponse> {
|
|
162
|
+
const {callId, lineOwnerId} = params;
|
|
163
|
+
|
|
164
|
+
return this.telephonyRequest(
|
|
165
|
+
'/mute',
|
|
166
|
+
HTTP_METHODS.POST,
|
|
167
|
+
{callId, ...(lineOwnerId ? {lineOwnerId} : {})},
|
|
168
|
+
METHODS.TOGGLE_MUTE
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public unmuteCall(params: CallIdParams): Promise<IHttpResponse> {
|
|
173
|
+
const {callId, lineOwnerId} = params;
|
|
174
|
+
|
|
175
|
+
return this.telephonyRequest(
|
|
176
|
+
'/unmute',
|
|
177
|
+
HTTP_METHODS.POST,
|
|
178
|
+
{callId, ...(lineOwnerId ? {lineOwnerId} : {})},
|
|
179
|
+
METHODS.TOGGLE_MUTE
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public transmitDtmf(params: TransmitDtmfParams): Promise<IHttpResponse> {
|
|
184
|
+
const {callId, dtmf, lineOwnerId} = params;
|
|
185
|
+
|
|
186
|
+
return this.telephonyRequest(
|
|
187
|
+
'/transmitDtmf',
|
|
188
|
+
HTTP_METHODS.POST,
|
|
189
|
+
{callId, dtmf, ...(lineOwnerId ? {lineOwnerId} : {})},
|
|
190
|
+
METHODS.TRANSMIT_DTMF
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
public async getCallDetails(params: CallIdParams): Promise<CallDetailsResponse> {
|
|
195
|
+
const {callId, lineOwnerId} = params;
|
|
196
|
+
const lineOwnerIdQuery = lineOwnerId ? `?lineOwnerId=${encodeURIComponent(lineOwnerId)}` : '';
|
|
197
|
+
const uri = `${this.getTelephonyBaseUrl()}/${callId}${lineOwnerIdQuery}`;
|
|
198
|
+
|
|
199
|
+
try {
|
|
200
|
+
LoggerProxy.log('AnswerCallOnWebexService.getCallDetails request', {
|
|
201
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
202
|
+
method: METHODS.GET_CALL_DETAILS_ON_WEBEX,
|
|
203
|
+
data: {callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8)},
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
const response = (await this.webex.request({
|
|
207
|
+
uri,
|
|
208
|
+
method: HTTP_METHODS.GET,
|
|
209
|
+
addAuthHeader: true,
|
|
210
|
+
})) as IHttpResponse;
|
|
211
|
+
|
|
212
|
+
return (response.body ?? {}) as CallDetailsResponse;
|
|
213
|
+
} catch (error) {
|
|
214
|
+
if (isWxAppCallNotFoundError(error)) {
|
|
215
|
+
const err =
|
|
216
|
+
error instanceof Error
|
|
217
|
+
? error
|
|
218
|
+
: new Error(String((error as {message?: string})?.message ?? error));
|
|
219
|
+
throw markWxAppTelephonyError(err, error);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const trackingId = this.extractTrackingId(error);
|
|
223
|
+
LoggerProxy.error(`AnswerCallOnWebexService.getCallDetails failed: ${error}`, {
|
|
224
|
+
module: ANSWER_CALL_ON_WEBEX_FILE,
|
|
225
|
+
method: METHODS.GET_CALL_DETAILS_ON_WEBEX,
|
|
226
|
+
data: {
|
|
227
|
+
trackingId,
|
|
228
|
+
status: extractWxAppHttpStatus(error),
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
const {error: detailedError} = getErrorDetails(
|
|
232
|
+
error,
|
|
233
|
+
METHODS.GET_CALL_DETAILS_ON_WEBEX,
|
|
234
|
+
CC_FILE
|
|
235
|
+
);
|
|
236
|
+
throw markWxAppTelephonyError(detailedError, error);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|