@webex/contact-center 3.12.0-next.8 → 3.12.0-task-refactor.1
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/AGENTS.md +438 -0
- package/ai-docs/README.md +131 -0
- package/ai-docs/RULES.md +455 -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 +65 -123
- package/dist/cc.js.map +1 -1
- package/dist/constants.js +13 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +26 -13
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +7 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +0 -3
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/config/Util.js +2 -3
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/types.js +16 -14
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +0 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +79 -55
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +17 -92
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +5 -25
- 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 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +644 -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 +556 -532
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +132 -28
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +7 -6
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +0 -51
- 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 +634 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +366 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +139 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +256 -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 +369 -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 +157 -18
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1031 -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 +4 -33
- package/dist/types/constants.d.ts +13 -2
- package/dist/types/index.d.ts +11 -5
- package/dist/types/metrics/constants.d.ts +5 -3
- package/dist/types/services/ApiAiAssistant.d.ts +1 -1
- package/dist/types/services/config/types.d.ts +97 -25
- package/dist/types/services/core/Err.d.ts +0 -2
- package/dist/types/services/core/Utils.d.ts +25 -23
- package/dist/types/services/core/aqm-reqs.d.ts +0 -49
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -1
- package/dist/types/services/core/websocket/connection-service.d.ts +0 -1
- 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 +146 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskUtils.d.ts +39 -8
- package/dist/types/services/task/constants.d.ts +5 -4
- package/dist/types/services/task/dialer.d.ts +0 -15
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +906 -0
- package/dist/types/services/task/state-machine/actions.d.ts +8 -0
- package/dist/types/services/task/state-machine/constants.d.ts +91 -0
- package/dist/types/services/task/state-machine/guards.d.ts +78 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +256 -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 +539 -88
- package/dist/types/services/task/voice/Voice.d.ts +183 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +68 -0
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +70 -0
- package/dist/types.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +14 -11
- package/src/cc.ts +91 -177
- package/src/constants.ts +13 -2
- package/src/index.ts +14 -5
- package/src/metrics/ai-docs/AGENTS.md +348 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
- package/src/metrics/behavioral-events.ts +28 -14
- package/src/metrics/constants.ts +7 -8
- package/src/services/ApiAiAssistant.ts +2 -4
- package/src/services/agent/ai-docs/AGENTS.md +238 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
- package/src/services/ai-docs/AGENTS.md +384 -0
- package/src/services/config/Util.ts +2 -3
- package/src/services/config/ai-docs/AGENTS.md +253 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
- package/src/services/config/types.ts +108 -20
- package/src/services/constants.ts +0 -1
- package/src/services/core/Err.ts +0 -1
- package/src/services/core/Utils.ts +90 -67
- package/src/services/core/ai-docs/AGENTS.md +379 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
- package/src/services/core/aqm-reqs.ts +22 -100
- package/src/services/core/websocket/WebSocketManager.ts +4 -23
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -2
- package/src/services/task/Task.ts +785 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +567 -633
- package/src/services/task/TaskUtils.ts +175 -31
- package/src/services/task/ai-docs/AGENTS.md +448 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +573 -0
- package/src/services/task/constants.ts +5 -4
- package/src/services/task/dialer.ts +1 -56
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +793 -0
- package/src/services/task/state-machine/actions.ts +409 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
- package/src/services/task/state-machine/constants.ts +150 -0
- package/src/services/task/state-machine/guards.ts +295 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +228 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +529 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +641 -95
- package/src/services/task/voice/Voice.ts +1255 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +88 -5
- package/src/utils/AGENTS.md +276 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +59 -142
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +17 -0
- package/test/unit/spec/services/config/index.ts +26 -55
- package/test/unit/spec/services/core/Utils.ts +103 -52
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +48 -112
- package/test/unit/spec/services/core/websocket/connection-service.ts +5 -4
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +416 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +781 -1735
- package/test/unit/spec/services/task/TaskUtils.ts +125 -0
- package/test/unit/spec/services/task/dialer.ts +112 -198
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +473 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +288 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +147 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +587 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +242 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WRAPUP = exports.UNHOLD = exports.TRANSFER = exports.TRANSCRIPT_EVENT_MAP = exports.
|
|
6
|
+
exports.WRAPUP = exports.UNHOLD = exports.TRANSFER = exports.TRANSCRIPT_EVENT_MAP = exports.TASK_MESSAGE_TYPE = exports.TASK_MANAGER_FILE = exports.TASK_FILE = exports.TASK_API = exports.RESUME = exports.PRESERVED_TASK_DATA_FIELDS = exports.PAUSE = exports.METHODS = exports.KEYS_TO_NOT_DELETE = exports.HOLD = exports.END = exports.CONSULT_TRANSFER = exports.CONSULT_END = exports.CONSULT_CONFERENCE = exports.CONSULT_ACCEPT = exports.CONSULT = exports.CONFERENCE_TRANSFER = exports.CONFERENCE_EXIT = void 0;
|
|
7
7
|
var _types = require("../config/types");
|
|
8
8
|
/**
|
|
9
9
|
* Constants for Task Service
|
|
@@ -27,10 +27,6 @@ const END = exports.END = '/end';
|
|
|
27
27
|
const CONSULT_CONFERENCE = exports.CONSULT_CONFERENCE = '/consult/conference';
|
|
28
28
|
const CONFERENCE_EXIT = exports.CONFERENCE_EXIT = '/conference/exit';
|
|
29
29
|
const CONFERENCE_TRANSFER = exports.CONFERENCE_TRANSFER = '/conference/transfer';
|
|
30
|
-
const DIALER_API = exports.DIALER_API = '/v1/dialer';
|
|
31
|
-
const CAMPAIGN_PREVIEW_ACCEPT = exports.CAMPAIGN_PREVIEW_ACCEPT = '/accept';
|
|
32
|
-
/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */
|
|
33
|
-
const TIMEOUT_PREVIEW_ACCEPT = exports.TIMEOUT_PREVIEW_ACCEPT = 80000;
|
|
34
30
|
const TASK_MANAGER_FILE = exports.TASK_MANAGER_FILE = 'taskManager';
|
|
35
31
|
const TASK_FILE = exports.TASK_FILE = 'task';
|
|
36
32
|
|
|
@@ -55,6 +51,10 @@ const PRESERVED_TASK_DATA_FIELDS = exports.PRESERVED_TASK_DATA_FIELDS = {
|
|
|
55
51
|
*/
|
|
56
52
|
const KEYS_TO_NOT_DELETE = exports.KEYS_TO_NOT_DELETE = Object.values(PRESERVED_TASK_DATA_FIELDS);
|
|
57
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Consultation status constants derived from state machine
|
|
56
|
+
* These values are computed and available in task.data.consultStatus
|
|
57
|
+
*/
|
|
58
58
|
// METHOD NAMES
|
|
59
59
|
const METHODS = exports.METHODS = {
|
|
60
60
|
// Task class methods
|
|
@@ -86,7 +86,8 @@ const METHODS = exports.METHODS = {
|
|
|
86
86
|
GET_ALL_TASKS: 'getAllTasks',
|
|
87
87
|
GET_TASK_MANAGER: 'getTaskManager',
|
|
88
88
|
SETUP_AUTO_WRAPUP_TIMER: 'setupAutoWrapupTimer',
|
|
89
|
-
CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer'
|
|
89
|
+
CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer',
|
|
90
|
+
REQUEST_REAL_TIME_TRANSCRIPTS: 'requestRealTimeTranscripts'
|
|
90
91
|
};
|
|
91
92
|
const TRANSCRIPT_EVENT_MAP = exports.TRANSCRIPT_EVENT_MAP = {
|
|
92
93
|
[_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED]: 'START',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","TASK_MESSAGE_TYPE","exports","TASK_API","HOLD","UNHOLD","CONSULT","CONSULT_ACCEPT","CONSULT_END","TRANSFER","CONSULT_TRANSFER","PAUSE","RESUME","WRAPUP","END","CONSULT_CONFERENCE","CONFERENCE_EXIT","CONFERENCE_TRANSFER","
|
|
1
|
+
{"version":3,"names":["_types","require","TASK_MESSAGE_TYPE","exports","TASK_API","HOLD","UNHOLD","CONSULT","CONSULT_ACCEPT","CONSULT_END","TRANSFER","CONSULT_TRANSFER","PAUSE","RESUME","WRAPUP","END","CONSULT_CONFERENCE","CONFERENCE_EXIT","CONFERENCE_TRANSFER","TASK_MANAGER_FILE","TASK_FILE","PRESERVED_TASK_DATA_FIELDS","IS_CONSULTED","WRAP_UP_REQUIRED","IS_CONFERENCE_IN_PROGRESS","IS_AUTO_ANSWERING","KEYS_TO_NOT_DELETE","Object","values","METHODS","ACCEPT","TOGGLE_MUTE","DECLINE","PAUSE_RECORDING","RESUME_RECORDING","END_CONSULT","EXIT_CONFERENCE","TRANSFER_CONFERENCE","UPDATE_TASK_DATA","RECONCILE_DATA","HANDLE_INCOMING_WEB_CALL","REGISTER_TASK_LISTENERS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","REMOVE_TASK_FROM_COLLECTION","HANDLE_TASK_CLEANUP","GET_TASK","GET_ALL_TASKS","GET_TASK_MANAGER","SETUP_AUTO_WRAPUP_TIMER","CANCEL_AUTO_WRAPUP_TIMER","REQUEST_REAL_TIME_TRANSCRIPTS","TRANSCRIPT_EVENT_MAP","CC_EVENTS","AGENT_CONTACT_ASSIGNED","AGENT_CONSULTING","AGENT_CONSULT_CONFERENCED","AGENT_WRAPUP","AGENT_CONSULT_ENDED","PARTICIPANT_LEFT_CONFERENCE"],"sources":["constants.ts"],"sourcesContent":["/**\n * Constants for Task Service\n * @module @webex/contact-center/services/task/constants\n * @ignore\n */\n\nimport {CC_EVENTS} from '../config/types';\n\nexport const TASK_MESSAGE_TYPE = 'RoutingMessage';\nexport const TASK_API = '/v1/tasks/';\nexport const HOLD = '/hold';\nexport const UNHOLD = '/unhold';\nexport const CONSULT = '/consult';\nexport const CONSULT_ACCEPT = '/consult/accept';\nexport const CONSULT_END = '/consult/end';\nexport const TRANSFER = '/transfer';\nexport const CONSULT_TRANSFER = '/consult/transfer';\nexport const PAUSE = '/record/pause';\nexport const RESUME = '/record/resume';\nexport const WRAPUP = '/wrapup';\nexport const END = '/end';\nexport const CONSULT_CONFERENCE = '/consult/conference';\nexport const CONFERENCE_EXIT = '/conference/exit';\nexport const CONFERENCE_TRANSFER = '/conference/transfer';\nexport const TASK_MANAGER_FILE = 'taskManager';\nexport const TASK_FILE = 'task';\n\n/**\n * Task data field names that should be preserved during reconciliation\n * These fields are retained even if not present in new data during updates\n */\nexport const PRESERVED_TASK_DATA_FIELDS = {\n /** Indicates if the task is in consultation state */\n IS_CONSULTED: 'isConsulted',\n /** Indicates if wrap-up is required for this task */\n WRAP_UP_REQUIRED: 'wrapUpRequired',\n /** Indicates if a conference is currently in progress (2+ active agents) */\n IS_CONFERENCE_IN_PROGRESS: 'isConferenceInProgress',\n /** Indicates if auto-answer is in progress for this task */\n IS_AUTO_ANSWERING: 'isAutoAnswering',\n};\n\n/**\n * Array of task data field names that should not be deleted during reconciliation\n * Used by reconcileData method to preserve important task state fields\n */\nexport const KEYS_TO_NOT_DELETE: string[] = Object.values(PRESERVED_TASK_DATA_FIELDS);\n\n/**\n * Consultation status constants derived from state machine\n * These values are computed and available in task.data.consultStatus\n */\n// METHOD NAMES\nexport const METHODS = {\n // Task class methods\n ACCEPT: 'accept',\n TOGGLE_MUTE: 'toggleMute',\n DECLINE: 'decline',\n HOLD: 'hold',\n RESUME: 'resume',\n END: 'end',\n WRAPUP: 'wrapup',\n PAUSE_RECORDING: 'pauseRecording',\n RESUME_RECORDING: 'resumeRecording',\n CONSULT: 'consult',\n END_CONSULT: 'endConsult',\n TRANSFER: 'transfer',\n CONSULT_TRANSFER: 'consultTransfer',\n CONSULT_CONFERENCE: 'consultConference',\n EXIT_CONFERENCE: 'exitConference',\n TRANSFER_CONFERENCE: 'transferConference',\n UPDATE_TASK_DATA: 'updateTaskData',\n RECONCILE_DATA: 'reconcileData',\n\n // TaskManager class methods\n HANDLE_INCOMING_WEB_CALL: 'handleIncomingWebCall',\n REGISTER_TASK_LISTENERS: 'registerTaskListeners',\n HANDLE_REAL_TIME_WEBSOCKET_EVENT: 'handleRealtimeWebsocketEvent',\n REMOVE_TASK_FROM_COLLECTION: 'removeTaskFromCollection',\n HANDLE_TASK_CLEANUP: 'handleTaskCleanup',\n GET_TASK: 'getTask',\n GET_ALL_TASKS: 'getAllTasks',\n GET_TASK_MANAGER: 'getTaskManager',\n SETUP_AUTO_WRAPUP_TIMER: 'setupAutoWrapupTimer',\n CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer',\n REQUEST_REAL_TIME_TRANSCRIPTS: 'requestRealTimeTranscripts',\n};\n\nexport const TRANSCRIPT_EVENT_MAP = {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: 'START',\n [CC_EVENTS.AGENT_CONSULTING]: 'START',\n [CC_EVENTS.AGENT_CONSULT_CONFERENCED]: 'START',\n [CC_EVENTS.AGENT_WRAPUP]: 'STOP',\n [CC_EVENTS.AGENT_CONSULT_ENDED]: 'STOP',\n [CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE]: 'STOP',\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = aqmDialer;
|
|
7
7
|
var _types = require("../config/types");
|
|
8
8
|
var _constants = require("../constants");
|
|
9
|
-
var _types2 = require("../../types");
|
|
10
9
|
var _Utils = require("../core/Utils");
|
|
11
10
|
var _constants2 = require("./constants");
|
|
12
11
|
/**
|
|
@@ -55,56 +54,6 @@ function aqmDialer(aqm) {
|
|
|
55
54
|
},
|
|
56
55
|
errId: 'Service.aqm.dialer.startOutdial'
|
|
57
56
|
}
|
|
58
|
-
})),
|
|
59
|
-
/**
|
|
60
|
-
* Accepts a campaign preview contact, initiating the outbound call.
|
|
61
|
-
*
|
|
62
|
-
* @param {Object} p - Parameters object.
|
|
63
|
-
* @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
|
|
64
|
-
* @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
|
|
65
|
-
*
|
|
66
|
-
* Emits:
|
|
67
|
-
* - `CC_EVENTS.AGENT_CONTACT_ASSIGNED` on success
|
|
68
|
-
* - `CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED` on failure
|
|
69
|
-
* @ignore
|
|
70
|
-
*/
|
|
71
|
-
acceptPreviewContact: aqm.req(p => ({
|
|
72
|
-
url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_ACCEPT}`,
|
|
73
|
-
host: _constants.WCC_API_GATEWAY,
|
|
74
|
-
data: {},
|
|
75
|
-
method: _types2.HTTP_METHODS.POST,
|
|
76
|
-
timeout: _constants2.TIMEOUT_PREVIEW_ACCEPT,
|
|
77
|
-
err: _Utils.createErrDetailsObject,
|
|
78
|
-
notifSuccess: {
|
|
79
|
-
bind: {
|
|
80
|
-
type: _constants2.TASK_MESSAGE_TYPE,
|
|
81
|
-
data: {
|
|
82
|
-
type: [_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED, _types.CC_EVENTS.CONTACT_ENDED],
|
|
83
|
-
__typeMap: {
|
|
84
|
-
typeField: 'type',
|
|
85
|
-
conditions: {
|
|
86
|
-
[_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED]: {
|
|
87
|
-
reservationInteractionId: p.data.interactionId
|
|
88
|
-
},
|
|
89
|
-
[_types.CC_EVENTS.CONTACT_ENDED]: {
|
|
90
|
-
interactionId: p.data.interactionId
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
msg: {}
|
|
97
|
-
},
|
|
98
|
-
notifFail: {
|
|
99
|
-
bind: {
|
|
100
|
-
type: _constants2.TASK_MESSAGE_TYPE,
|
|
101
|
-
data: {
|
|
102
|
-
type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED,
|
|
103
|
-
campaignId: p.data.campaignId
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
errId: 'Service.aqm.dialer.acceptPreviewContact'
|
|
107
|
-
}
|
|
108
57
|
}))
|
|
109
58
|
};
|
|
110
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_constants","
|
|
1
|
+
{"version":3,"names":["_types","require","_constants","_Utils","_constants2","aqmDialer","aqm","startOutdial","req","p","url","TASK_API","host","WCC_API_GATEWAY","data","err","notifSuccess","bind","type","TASK_MESSAGE_TYPE","CC_EVENTS","AGENT_OFFER_CONTACT","msg","notifFail","AGENT_OUTBOUND_FAILED","errId"],"sources":["dialer.ts"],"sourcesContent":["import {CC_EVENTS} from '../config/types';\nimport {WCC_API_GATEWAY} from '../constants';\nimport {createErrDetailsObject as err} from '../core/Utils';\nimport {TASK_MESSAGE_TYPE, TASK_API} from './constants';\nimport * as Contact from './types';\nimport AqmReqs from '../core/aqm-reqs';\n\n/**\n * Returns an object with AQM dialer functions used for outbound contact handling.\n *\n * @param {AqmReqs} aqm - An instance of AQM request handler.\n * @returns {{\n * startOutdial: (params: {data: Contact.DialerPayload}) => Promise<any>\n * }} Object containing methods for outbound dialing.\n * @ignore\n */\nexport default function aqmDialer(aqm: AqmReqs) {\n return {\n /**\n * Initiates an outbound contact (outdial) request.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.DialerPayload} p.data - Payload for the outbound call.\n * @returns {Promise<any>} A promise that resolves or rejects based on the outbound call response.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_OFFER_CONTACT` on success\n * - `CC_EVENTS.AGENT_OUTBOUND_FAILED` on failure\n * @ignore\n */\n startOutdial: aqm.req((p: {data: Contact.DialerPayload}) => ({\n url: `${TASK_API}`,\n host: WCC_API_GATEWAY,\n data: p.data,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OFFER_CONTACT},\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OUTBOUND_FAILED},\n },\n errId: 'Service.aqm.dialer.startOutdial',\n },\n })),\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASI,SAASA,CAACC,GAAY,EAAE;EAC9C,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAED,GAAG,CAACE,GAAG,CAAEC,CAAgC,KAAM;MAC3DC,GAAG,EAAE,GAAGC,oBAAQ,EAAE;MAClBC,IAAI,EAAEC,0BAAe;MACrBC,IAAI,EAAEL,CAAC,CAACK,IAAI;MACZC,GAAG,EAAHA,6BAAG;MACHC,YAAY,EAAE;QACZC,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACC;UAAmB;QAC5C,CAAC;QACDC,GAAG,EAAE,CAAC;MACR,CAAC;MACDC,SAAS,EAAE;QACTN,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACI;UAAqB;QAC9C,CAAC;QACDC,KAAK,EAAE;MACT;IACF,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _constants = require("../../../constants");
|
|
8
|
+
var _Utils = require("../../core/Utils");
|
|
9
|
+
var _Task = _interopRequireDefault(require("../Task"));
|
|
10
|
+
var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
|
|
11
|
+
var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
|
|
12
|
+
var _constants2 = require("../../../metrics/constants");
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
class Digital extends _Task.default {
|
|
15
|
+
constructor(contact, data, wrapupData, agentId) {
|
|
16
|
+
super(contact, data, {
|
|
17
|
+
isEndTaskEnabled: true,
|
|
18
|
+
isEndConsultEnabled: false,
|
|
19
|
+
isRecordingEnabled: false
|
|
20
|
+
}, wrapupData, agentId);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Refresh the digital task with the latest backend payload and recompute UI controls.
|
|
25
|
+
*/
|
|
26
|
+
updateTaskData(newData, shouldOverwrite = false) {
|
|
27
|
+
super.updateTaskData(newData, shouldOverwrite);
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This is used for incoming digital task accept by agent.
|
|
33
|
+
*
|
|
34
|
+
* @returns Promise<TaskResponse>
|
|
35
|
+
* @throws Error
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* task.accept().then(()=>{}).catch(()=>{})
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
async accept() {
|
|
42
|
+
try {
|
|
43
|
+
_loggerProxy.default.info(`Accepting task`, {
|
|
44
|
+
module: _constants.CC_FILE,
|
|
45
|
+
method: _constants.METHODS.ACCEPT,
|
|
46
|
+
interactionId: this.data.interactionId
|
|
47
|
+
});
|
|
48
|
+
this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED]);
|
|
49
|
+
const response = await this.contact.accept({
|
|
50
|
+
interactionId: this.data.interactionId
|
|
51
|
+
});
|
|
52
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, {
|
|
53
|
+
taskId: this.data.interactionId,
|
|
54
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponse(response)
|
|
55
|
+
}, ['operational', 'behavioral', 'business']);
|
|
56
|
+
_loggerProxy.default.log(`Task accepted successfully`, {
|
|
57
|
+
module: _constants.CC_FILE,
|
|
58
|
+
method: _constants.METHODS.ACCEPT,
|
|
59
|
+
trackingId: response.trackingId,
|
|
60
|
+
interactionId: this.data.interactionId
|
|
61
|
+
});
|
|
62
|
+
return response;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
const {
|
|
65
|
+
error: detailedError
|
|
66
|
+
} = (0, _Utils.getErrorDetails)(error, _constants.METHODS.ACCEPT, _constants.CC_FILE);
|
|
67
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED, {
|
|
68
|
+
taskId: this.data.interactionId,
|
|
69
|
+
error: error.toString(),
|
|
70
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
|
|
71
|
+
}, ['operational', 'behavioral', 'business']);
|
|
72
|
+
throw detailedError;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.default = Digital;
|
|
77
|
+
//# sourceMappingURL=Digital.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_Utils","_Task","_interopRequireDefault","_loggerProxy","_MetricsManager","_constants2","e","__esModule","default","Digital","Task","constructor","contact","data","wrapupData","agentId","isEndTaskEnabled","isEndConsultEnabled","isRecordingEnabled","updateTaskData","newData","shouldOverwrite","accept","LoggerProxy","info","module","CC_FILE","method","METHODS","ACCEPT","interactionId","metricsManager","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","response","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","log","trackingId","error","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","exports"],"sources":["Digital.ts"],"sourcesContent":["import {CC_FILE, METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {IDigital, TaskResponse, TaskData} from '../types';\nimport {WrapupData} from '../../config/types';\nimport Task from '../Task';\nimport routingContact from '../contact';\nimport LoggerProxy from '../../../logger-proxy';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\n\nexport default class Digital extends Task implements IDigital {\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n super(\n contact,\n data,\n {\n isEndTaskEnabled: true,\n isEndConsultEnabled: false,\n isRecordingEnabled: false,\n },\n wrapupData,\n agentId\n );\n }\n\n /**\n * Refresh the digital task with the latest backend payload and recompute UI controls.\n */\n public updateTaskData(newData: TaskData, shouldOverwrite = false): IDigital {\n super.updateTaskData(newData, shouldOverwrite);\n\n return this;\n }\n\n /**\n * This is used for incoming digital task accept by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.accept().then(()=>{}).catch(()=>{})\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Accepting task`, {\n module: CC_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n const response = await this.contact.accept({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Task accepted successfully`, {\n module: CC_FILE,\n method: METHODS.ACCEPT,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.ACCEPT, CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|