@webex/contact-center 3.11.0 → 3.12.0-llmrefactor.2
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 +882 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +46 -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 +341 -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 +379 -50
- package/dist/cc.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +22 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +27 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +114 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +32 -3
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +318 -0
- package/dist/services/ApiAiAssistant.js.map +1 -0
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/agent/types.js.map +1 -1
- package/dist/services/config/Util.js +8 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +35 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +41 -2
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +66 -8
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +27 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +122 -25
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +92 -17
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +22 -6
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/connection-service.js +3 -1
- package/dist/services/core/websocket/connection-service.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +688 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +45 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +751 -457
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +220 -23
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +23 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +129 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +77 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +873 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +567 -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 +382 -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 +603 -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 +227 -4
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1044 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +149 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/types/cc.d.ts +894 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +66 -0
- package/dist/types/index.d.ts +199 -0
- package/dist/types/logger-proxy.d.ts +71 -0
- package/dist/types/metrics/MetricsManager.d.ts +223 -0
- package/dist/types/metrics/behavioral-events.d.ts +29 -0
- package/dist/types/metrics/constants.d.ts +181 -0
- package/dist/types/services/AddressBook.d.ts +74 -0
- package/dist/types/services/ApiAiAssistant.d.ts +49 -0
- package/dist/types/services/EntryPoint.d.ts +67 -0
- package/dist/types/services/Queue.d.ts +76 -0
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebCallingService.d.ts +1 -0
- package/dist/types/services/agent/index.d.ts +46 -0
- package/dist/types/services/agent/types.d.ts +413 -0
- package/dist/types/services/config/Util.d.ts +20 -0
- package/dist/types/services/config/constants.d.ts +270 -0
- package/dist/types/services/config/index.d.ts +177 -0
- package/dist/types/services/config/types.d.ts +1368 -0
- package/dist/types/services/constants.d.ts +110 -0
- package/dist/types/services/core/Err.d.ts +125 -0
- package/dist/types/services/core/GlobalTypes.d.ts +58 -0
- package/dist/types/services/core/Utils.d.ts +121 -0
- package/dist/types/services/core/WebexRequest.d.ts +22 -0
- package/dist/types/services/core/aqm-reqs.d.ts +65 -0
- package/dist/types/services/core/constants.d.ts +99 -0
- package/dist/types/services/core/types.d.ts +47 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
- package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
- package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
- package/dist/types/services/core/websocket/types.d.ts +37 -0
- package/dist/types/services/index.d.ts +54 -0
- package/dist/types/services/task/AutoWrapup.d.ts +40 -0
- package/dist/types/services/task/Task.d.ts +157 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskManager.d.ts +1 -0
- package/dist/types/services/task/TaskUtils.d.ts +138 -0
- package/dist/types/services/task/constants.d.ts +91 -0
- package/dist/types/services/task/contact.d.ts +69 -0
- package/dist/types/services/task/dialer.d.ts +73 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1194 -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 +102 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +269 -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 +1856 -0
- package/dist/types/services/task/voice/Voice.d.ts +184 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +778 -0
- package/dist/types/utils/PageCache.d.ts +173 -0
- package/dist/types/webex-config.d.ts +53 -0
- package/dist/types/webex.d.ts +8 -0
- package/dist/types.js +130 -1
- package/dist/types.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 +477 -51
- package/src/config.ts +6 -0
- package/src/constants.ts +21 -1
- package/src/index.ts +24 -5
- 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 +854 -0
- package/src/metrics/behavioral-events.ts +120 -0
- package/src/metrics/constants.ts +37 -3
- package/src/services/ApiAiAssistant.ts +412 -0
- package/src/services/UserPreference.ts +509 -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 +504 -0
- package/src/services/agent/types.ts +1 -1
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +492 -0
- package/src/services/config/Util.ts +10 -2
- 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 +669 -0
- package/src/services/config/constants.ts +37 -1
- package/src/services/config/index.ts +45 -1
- package/src/services/config/types.ts +241 -11
- package/src/services/constants.ts +29 -0
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +143 -30
- 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 +783 -0
- package/src/services/core/aqm-reqs.ts +100 -22
- package/src/services/core/websocket/WebSocketManager.ts +23 -6
- package/src/services/core/websocket/connection-service.ts +5 -1
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +4 -0
- package/src/services/task/Task.ts +837 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +793 -521
- package/src/services/task/TaskUtils.ts +314 -24
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +594 -0
- package/src/services/task/ai-docs/task-spec.md +1319 -0
- package/src/services/task/constants.ts +23 -0
- package/src/services/task/dialer.ts +136 -1
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1166 -0
- package/src/services/task/state-machine/actions.ts +738 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +458 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1137 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2177 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +445 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +243 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +961 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +734 -71
- package/src/services/task/voice/Voice.ts +1270 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +205 -2
- package/src/utils/AGENTS.md +278 -0
- package/src/utils/ai-docs/utils-spec.md +381 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +503 -43
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/config/index.ts +85 -29
- package/test/unit/spec/services/core/Utils.ts +481 -2
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
- package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +477 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +1001 -1003
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/dialer.ts +372 -96
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +2651 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +637 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2663 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +649 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -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/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -352,6 +352,34 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
352
352
|
verb: 'fail',
|
|
353
353
|
},
|
|
354
354
|
|
|
355
|
+
// Conference Exit
|
|
356
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS]: {
|
|
357
|
+
product,
|
|
358
|
+
agent: 'user',
|
|
359
|
+
target: 'task_conference_exit',
|
|
360
|
+
verb: 'complete',
|
|
361
|
+
},
|
|
362
|
+
[METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED]: {
|
|
363
|
+
product,
|
|
364
|
+
agent: 'user',
|
|
365
|
+
target: 'task_conference_exit',
|
|
366
|
+
verb: 'fail',
|
|
367
|
+
},
|
|
368
|
+
|
|
369
|
+
// Switch Call
|
|
370
|
+
[METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS]: {
|
|
371
|
+
product,
|
|
372
|
+
agent: 'user',
|
|
373
|
+
target: 'task_switch_call',
|
|
374
|
+
verb: 'complete',
|
|
375
|
+
},
|
|
376
|
+
[METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED]: {
|
|
377
|
+
product,
|
|
378
|
+
agent: 'user',
|
|
379
|
+
target: 'task_switch_call',
|
|
380
|
+
verb: 'fail',
|
|
381
|
+
},
|
|
382
|
+
|
|
355
383
|
// upload logs
|
|
356
384
|
[METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS]: {
|
|
357
385
|
product,
|
|
@@ -435,6 +463,98 @@ const eventTaxonomyMap: Record<string, BehavioralEventTaxonomy> = {
|
|
|
435
463
|
target: 'outdial_ani_ep_fetch',
|
|
436
464
|
verb: 'fail',
|
|
437
465
|
},
|
|
466
|
+
|
|
467
|
+
// Campaign Preview API Events
|
|
468
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_ACCEPT_SUCCESS]: {
|
|
469
|
+
product,
|
|
470
|
+
agent: 'user',
|
|
471
|
+
target: 'campaign_preview_accept',
|
|
472
|
+
verb: 'complete',
|
|
473
|
+
},
|
|
474
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_ACCEPT_FAILED]: {
|
|
475
|
+
product,
|
|
476
|
+
agent: 'user',
|
|
477
|
+
target: 'campaign_preview_accept',
|
|
478
|
+
verb: 'fail',
|
|
479
|
+
},
|
|
480
|
+
|
|
481
|
+
// Campaign Preview Skip API Events
|
|
482
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_SKIP_SUCCESS]: {
|
|
483
|
+
product,
|
|
484
|
+
agent: 'user',
|
|
485
|
+
target: 'campaign_preview_skip',
|
|
486
|
+
verb: 'complete',
|
|
487
|
+
},
|
|
488
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_SKIP_FAILED]: {
|
|
489
|
+
product,
|
|
490
|
+
agent: 'user',
|
|
491
|
+
target: 'campaign_preview_skip',
|
|
492
|
+
verb: 'fail',
|
|
493
|
+
},
|
|
494
|
+
|
|
495
|
+
// Campaign Preview Remove API Events
|
|
496
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_REMOVE_SUCCESS]: {
|
|
497
|
+
product,
|
|
498
|
+
agent: 'user',
|
|
499
|
+
target: 'campaign_preview_remove',
|
|
500
|
+
verb: 'complete',
|
|
501
|
+
},
|
|
502
|
+
[METRIC_EVENT_NAMES.CAMPAIGN_PREVIEW_REMOVE_FAILED]: {
|
|
503
|
+
product,
|
|
504
|
+
agent: 'user',
|
|
505
|
+
target: 'campaign_preview_remove',
|
|
506
|
+
verb: 'fail',
|
|
507
|
+
},
|
|
508
|
+
|
|
509
|
+
// User Preference API Events
|
|
510
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS]: {
|
|
511
|
+
product,
|
|
512
|
+
agent: 'user',
|
|
513
|
+
target: 'user_preference_get',
|
|
514
|
+
verb: 'complete',
|
|
515
|
+
},
|
|
516
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED]: {
|
|
517
|
+
product,
|
|
518
|
+
agent: 'user',
|
|
519
|
+
target: 'user_preference_get',
|
|
520
|
+
verb: 'fail',
|
|
521
|
+
},
|
|
522
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS]: {
|
|
523
|
+
product,
|
|
524
|
+
agent: 'user',
|
|
525
|
+
target: 'user_preference_create',
|
|
526
|
+
verb: 'complete',
|
|
527
|
+
},
|
|
528
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED]: {
|
|
529
|
+
product,
|
|
530
|
+
agent: 'user',
|
|
531
|
+
target: 'user_preference_create',
|
|
532
|
+
verb: 'fail',
|
|
533
|
+
},
|
|
534
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS]: {
|
|
535
|
+
product,
|
|
536
|
+
agent: 'user',
|
|
537
|
+
target: 'user_preference_update',
|
|
538
|
+
verb: 'complete',
|
|
539
|
+
},
|
|
540
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED]: {
|
|
541
|
+
product,
|
|
542
|
+
agent: 'user',
|
|
543
|
+
target: 'user_preference_update',
|
|
544
|
+
verb: 'fail',
|
|
545
|
+
},
|
|
546
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS]: {
|
|
547
|
+
product,
|
|
548
|
+
agent: 'user',
|
|
549
|
+
target: 'user_preference_delete',
|
|
550
|
+
verb: 'complete',
|
|
551
|
+
},
|
|
552
|
+
[METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED]: {
|
|
553
|
+
product,
|
|
554
|
+
agent: 'user',
|
|
555
|
+
target: 'user_preference_delete',
|
|
556
|
+
verb: 'fail',
|
|
557
|
+
},
|
|
438
558
|
};
|
|
439
559
|
|
|
440
560
|
/**
|
package/src/metrics/constants.ts
CHANGED
|
@@ -129,6 +129,10 @@ 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_SWITCH_CALL_SUCCESS: 'Task Switch Call Success',
|
|
135
|
+
TASK_SWITCH_CALL_FAILED: 'Task Switch Call Failed',
|
|
132
136
|
|
|
133
137
|
TASK_OUTDIAL_SUCCESS: 'Task Outdial Success',
|
|
134
138
|
TASK_OUTDIAL_FAILED: 'Task Outdial Failed',
|
|
@@ -138,11 +142,10 @@ export const METRIC_EVENT_NAMES = {
|
|
|
138
142
|
WEBSOCKET_DEREGISTER_SUCCESS: 'Websocket Deregister Success',
|
|
139
143
|
WEBSOCKET_DEREGISTER_FAIL: 'Websocket Deregister Failed',
|
|
140
144
|
|
|
141
|
-
// WebSocket message events
|
|
142
|
-
WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
|
|
143
|
-
|
|
144
145
|
AGENT_DEVICE_TYPE_UPDATE_SUCCESS: 'Agent Device Type Update Success',
|
|
145
146
|
AGENT_DEVICE_TYPE_UPDATE_FAILED: 'Agent Device Type Update Failed',
|
|
147
|
+
// WebSocket message events
|
|
148
|
+
WEBSOCKET_EVENT_RECEIVED: 'Websocket Event Received',
|
|
146
149
|
|
|
147
150
|
// EntryPoint API Events
|
|
148
151
|
ENTRYPOINT_FETCH_SUCCESS: 'Entrypoint Fetch Success',
|
|
@@ -159,6 +162,37 @@ export const METRIC_EVENT_NAMES = {
|
|
|
159
162
|
// Outdial ANI Entries API Events
|
|
160
163
|
OUTDIAL_ANI_EP_FETCH_SUCCESS: 'Outdial ANI Entries Fetch Success',
|
|
161
164
|
OUTDIAL_ANI_EP_FETCH_FAILED: 'Outdial ANI Entries Fetch Failed',
|
|
165
|
+
|
|
166
|
+
// Campaign Preview API Events
|
|
167
|
+
CAMPAIGN_PREVIEW_ACCEPT_SUCCESS: 'Campaign Preview Accept Success',
|
|
168
|
+
CAMPAIGN_PREVIEW_ACCEPT_FAILED: 'Campaign Preview Accept Failed',
|
|
169
|
+
CAMPAIGN_PREVIEW_SKIP_SUCCESS: 'Campaign Preview Skip Success',
|
|
170
|
+
CAMPAIGN_PREVIEW_SKIP_FAILED: 'Campaign Preview Skip Failed',
|
|
171
|
+
CAMPAIGN_PREVIEW_REMOVE_SUCCESS: 'Campaign Preview Remove Success',
|
|
172
|
+
CAMPAIGN_PREVIEW_REMOVE_FAILED: 'Campaign Preview Remove Failed',
|
|
173
|
+
|
|
174
|
+
// AI Assistant Transcript events
|
|
175
|
+
AI_ASSISTANT_SEND_EVENT_SUCCESS: 'AI Assistant Send Event Success',
|
|
176
|
+
AI_ASSISTANT_SEND_EVENT_FAILED: 'AI Assistant Send Event Failed',
|
|
177
|
+
AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS: 'AI Assistant Get Real Time Assistance Success',
|
|
178
|
+
AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED: 'AI Assistant Get Real Time Assistance Failed',
|
|
179
|
+
AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS:
|
|
180
|
+
'AI Assistant Send Real Time Assistance User Action Success',
|
|
181
|
+
AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED:
|
|
182
|
+
'AI Assistant Send Real Time Assistance User Action Failed',
|
|
183
|
+
AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS:
|
|
184
|
+
'AI Assistant Fetch Historic Transcripts Success',
|
|
185
|
+
AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED: 'AI Assistant Fetch Historic Transcripts Failed',
|
|
186
|
+
|
|
187
|
+
// User Preference API Events
|
|
188
|
+
USER_PREFERENCE_GET_SUCCESS: 'User Preference Get Success',
|
|
189
|
+
USER_PREFERENCE_GET_FAILED: 'User Preference Get Failed',
|
|
190
|
+
USER_PREFERENCE_CREATE_SUCCESS: 'User Preference Create Success',
|
|
191
|
+
USER_PREFERENCE_CREATE_FAILED: 'User Preference Create Failed',
|
|
192
|
+
USER_PREFERENCE_UPDATE_SUCCESS: 'User Preference Update Success',
|
|
193
|
+
USER_PREFERENCE_UPDATE_FAILED: 'User Preference Update Failed',
|
|
194
|
+
USER_PREFERENCE_DELETE_SUCCESS: 'User Preference Delete Success',
|
|
195
|
+
USER_PREFERENCE_DELETE_FAILED: 'User Preference Delete Failed',
|
|
162
196
|
} as const;
|
|
163
197
|
|
|
164
198
|
/**
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import {v4 as uuidv4} from 'uuid';
|
|
2
|
+
import LoggerProxy from '../logger-proxy';
|
|
3
|
+
import MetricsManager from '../metrics/MetricsManager';
|
|
4
|
+
import {METRIC_EVENT_NAMES} from '../metrics/constants';
|
|
5
|
+
import {CC_FILE, METHODS} from '../constants';
|
|
6
|
+
import {
|
|
7
|
+
HTTP_METHODS,
|
|
8
|
+
WebexSDK,
|
|
9
|
+
IHttpResponse,
|
|
10
|
+
AIAssistantEventType,
|
|
11
|
+
AIAssistantEventName,
|
|
12
|
+
HistoricTranscriptsResponse,
|
|
13
|
+
RealTimeAssistanceParams,
|
|
14
|
+
RealTimeAssistanceUserActionParams,
|
|
15
|
+
} from '../types';
|
|
16
|
+
import {getErrorDetails} from './core/Utils';
|
|
17
|
+
import {
|
|
18
|
+
AI_ASSISTANT_BASE_URL_TEMPLATE,
|
|
19
|
+
AI_ASSISTANT_ENV_MAP,
|
|
20
|
+
AI_ASSISTANT_API_URLS,
|
|
21
|
+
WCC_API_GATEWAY,
|
|
22
|
+
} from './constants';
|
|
23
|
+
import {AIFeatureFlags} from './config/types';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* ApiAIAssistant provides AI Assistant APIs for transcript controls.
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export class ApiAIAssistant {
|
|
30
|
+
private webex: WebexSDK;
|
|
31
|
+
private metricsManager: MetricsManager;
|
|
32
|
+
private aiFeature: AIFeatureFlags;
|
|
33
|
+
|
|
34
|
+
constructor(webex: WebexSDK) {
|
|
35
|
+
this.webex = webex;
|
|
36
|
+
this.metricsManager = MetricsManager.getInstance({webex});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public setAIFeatureFlags(aiFeature: AIFeatureFlags): void {
|
|
40
|
+
this.aiFeature = aiFeature;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private getBaseUrl(): string {
|
|
44
|
+
const wccApiGatewayUrl = this.webex.internal.services.get(WCC_API_GATEWAY) || '';
|
|
45
|
+
|
|
46
|
+
if (!wccApiGatewayUrl) {
|
|
47
|
+
const {error: detailedError} = getErrorDetails(
|
|
48
|
+
new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),
|
|
49
|
+
METHODS.GET_BASE_URL,
|
|
50
|
+
CC_FILE
|
|
51
|
+
);
|
|
52
|
+
throw detailedError;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let hostname = '';
|
|
56
|
+
try {
|
|
57
|
+
hostname = new URL(wccApiGatewayUrl).hostname.toLowerCase();
|
|
58
|
+
} catch (error) {
|
|
59
|
+
hostname = wccApiGatewayUrl.toLowerCase();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const resolvedEnv = AI_ASSISTANT_ENV_MAP[hostname];
|
|
63
|
+
if (!resolvedEnv) {
|
|
64
|
+
const {error: detailedError} = getErrorDetails(
|
|
65
|
+
new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),
|
|
66
|
+
METHODS.GET_BASE_URL,
|
|
67
|
+
CC_FILE
|
|
68
|
+
);
|
|
69
|
+
throw detailedError;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return AI_ASSISTANT_BASE_URL_TEMPLATE.replace('%s', resolvedEnv);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Sends an event to the AI Assistant service.
|
|
77
|
+
* @param agentId - agent identifier
|
|
78
|
+
* @param interactionId - interaction/conversation identifier
|
|
79
|
+
* @param eventType - the type of event (e.g. 'CUSTOM_EVENT')
|
|
80
|
+
* @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
|
|
81
|
+
* @param eventMetaData - event-specific fields to include in eventDetails.data
|
|
82
|
+
* @param languageCode - language code within eventDetails.data
|
|
83
|
+
* @param trackingId - tracking identifier within eventDetails.data
|
|
84
|
+
*/
|
|
85
|
+
public async sendEvent(
|
|
86
|
+
agentId: string,
|
|
87
|
+
interactionId: string,
|
|
88
|
+
eventType: AIAssistantEventType,
|
|
89
|
+
eventName: AIAssistantEventName,
|
|
90
|
+
eventMetaData?: Record<string, unknown>,
|
|
91
|
+
languageCode?: string,
|
|
92
|
+
trackingId?: string
|
|
93
|
+
): Promise<Record<string, unknown>> {
|
|
94
|
+
LoggerProxy.info('Sending event', {
|
|
95
|
+
module: CC_FILE,
|
|
96
|
+
method: METHODS.SEND_EVENT,
|
|
97
|
+
interactionId,
|
|
98
|
+
data: {eventType, eventName, eventMetaData},
|
|
99
|
+
});
|
|
100
|
+
this.metricsManager.timeEvent([
|
|
101
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,
|
|
102
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,
|
|
103
|
+
]);
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
const baseUrl = this.getBaseUrl();
|
|
107
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
108
|
+
const response = (await this.webex.request({
|
|
109
|
+
uri: `${baseUrl}${AI_ASSISTANT_API_URLS.EVENT}`,
|
|
110
|
+
method: HTTP_METHODS.POST,
|
|
111
|
+
addAuthHeader: true,
|
|
112
|
+
body: {
|
|
113
|
+
agentId,
|
|
114
|
+
orgId,
|
|
115
|
+
eventType,
|
|
116
|
+
eventName,
|
|
117
|
+
eventDetails: {
|
|
118
|
+
data: {
|
|
119
|
+
...eventMetaData,
|
|
120
|
+
interactionId,
|
|
121
|
+
actionTimeStamp: String(Date.now()),
|
|
122
|
+
languageCode,
|
|
123
|
+
trackingId,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
})) as IHttpResponse;
|
|
128
|
+
|
|
129
|
+
this.metricsManager.trackEvent(
|
|
130
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,
|
|
131
|
+
{agentId, orgId, interactionId, eventType, eventName},
|
|
132
|
+
['operational']
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
return response?.body || {};
|
|
136
|
+
} catch (error) {
|
|
137
|
+
this.metricsManager.trackEvent(
|
|
138
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,
|
|
139
|
+
{
|
|
140
|
+
interactionId,
|
|
141
|
+
eventType,
|
|
142
|
+
eventName,
|
|
143
|
+
error: error instanceof Error ? error.message : String(error),
|
|
144
|
+
},
|
|
145
|
+
['operational']
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
const {error: detailedError} = getErrorDetails(error, METHODS.SEND_EVENT, CC_FILE);
|
|
149
|
+
throw detailedError;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Requests real-time assistance for an interaction.
|
|
155
|
+
*
|
|
156
|
+
* @param params - Real-time assistance request parameters
|
|
157
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
158
|
+
* @public
|
|
159
|
+
*/
|
|
160
|
+
public async getRealTimeAssistance(params: RealTimeAssistanceParams) {
|
|
161
|
+
const {agentId, interactionId, context} = params;
|
|
162
|
+
const trimmedContext = context?.trim();
|
|
163
|
+
const languageCode = params.languageCode ?? 'en';
|
|
164
|
+
const trackingId = `WX_CC_SDK_${uuidv4()}`;
|
|
165
|
+
const eventName = trimmedContext
|
|
166
|
+
? AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT
|
|
167
|
+
: AIAssistantEventName.GET_SUGGESTIONS;
|
|
168
|
+
|
|
169
|
+
const loggerContext = {
|
|
170
|
+
module: CC_FILE,
|
|
171
|
+
method: METHODS.GET_REAL_TIME_ASSISTANCE,
|
|
172
|
+
interactionId,
|
|
173
|
+
trackingId,
|
|
174
|
+
data: {eventName},
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
LoggerProxy.info('Requesting real-time assistance', loggerContext);
|
|
178
|
+
|
|
179
|
+
this.metricsManager.timeEvent([
|
|
180
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,
|
|
181
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,
|
|
182
|
+
]);
|
|
183
|
+
|
|
184
|
+
try {
|
|
185
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
186
|
+
const {error: detailedError} = getErrorDetails(
|
|
187
|
+
new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),
|
|
188
|
+
METHODS.GET_REAL_TIME_ASSISTANCE,
|
|
189
|
+
CC_FILE
|
|
190
|
+
);
|
|
191
|
+
throw detailedError;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
195
|
+
|
|
196
|
+
const response = await this.sendEvent(
|
|
197
|
+
agentId,
|
|
198
|
+
interactionId,
|
|
199
|
+
AIAssistantEventType.CUSTOM_EVENT,
|
|
200
|
+
eventName,
|
|
201
|
+
trimmedContext !== undefined ? {context: trimmedContext} : undefined,
|
|
202
|
+
languageCode,
|
|
203
|
+
trackingId
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
this.metricsManager.trackEvent(
|
|
207
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,
|
|
208
|
+
{
|
|
209
|
+
agentId,
|
|
210
|
+
orgId,
|
|
211
|
+
interactionId,
|
|
212
|
+
eventName,
|
|
213
|
+
trackingId,
|
|
214
|
+
context,
|
|
215
|
+
},
|
|
216
|
+
['operational']
|
|
217
|
+
);
|
|
218
|
+
LoggerProxy.log('Real-time assistance request succeeded', loggerContext);
|
|
219
|
+
|
|
220
|
+
return response;
|
|
221
|
+
} catch (error) {
|
|
222
|
+
LoggerProxy.error('Real-time assistance request failed', {...loggerContext, error});
|
|
223
|
+
this.metricsManager.trackEvent(
|
|
224
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,
|
|
225
|
+
{
|
|
226
|
+
agentId,
|
|
227
|
+
interactionId,
|
|
228
|
+
trackingId,
|
|
229
|
+
eventName,
|
|
230
|
+
error: error instanceof Error ? error.message : String(error),
|
|
231
|
+
},
|
|
232
|
+
['operational']
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
const {error: detailedError} = getErrorDetails(
|
|
236
|
+
error,
|
|
237
|
+
METHODS.GET_REAL_TIME_ASSISTANCE,
|
|
238
|
+
CC_FILE
|
|
239
|
+
);
|
|
240
|
+
throw detailedError;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Sends user action feedback for a real-time assistance adaptive card.
|
|
246
|
+
*
|
|
247
|
+
* @param params - Real-time assistance user action parameters
|
|
248
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
249
|
+
* @public
|
|
250
|
+
*/
|
|
251
|
+
public async sendRealTimeAssistanceUserAction(
|
|
252
|
+
params: RealTimeAssistanceUserActionParams
|
|
253
|
+
): Promise<Record<string, unknown>> {
|
|
254
|
+
const {agentId, interactionId, adaptiveCardId, actionId} = params;
|
|
255
|
+
const actionType = 'Action.Submit';
|
|
256
|
+
const languageCode = params.languageCode ?? 'en';
|
|
257
|
+
const trackingId = `WX_CC_SDK_${uuidv4()}`;
|
|
258
|
+
|
|
259
|
+
const loggerContext = {
|
|
260
|
+
module: CC_FILE,
|
|
261
|
+
method: METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,
|
|
262
|
+
interactionId,
|
|
263
|
+
trackingId,
|
|
264
|
+
data: {actionId, adaptiveCardId},
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
LoggerProxy.info('Sending real-time assistance user action', loggerContext);
|
|
268
|
+
|
|
269
|
+
this.metricsManager.timeEvent([
|
|
270
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,
|
|
271
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,
|
|
272
|
+
]);
|
|
273
|
+
|
|
274
|
+
try {
|
|
275
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
276
|
+
const {error: detailedError} = getErrorDetails(
|
|
277
|
+
new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),
|
|
278
|
+
METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,
|
|
279
|
+
CC_FILE
|
|
280
|
+
);
|
|
281
|
+
throw detailedError;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
285
|
+
const response = await this.sendEvent(
|
|
286
|
+
agentId,
|
|
287
|
+
interactionId,
|
|
288
|
+
AIAssistantEventType.CUSTOM_EVENT,
|
|
289
|
+
AIAssistantEventName.SUGGESTED_RESPONSES_USER_ACTION,
|
|
290
|
+
{
|
|
291
|
+
adaptiveCardId,
|
|
292
|
+
userAction: {
|
|
293
|
+
actionType,
|
|
294
|
+
actionId,
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
languageCode,
|
|
298
|
+
trackingId
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
this.metricsManager.trackEvent(
|
|
302
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,
|
|
303
|
+
{
|
|
304
|
+
agentId,
|
|
305
|
+
orgId,
|
|
306
|
+
interactionId,
|
|
307
|
+
adaptiveCardId,
|
|
308
|
+
actionId,
|
|
309
|
+
trackingId,
|
|
310
|
+
},
|
|
311
|
+
['operational']
|
|
312
|
+
);
|
|
313
|
+
LoggerProxy.log('Real-time assistance user action sent', loggerContext);
|
|
314
|
+
|
|
315
|
+
return response;
|
|
316
|
+
} catch (error) {
|
|
317
|
+
LoggerProxy.error('Real-time assistance user action failed', {...loggerContext, error});
|
|
318
|
+
this.metricsManager.trackEvent(
|
|
319
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,
|
|
320
|
+
{
|
|
321
|
+
agentId,
|
|
322
|
+
interactionId,
|
|
323
|
+
adaptiveCardId,
|
|
324
|
+
actionId,
|
|
325
|
+
trackingId,
|
|
326
|
+
error: error instanceof Error ? error.message : String(error),
|
|
327
|
+
},
|
|
328
|
+
['operational']
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
const {error: detailedError} = getErrorDetails(
|
|
332
|
+
error,
|
|
333
|
+
METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,
|
|
334
|
+
CC_FILE
|
|
335
|
+
);
|
|
336
|
+
throw detailedError;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Fetches historic transcripts for an interaction.
|
|
342
|
+
* This API is allowed only when real-time transcription feature is enabled.
|
|
343
|
+
*
|
|
344
|
+
* @param interactionId - interaction/conversation identifier
|
|
345
|
+
*/
|
|
346
|
+
public async fetchHistoricTranscripts(
|
|
347
|
+
agentId: string,
|
|
348
|
+
interactionId: string
|
|
349
|
+
): Promise<HistoricTranscriptsResponse> {
|
|
350
|
+
LoggerProxy.info('Fetching historic transcripts', {
|
|
351
|
+
module: CC_FILE,
|
|
352
|
+
method: METHODS.FETCH_HISTORIC_TRANSCRIPTS,
|
|
353
|
+
interactionId,
|
|
354
|
+
});
|
|
355
|
+
this.metricsManager.timeEvent([
|
|
356
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,
|
|
357
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,
|
|
358
|
+
]);
|
|
359
|
+
if (!this.aiFeature?.realtimeTranscripts?.enable) {
|
|
360
|
+
const {error: detailedError} = getErrorDetails(
|
|
361
|
+
new Error('REAL_TIME_TRANSCRIPTION_NOT_ENABLED'),
|
|
362
|
+
METHODS.FETCH_HISTORIC_TRANSCRIPTS,
|
|
363
|
+
CC_FILE
|
|
364
|
+
);
|
|
365
|
+
throw detailedError;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
try {
|
|
369
|
+
const baseUrl = this.getBaseUrl();
|
|
370
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
371
|
+
const response = (await this.webex.request({
|
|
372
|
+
uri: `${baseUrl}${AI_ASSISTANT_API_URLS.TRANSCRIPTS_LIST}`,
|
|
373
|
+
method: HTTP_METHODS.POST,
|
|
374
|
+
addAuthHeader: true,
|
|
375
|
+
body: {
|
|
376
|
+
agentId,
|
|
377
|
+
orgId,
|
|
378
|
+
interactionId,
|
|
379
|
+
},
|
|
380
|
+
})) as IHttpResponse;
|
|
381
|
+
|
|
382
|
+
this.metricsManager.trackEvent(
|
|
383
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,
|
|
384
|
+
{agentId, orgId, interactionId},
|
|
385
|
+
['operational']
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
return response.body as HistoricTranscriptsResponse;
|
|
389
|
+
} catch (error) {
|
|
390
|
+
this.metricsManager.trackEvent(
|
|
391
|
+
METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,
|
|
392
|
+
{
|
|
393
|
+
interactionId,
|
|
394
|
+
error: error instanceof Error ? error.message : String(error),
|
|
395
|
+
},
|
|
396
|
+
['operational']
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
if (error instanceof Error) {
|
|
400
|
+
throw error;
|
|
401
|
+
}
|
|
402
|
+
const {error: detailedError} = getErrorDetails(
|
|
403
|
+
error,
|
|
404
|
+
METHODS.FETCH_HISTORIC_TRANSCRIPTS,
|
|
405
|
+
CC_FILE
|
|
406
|
+
);
|
|
407
|
+
throw detailedError;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
export default ApiAIAssistant;
|