@webex/contact-center 3.12.0-next.2 → 3.12.0-next.21
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/dist/cc.js +132 -0
- package/dist/cc.js.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/metrics/behavioral-events.js +26 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +4 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/config/constants.js +1 -1
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/types.js +4 -0
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/task/TaskManager.js +90 -8
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/constants.js +3 -1
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/index.js +7 -2
- package/dist/services/task/index.js.map +1 -1
- package/dist/services/task/types.js +44 -0
- package/dist/services/task/types.js.map +1 -1
- package/dist/types/cc.d.ts +44 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/metrics/constants.d.ts +4 -0
- package/dist/types/services/config/types.d.ts +8 -0
- package/dist/types/services/core/Err.d.ts +4 -0
- package/dist/types/services/task/constants.d.ts +2 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/types.d.ts +53 -1
- package/dist/webex.js +1 -1
- package/package.json +8 -8
- package/src/cc.ts +160 -0
- package/src/constants.ts +2 -0
- package/src/metrics/behavioral-events.ts +28 -0
- package/src/metrics/constants.ts +4 -0
- package/src/services/config/constants.ts +1 -1
- package/src/services/config/types.ts +4 -0
- package/src/services/core/Err.ts +2 -0
- package/src/services/task/TaskManager.ts +102 -22
- package/src/services/task/constants.ts +2 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/index.ts +7 -2
- package/src/services/task/types.ts +56 -0
- package/test/unit/spec/cc.ts +130 -0
- package/test/unit/spec/services/config/index.ts +1 -1
- package/test/unit/spec/services/task/TaskManager.ts +238 -7
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/index.ts +21 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -237,7 +237,7 @@ class TaskManager extends _events.default {
|
|
|
237
237
|
case _types2.CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:
|
|
238
238
|
case _types2.CC_EVENTS.AGENT_INVITE_FAILED:
|
|
239
239
|
{
|
|
240
|
-
_loggerProxy.default.
|
|
240
|
+
_loggerProxy.default.info(`Task removal triggered by ${payload.data.type}`, {
|
|
241
241
|
module: _constants.TASK_MANAGER_FILE,
|
|
242
242
|
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
243
243
|
interactionId: payload.data.interactionId
|
|
@@ -258,16 +258,23 @@ class TaskManager extends _events.default {
|
|
|
258
258
|
break;
|
|
259
259
|
}
|
|
260
260
|
case _types2.CC_EVENTS.CONTACT_ENDED:
|
|
261
|
-
// Update task data
|
|
261
|
+
// Update task data.
|
|
262
262
|
if (task) {
|
|
263
|
-
_loggerProxy.default.
|
|
263
|
+
_loggerProxy.default.info(`Contact ended for interaction`, {
|
|
264
264
|
module: _constants.TASK_MANAGER_FILE,
|
|
265
265
|
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
266
266
|
interactionId: payload.data.interactionId
|
|
267
267
|
});
|
|
268
|
+
|
|
269
|
+
// Campaign preview tasks should never trigger wrapup on ContactEnded —
|
|
270
|
+
// they are terminal cleanup events. For all other tasks, derive
|
|
271
|
+
// wrapUpRequired from agentsPendingWrapUp as before.
|
|
272
|
+
const CAMPAIGN_OUTBOUND_TYPES = ['STANDARD_PREVIEW_CAMPAIGN', 'DIRECT_PREVIEW_CAMPAIGN'];
|
|
273
|
+
const isCampaignPreview = CAMPAIGN_OUTBOUND_TYPES.includes(task.data?.interaction?.outboundType ?? '');
|
|
274
|
+
const wrapUpRequired = isCampaignPreview ? false : payload.data.agentsPendingWrapUp?.includes(this.agentId) || false;
|
|
268
275
|
task = this.updateTaskData(task, {
|
|
269
276
|
...payload.data,
|
|
270
|
-
wrapUpRequired
|
|
277
|
+
wrapUpRequired
|
|
271
278
|
});
|
|
272
279
|
|
|
273
280
|
// Handle cleanup based on whether task should be deleted
|
|
@@ -276,11 +283,86 @@ class TaskManager extends _events.default {
|
|
|
276
283
|
}
|
|
277
284
|
break;
|
|
278
285
|
case _types2.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED:
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
286
|
+
{
|
|
287
|
+
// CampaignContactUpdated is a non-terminal event (e.g., next contact after skip/remove).
|
|
288
|
+
// Update the task data and emit an event so consumers can react to the updated contact.
|
|
289
|
+
// Do NOT remove the task or emit TASK_END — cleanup is handled by CONTACT_ENDED.
|
|
290
|
+
if (task) {
|
|
291
|
+
// Carry forward campaign preview fields from existing task data since the updated
|
|
292
|
+
// contact payload may not include them, and reconcileData would delete them.
|
|
293
|
+
const existingCpd = task.data?.interaction?.callProcessingDetails;
|
|
294
|
+
const updatedData = {
|
|
295
|
+
...payload.data
|
|
296
|
+
};
|
|
297
|
+
if (existingCpd) {
|
|
298
|
+
const campaignFields = {
|
|
299
|
+
...(existingCpd.campaignPreviewAutoAction && {
|
|
300
|
+
campaignPreviewAutoAction: existingCpd.campaignPreviewAutoAction
|
|
301
|
+
}),
|
|
302
|
+
...(existingCpd.campaignPreviewOfferTimeout && {
|
|
303
|
+
campaignPreviewOfferTimeout: existingCpd.campaignPreviewOfferTimeout
|
|
304
|
+
}),
|
|
305
|
+
...(existingCpd.campaignPreviewSkipDisabled && {
|
|
306
|
+
campaignPreviewSkipDisabled: existingCpd.campaignPreviewSkipDisabled
|
|
307
|
+
}),
|
|
308
|
+
...(existingCpd.campaignPreviewRemoveDisabled && {
|
|
309
|
+
campaignPreviewRemoveDisabled: existingCpd.campaignPreviewRemoveDisabled
|
|
310
|
+
})
|
|
311
|
+
};
|
|
312
|
+
if (!updatedData.interaction) {
|
|
313
|
+
updatedData.interaction = {};
|
|
314
|
+
}
|
|
315
|
+
updatedData.interaction = {
|
|
316
|
+
...updatedData.interaction,
|
|
317
|
+
callProcessingDetails: {
|
|
318
|
+
...campaignFields,
|
|
319
|
+
...(updatedData.interaction.callProcessingDetails || {})
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
_loggerProxy.default.log('Campaign contact updated - carrying forward preview fields', {
|
|
324
|
+
module: _constants.TASK_MANAGER_FILE,
|
|
325
|
+
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
326
|
+
interactionId: payload.data.interactionId,
|
|
327
|
+
data: {
|
|
328
|
+
hasCpd: !!updatedData.interaction?.callProcessingDetails,
|
|
329
|
+
autoAction: updatedData.interaction?.callProcessingDetails?.campaignPreviewAutoAction,
|
|
330
|
+
skipDisabled: updatedData.interaction?.callProcessingDetails?.campaignPreviewSkipDisabled,
|
|
331
|
+
removeDisabled: updatedData.interaction?.callProcessingDetails?.campaignPreviewRemoveDisabled
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
task = this.updateTaskData(task, updatedData);
|
|
335
|
+
task.emit(_types.TASK_EVENTS.TASK_CAMPAIGN_CONTACT_UPDATED, task);
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
case _types2.CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED:
|
|
282
340
|
if (task) {
|
|
283
|
-
|
|
341
|
+
// Failure payloads are sparse (no interaction field). Spread existing
|
|
342
|
+
// task data first so reconcileData doesn't delete interaction/cpd.
|
|
343
|
+
task = this.updateTaskData(task, {
|
|
344
|
+
...task.data,
|
|
345
|
+
...payload.data
|
|
346
|
+
});
|
|
347
|
+
task.emit(_types.TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_ACCEPT_FAILED, task);
|
|
348
|
+
}
|
|
349
|
+
break;
|
|
350
|
+
case _types2.CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED:
|
|
351
|
+
if (task) {
|
|
352
|
+
task = this.updateTaskData(task, {
|
|
353
|
+
...task.data,
|
|
354
|
+
...payload.data
|
|
355
|
+
});
|
|
356
|
+
task.emit(_types.TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_SKIP_FAILED, task);
|
|
357
|
+
}
|
|
358
|
+
break;
|
|
359
|
+
case _types2.CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED:
|
|
360
|
+
if (task) {
|
|
361
|
+
task = this.updateTaskData(task, {
|
|
362
|
+
...task.data,
|
|
363
|
+
...payload.data
|
|
364
|
+
});
|
|
365
|
+
task.emit(_types.TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_REMOVE_FAILED, task);
|
|
284
366
|
}
|
|
285
367
|
break;
|
|
286
368
|
case _types2.CC_EVENTS.CONTACT_MERGED:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_types","_constants","_constants2","_types2","_types3","_loggerProxy","_","_MetricsManager","_constants3","_TaskUtils","e","__esModule","default","TaskManager","EventEmitter","constructor","apiAIAssistant","contact","webCallingService","webSocketManager","taskCollection","metricsManager","MetricsManager","getInstance","registerTaskListeners","registerIncomingCallEvent","setWrapupData","wrapupData","setAgentId","agentId","getAgentId","setWebRtcEnabled","webRtcEnabled","handleRealtimeWebsocketEvent","event","payload","JSON","parse","eventType","type","data","notifType","interactionId","conversationId","task","LoggerProxy","info","module","TASK_MANAGER_FILE","method","METHODS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","emit","error","handleIncomingWebCall","call","currentTask","Object","values","find","interaction","mediaType","isCampaignPreviewReservation","mapCallToTask","getCallId","log","HANDLE_INCOMING_WEB_CALL","TASK_EVENTS","TASK_INCOMING","on","LINE_EVENTS","INCOMING_CALL","unregisterIncomingCallEvent","off","CC_TASK_EVENTS","includes","REGISTER_TASK_LISTENERS","CC_EVENTS","AGENT_CONTACT","shouldAutoAnswer","shouldAutoAnswerTask","loginOption","Task","wrapUpRequired","participants","isWrapUp","isConferenceInProgress","getIsConferenceInProgress","isAutoAnswering","state","TASK_HYDRATE","AGENT_CONTACT_RESERVED","shouldAutoAnswerReserved","isConsulted","LoginOption","BROWSER","MEDIA_CHANNEL","TELEPHONY","AGENT_OFFER_CONTACT","updateTaskData","TASK_OFFER_CONTACT","handleAutoAnswer","AGENT_OUTBOUND_FAILED","trackEvent","METRIC_EVENT_NAMES","TASK_OUTDIAL_FAILED","getCommonTrackingFieldForAQMResponse","taskId","reason","reasonCode","AGENT_CONTACT_ASSIGNED","reservationInteractionId","TASK_ASSIGNED","AGENT_CONTACT_UNASSIGNED","TASK_END","AGENT_CONTACT_OFFER_RONA","AGENT_CONTACT_ASSIGN_FAILED","AGENT_INVITE_FAILED","warn","eventTypeToMetricMap","metricEventName","handleTaskCleanup","TASK_REJECT","CONTACT_ENDED","agentsPendingWrapUp","CAMPAIGN_CONTACT_UPDATED","CONTACT_MERGED","handleContactMerged","AGENT_CONTACT_HELD","TASK_HOLD","AGENT_CONTACT_UNHELD","TASK_RESUME","AGENT_VTEAM_TRANSFERRED","AGENT_CTQ_CANCEL_FAILED","TASK_CONSULT_QUEUE_FAILED","AGENT_CONSULT_CREATED","TASK_CONSULT_CREATED","AGENT_OFFER_CONSULT","TASK_OFFER_CONSULT","AGENT_CONSULTING","TASK_CONSULT_ACCEPTED","TASK_CONSULTING","AGENT_CONSULT_FAILED","AGENT_CONSULT_ENDED","removeTaskFromCollection","TASK_CONSULT_END","AGENT_CTQ_CANCELLED","TASK_CONSULT_QUEUE_CANCELLED","AGENT_WRAPUP","AGENT_WRAPPEDUP","cancelAutoWrapupTimer","TASK_WRAPPEDUP","CONTACT_RECORDING_PAUSED","TASK_RECORDING_PAUSED","CONTACT_RECORDING_PAUSE_FAILED","TASK_RECORDING_PAUSE_FAILED","CONTACT_RECORDING_RESUMED","TASK_RECORDING_RESUMED","CONTACT_RECORDING_RESUME_FAILED","TASK_RECORDING_RESUME_FAILED","AGENT_CONSULT_CONFERENCING","TASK_CONFERENCE_ESTABLISHING","AGENT_CONSULT_CONFERENCED","TASK_CONFERENCE_STARTED","AGENT_CONSULT_CONFERENCE_FAILED","TASK_CONFERENCE_FAILED","AGENT_CONSULT_CONFERENCE_ENDED","isPrimary","isParticipantInMainInteraction","TASK_CONFERENCE_ENDED","PARTICIPANT_JOINED_CONFERENCE","TASK_PARTICIPANT_JOINED","PARTICIPANT_LEFT_CONFERENCE","checkParticipantNotInInteraction","TASK_PARTICIPANT_LEFT","PARTICIPANT_LEFT_CONFERENCE_FAILED","TASK_PARTICIPANT_LEFT_FAILED","AGENT_CONSULT_CONFERENCE_END_FAILED","TASK_CONFERENCE_END_FAILED","AGENT_CONFERENCE_TRANSFERRED","TASK_CONFERENCE_TRANSFERRED","AGENT_CONFERENCE_TRANSFER_FAILED","TASK_CONFERENCE_TRANSFER_FAILED","PARTICIPANT_POST_CALL_ACTIVITY","TASK_POST_CALL_ACTIVITY","AGENT_OFFER_CAMPAIGN_RESERVATION","TASK_CAMPAIGN_PREVIEW_RESERVATION","transcriptInteractionId","TRANSCRIPT_EVENT_MAP","requestRealTimeTranscripts","taskData","undefined","UPDATE_TASK_DATA","childInteractionId","TASK_MERGED","REMOVE_TASK_FROM_COLLECTION","accept","TASK_AUTO_ANSWER_SUCCESS","isAutoAnswered","TASK_AUTO_ANSWERED","TASK_AUTO_ANSWER_FAILED","message","unregisterWebCallListeners","cleanUpCall","isOutdial","outboundType","isNew","needsWrapUp","isSecondaryEpDnAgent","action","aiFeature","realtimeTranscripts","enable","sendEvent","AIAssistantEventType","CUSTOM_EVENT","AIAssistantEventName","GET_TRANSCRIPTS","catch","getTask","getAllTasks","getTaskManager","taskManager","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {ICall, LINE_EVENTS} from '@webex/calling';\nimport {WebSocketManager} from '../core/websocket/WebSocketManager';\nimport routingContact from './contact';\nimport WebCallingService from '../WebCallingService';\nimport {ITask, MEDIA_CHANNEL, TASK_EVENTS, TaskData, TaskId} from './types';\nimport {TASK_MANAGER_FILE} from '../../constants';\nimport {METHODS, TRANSCRIPT_EVENT_MAP} from './constants';\nimport {CC_EVENTS, CC_TASK_EVENTS, WrapupData} from '../config/types';\nimport {AIAssistantEventName, AIAssistantEventType, LoginOption} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport Task from '.';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport {\n checkParticipantNotInInteraction,\n getIsConferenceInProgress,\n isCampaignPreviewReservation,\n isParticipantInMainInteraction,\n isPrimary,\n isSecondaryEpDnAgent,\n shouldAutoAnswerTask,\n} from './TaskUtils';\nimport ApiAIAssistant from '../ApiAiAssistant';\n\n/** @internal */\nexport default class TaskManager extends EventEmitter {\n private call: ICall;\n private contact: ReturnType<typeof routingContact>;\n /**\n * Collection of tasks indexed by TaskId\n * @type {Record<TaskId, ITask>}\n * @private\n */\n private taskCollection: Record<TaskId, ITask>;\n private webCallingService: WebCallingService;\n private webSocketManager: WebSocketManager;\n private metricsManager: MetricsManager;\n private static taskManager;\n private wrapupData: WrapupData;\n private agentId: string;\n private webRtcEnabled: boolean;\n private apiAIAssistant?: ApiAIAssistant;\n /**\n * @param contact - Routing Contact layer. Talks to AQMReq layer to convert events to promises\n * @param webCallingService - Webrtc Service Layer\n * @param webSocketManager - Websocket Manager to maintain websocket connection and keepalives\n */\n constructor(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager\n ) {\n super();\n this.apiAIAssistant = apiAIAssistant;\n this.contact = contact;\n this.taskCollection = {};\n this.webCallingService = webCallingService;\n this.webSocketManager = webSocketManager;\n this.metricsManager = MetricsManager.getInstance();\n this.registerTaskListeners();\n this.registerIncomingCallEvent();\n }\n\n public setWrapupData(wrapupData: WrapupData) {\n this.wrapupData = wrapupData;\n }\n\n public setAgentId(agentId: string) {\n this.agentId = agentId;\n }\n\n /**\n * Gets the current agent ID\n * @returns {string} The agent ID set for this task manager instance\n * @public\n */\n public getAgentId(): string {\n return this.agentId;\n }\n\n public setWebRtcEnabled(webRtcEnabled: boolean) {\n this.webRtcEnabled = webRtcEnabled;\n }\n\n public handleRealtimeWebsocketEvent(event: string) {\n try {\n const payload = JSON.parse(event);\n\n const eventType = payload?.type || payload?.data?.notifType;\n const interactionId = payload?.data?.data?.conversationId;\n if (!eventType || !interactionId) return;\n\n const task = this.taskCollection[interactionId];\n if (!task) {\n LoggerProxy.info(`Realtime transcription task not found`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n interactionId,\n });\n\n return;\n }\n\n task.emit(eventType, payload.data);\n } catch (error) {\n LoggerProxy.error('Failed to parse RTD WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n error,\n });\n }\n }\n\n private handleIncomingWebCall = (call: ICall) => {\n const currentTask = Object.values(this.taskCollection).find(\n (task) =>\n task.data.interaction.mediaType === 'telephony' && !isCampaignPreviewReservation(task)\n );\n\n if (currentTask) {\n this.webCallingService.mapCallToTask(call.getCallId(), currentTask.data.interactionId);\n LoggerProxy.log(`Call mapped to task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_INCOMING_WEB_CALL,\n interactionId: currentTask.data.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_INCOMING, currentTask);\n }\n this.call = call;\n };\n\n public registerIncomingCallEvent() {\n this.webCallingService.on(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n public unregisterIncomingCallEvent() {\n this.webCallingService.off(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n private registerTaskListeners() {\n this.webSocketManager.on('message', (event) => {\n const payload = JSON.parse(event);\n // Re-emit the task events to the task object\n let task: ITask;\n if (payload.data?.type || payload.type) {\n if (Object.values(CC_TASK_EVENTS).includes(payload.data.type || payload.type)) {\n task =\n this.taskCollection[payload.data?.interactionId] ||\n this.taskCollection[payload.data?.data?.conversationId];\n }\n LoggerProxy.info(`Handling task event ${payload.data?.type}`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data?.interactionId,\n });\n switch (payload.data.type) {\n case CC_EVENTS.AGENT_CONTACT:\n // Case1 : Task is already present in taskCollection\n if (this.taskCollection[payload.data.interactionId]) {\n LoggerProxy.log(`Got AGENT_CONTACT: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n break;\n } else if (!this.taskCollection[payload.data.interactionId]) {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got AGENT_CONTACT : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n\n // Check if auto-answer should happen for this task\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload.data,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n wrapUpRequired:\n payload.data.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n isAutoAnswering: shouldAutoAnswer, // Set flag before emitting\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n // Condition 1: The state is=new i.e it is a incoming task\n if (payload.data.interaction.state === 'new') {\n LoggerProxy.log(\n `Got AGENT_CONTACT for a task with state=new, sending TASK_INCOMING event`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n } else {\n // Condition 2: The state is anything else i.e the task was connected\n LoggerProxy.log(\n `Got AGENT_CONTACT for a task with state=${payload.data.interaction.state}, sending TASK_HYDRATE event`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n this.emit(TASK_EVENTS.TASK_HYDRATE, task);\n }\n }\n break;\n\n case CC_EVENTS.AGENT_CONTACT_RESERVED: {\n // Check if auto-answer should happen for this task\n const shouldAutoAnswerReserved = shouldAutoAnswerTask(\n payload.data,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n isConsulted: false,\n isAutoAnswering: shouldAutoAnswerReserved, // Set flag before emitting\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n if (\n this.webCallingService.loginOption !== LoginOption.BROWSER ||\n task.data.interaction.mediaType !== MEDIA_CHANNEL.TELEPHONY // for digital channels\n ) {\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n } else if (this.call) {\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n }\n break;\n }\n case CC_EVENTS.AGENT_OFFER_CONTACT:\n // We don't have to emit any event here since this will be result of promise.\n task = this.updateTaskData(task, payload.data);\n LoggerProxy.log(`Agent offer contact received for task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_OFFER_CONTACT, task);\n\n // Handle auto-answer for offer contact\n this.handleAutoAnswer(task);\n break;\n case CC_EVENTS.AGENT_OUTBOUND_FAILED:\n if (task) {\n task = this.updateTaskData(task, payload.data);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(payload.data),\n taskId: payload.data.interactionId,\n reason: payload.data.reasonCode || payload.data.reason,\n },\n ['behavioral', 'operational']\n );\n LoggerProxy.log(`Agent outbound failed for task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n task.emit(TASK_EVENTS.TASK_OUTDIAL_FAILED, payload.data.reason ?? 'UNKNOWN_REASON');\n }\n break;\n case CC_EVENTS.AGENT_CONTACT_ASSIGNED:\n // When a campaign preview contact is accepted, the assigned event may arrive\n // with a new interactionId while the task is stored under the original\n // reservationInteractionId. Fall back to that key so the task is found.\n if (!task && payload.data.reservationInteractionId) {\n task = this.taskCollection[payload.data.reservationInteractionId];\n if (task) {\n // Re-key the task under the new interaction ID and remove the old entry\n delete this.taskCollection[payload.data.reservationInteractionId];\n this.taskCollection[payload.data.interactionId] = task;\n }\n }\n if (task) {\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_ASSIGNED, task);\n }\n break;\n case CC_EVENTS.AGENT_CONTACT_UNASSIGNED:\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired: true,\n });\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_CONTACT_OFFER_RONA:\n case CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:\n case CC_EVENTS.AGENT_INVITE_FAILED: {\n LoggerProxy.warn(\n `[DEBUG-CAMPAIGN-CLEAR] Task removal triggered by ${payload.data.type}, interactionId=${payload.data.interactionId}, taskType=${task?.data?.type}`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n task = this.updateTaskData(task, payload.data);\n\n const eventTypeToMetricMap: Record<string, keyof typeof METRIC_EVENT_NAMES> = {\n [CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED]: 'AGENT_CONTACT_ASSIGN_FAILED',\n [CC_EVENTS.AGENT_INVITE_FAILED]: 'AGENT_INVITE_FAILED',\n };\n const metricEventName: keyof typeof METRIC_EVENT_NAMES =\n eventTypeToMetricMap[payload.data.type] || 'AGENT_RONA';\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES[metricEventName],\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(payload.data),\n taskId: payload.data.interactionId,\n reason: payload.data.reason,\n },\n ['behavioral', 'operational']\n );\n this.handleTaskCleanup(task);\n task.emit(TASK_EVENTS.TASK_REJECT, payload.data.reason);\n break;\n }\n case CC_EVENTS.CONTACT_ENDED:\n // Update task data\n if (task) {\n LoggerProxy.warn(\n `[DEBUG-CAMPAIGN-CLEAR] CONTACT_ENDED, interactionId=${payload.data.interactionId}, taskType=${task?.data?.type}, state=${task?.data?.interaction?.state}`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired: payload.data.agentsPendingWrapUp?.includes(this.agentId) || false,\n });\n\n // Handle cleanup based on whether task should be deleted\n this.handleTaskCleanup(task);\n\n task?.emit(TASK_EVENTS.TASK_END, task);\n }\n break;\n case CC_EVENTS.CAMPAIGN_CONTACT_UPDATED:\n // CampaignContactUpdated is a non-terminal event (intermediate update during accept).\n // Only update the task data — do NOT remove the task or emit TASK_END.\n // Task cleanup is handled by CONTACT_ENDED or other terminal events.\n if (task) {\n task = this.updateTaskData(task, payload.data);\n }\n break;\n case CC_EVENTS.CONTACT_MERGED:\n task = this.handleContactMerged(task, payload.data);\n break;\n case CC_EVENTS.AGENT_CONTACT_HELD:\n // As soon as the main interaction is held, we need to emit TASK_HOLD\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_HOLD, task);\n break;\n case CC_EVENTS.AGENT_CONTACT_UNHELD:\n // As soon as the main interaction is unheld, we need to emit TASK_RESUME\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RESUME, task);\n break;\n case CC_EVENTS.AGENT_VTEAM_TRANSFERRED:\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired: true,\n });\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_CTQ_CANCEL_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONSULT_QUEUE_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CREATED:\n // Received when self agent initiates a consult\n task = this.updateTaskData(task, {\n ...payload.data,\n isConsulted: false, // This ensures that the task consult status is always reset\n });\n task.emit(TASK_EVENTS.TASK_CONSULT_CREATED, task);\n break;\n case CC_EVENTS.AGENT_OFFER_CONSULT:\n // Received when other agent sends us a consult offer\n task = this.updateTaskData(task, {\n ...payload.data,\n isConsulted: true, // This ensures that the task is marked as us being requested for a consult\n });\n task.emit(TASK_EVENTS.TASK_OFFER_CONSULT, task);\n\n // Handle auto-answer for consult offer\n this.handleAutoAnswer(task);\n break;\n case CC_EVENTS.AGENT_CONSULTING:\n // Received when agent is in an active consult state\n // TODO: Check if we can use backend consult state instead of isConsulted\n task = this.updateTaskData(task, payload.data);\n if (task.data.isConsulted) {\n // Fire only if you are the agent who received the consult request\n task.emit(TASK_EVENTS.TASK_CONSULT_ACCEPTED, task);\n } else {\n // Fire only if you are the agent who initiated the consult\n task.emit(TASK_EVENTS.TASK_CONSULTING, task);\n }\n break;\n case CC_EVENTS.AGENT_CONSULT_FAILED:\n // This can only be received by the agent who initiated the consult.\n // We need not emit any event here since this will be result of promise\n task = this.updateTaskData(task, payload.data);\n break;\n case CC_EVENTS.AGENT_CONSULT_ENDED:\n task = this.updateTaskData(task, payload.data);\n if (task.data.isConsulted) {\n // This will be the end state of the task as soon as we end the consult in case of\n // us being offered a consult\n this.removeTaskFromCollection(task);\n }\n task.emit(TASK_EVENTS.TASK_CONSULT_END, task);\n break;\n case CC_EVENTS.AGENT_CTQ_CANCELLED:\n // This event is received when the consult using queue is cancelled using API\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONSULT_QUEUE_CANCELLED, task);\n break;\n case CC_EVENTS.AGENT_WRAPUP:\n task = this.updateTaskData(task, {...payload.data, wrapUpRequired: true});\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_WRAPPEDUP:\n task.cancelAutoWrapupTimer();\n this.removeTaskFromCollection(task);\n task.emit(TASK_EVENTS.TASK_WRAPPEDUP, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_PAUSED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_PAUSED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_PAUSE_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_RESUMED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_RESUMED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_RESUME_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_RESUME_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCING:\n // Conference is being established - update task state and emit establishing event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_ESTABLISHING, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCED:\n // Conference started successfully - update task state and emit event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_STARTED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_FAILED:\n // Conference failed - update task state and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_ENDED:\n // Conference ended - update task state and emit event\n task = this.updateTaskData(task, payload.data);\n if (\n !task ||\n isPrimary(task, this.agentId) ||\n isParticipantInMainInteraction(task, this.agentId)\n ) {\n LoggerProxy.log('Primary or main interaction participant leaving conference');\n } else {\n this.removeTaskFromCollection(task);\n }\n task.emit(TASK_EVENTS.TASK_CONFERENCE_ENDED, task);\n break;\n case CC_EVENTS.PARTICIPANT_JOINED_CONFERENCE: {\n task = this.updateTaskData(task, {\n ...payload.data,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n });\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_JOINED, task);\n break;\n }\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE: {\n // Conference ended - update task state and emit event\n\n task = this.updateTaskData(task, {\n ...payload.data,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n });\n if (checkParticipantNotInInteraction(task, this.agentId)) {\n if (\n isParticipantInMainInteraction(task, this.agentId) ||\n isPrimary(task, this.agentId)\n ) {\n LoggerProxy.log('Primary or main interaction participant leaving conference');\n } else {\n this.removeTaskFromCollection(task);\n }\n }\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_LEFT, task);\n break;\n }\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE_FAILED:\n // Conference exit failed - update task state and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_LEFT_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_END_FAILED:\n // Conference end failed - update task state with error details and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_END_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFERRED:\n // Conference was transferred - update task state and emit transfer success event\n // Note: Backend should provide hasLeft and wrapUpRequired status\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_TRANSFERRED, task);\n break;\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFER_FAILED:\n // Conference transfer failed - update task state with error details and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_TRANSFER_FAILED, task);\n break;\n case CC_EVENTS.PARTICIPANT_POST_CALL_ACTIVITY:\n // Post-call activity for participant - update task state with activity details\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_POST_CALL_ACTIVITY, task);\n break;\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION: {\n // Campaign preview contact offered to agent\n // Create a task in the collection so subsequent events (e.g. AGENT_CONTACT_ASSIGNED\n // after acceptPreviewContact) can find and update it.\n // Emit TASK_CAMPAIGN_PREVIEW_RESERVATION instead of TASK_INCOMING so the call\n // does not ring out to the customer before the agent explicitly accepts the preview contact.\n LoggerProxy.log('Campaign preview reservation received', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n\n if (!this.taskCollection[payload.data.interactionId]) {\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n wrapUpRequired: false,\n isConferenceInProgress: false,\n isAutoAnswering: false,\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n } else {\n task = this.updateTaskData(task, payload.data);\n }\n\n this.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, task);\n break;\n }\n\n default:\n break;\n }\n if (task) {\n task.emit(payload.data.type, payload.data);\n }\n\n const transcriptInteractionId =\n payload.data?.interactionId ||\n payload.data?.data?.conversationId ||\n task?.data?.interactionId;\n\n if (TRANSCRIPT_EVENT_MAP[payload.data.type] && transcriptInteractionId) {\n this.requestRealTimeTranscripts(payload.data.type, transcriptInteractionId);\n }\n }\n });\n }\n\n private updateTaskData(task: ITask, taskData: TaskData): ITask {\n if (!task) {\n return undefined;\n }\n\n if (!taskData?.interactionId) {\n LoggerProxy.warn('Received task update with missing interactionId', {\n module: TASK_MANAGER_FILE,\n method: METHODS.UPDATE_TASK_DATA,\n });\n }\n\n try {\n const currentTask = task.updateTaskData(taskData);\n this.taskCollection[taskData.interactionId] = currentTask;\n\n return currentTask;\n } catch (error) {\n LoggerProxy.error(`Failed to update task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.UPDATE_TASK_DATA,\n interactionId: taskData.interactionId,\n });\n\n return task;\n }\n }\n\n /**\n * Handles CONTACT_MERGED event logic\n * @param task - The task to process\n * @param taskData - The task data from the event payload\n * @returns Updated or newly created task\n * @private\n */\n private handleContactMerged(task: ITask, taskData: TaskData): ITask {\n if (taskData.childInteractionId) {\n // remove the child task from collection\n this.removeTaskFromCollection(this.taskCollection[taskData.childInteractionId]);\n }\n\n if (this.taskCollection[taskData.interactionId]) {\n LoggerProxy.log(`Got CONTACT_MERGED: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: taskData.interactionId,\n });\n // update the task data\n task = this.updateTaskData(task, taskData);\n } else {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got CONTACT_MERGED : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: taskData.interactionId,\n });\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...taskData,\n wrapUpRequired: taskData.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(taskData),\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[taskData.interactionId] = task;\n }\n\n this.emit(TASK_EVENTS.TASK_MERGED, task);\n\n return task;\n }\n\n private removeTaskFromCollection(task: ITask) {\n if (task?.data?.interactionId) {\n delete this.taskCollection[task.data.interactionId];\n LoggerProxy.info(`Task removed from collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REMOVE_TASK_FROM_COLLECTION,\n interactionId: task.data.interactionId,\n });\n }\n }\n\n /**\n * Handles auto-answer logic for incoming tasks\n * Automatically accepts tasks when isAutoAnswering flag is set\n * The flag is set during task creation based on:\n * 1. WebRTC calls with auto-answer enabled in agent profile\n * 2. Agent-initiated WebRTC outdial calls\n * 3. Agent-initiated digital outbound (Email/SMS) without previous transfers\n *\n * @param task - The task to auto-answer\n * @private\n */\n private async handleAutoAnswer(task: ITask): Promise<void> {\n if (!task || !task.data || !task.data.isAutoAnswering) {\n return;\n }\n\n LoggerProxy.info(`Auto-answering task`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n });\n\n try {\n await task.accept();\n LoggerProxy.info(`Task auto-answered successfully`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n });\n\n // Track successful auto-answer\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_SUCCESS,\n {\n taskId: task.data.interactionId,\n mediaType: task.data.interaction.mediaType,\n isAutoAnswered: true,\n },\n ['behavioral', 'operational']\n );\n // Emit task:autoAnswered event for widgets/UI to react\n task.emit(TASK_EVENTS.TASK_AUTO_ANSWERED, task);\n } catch (error) {\n // Reset isAutoAnswering flag on failure\n task.updateTaskData({...task.data, isAutoAnswering: false});\n LoggerProxy.error(`Failed to auto-answer task`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n error,\n });\n\n // Track auto-answer failure\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_FAILED,\n {\n taskId: task.data.interactionId,\n mediaType: task.data.interaction.mediaType,\n error: error?.message || 'Unknown error',\n isAutoAnswered: false,\n },\n ['behavioral', 'operational']\n );\n }\n }\n\n /**\n * Handles cleanup of task resources including Desktop/WebRTC call cleanup and task removal\n * @param task - The task to clean up\n * @private\n */\n private handleTaskCleanup(task: ITask) {\n // Clean up Desktop/WebRTC calling resources for browser-based telephony tasks\n if (\n this.webCallingService.loginOption === LoginOption.BROWSER &&\n task.data.interaction.mediaType === 'telephony'\n ) {\n task.unregisterWebCallListeners();\n this.webCallingService.cleanUpCall();\n }\n\n const isOutdial = task.data.interaction.outboundType === 'OUTDIAL';\n const isNew = task.data.interaction.state === 'new';\n const needsWrapUp = task.data.agentsPendingWrapUp?.includes(this.agentId) ?? false;\n\n // For OUTDIAL: only remove if NOT terminated (user-declined, no wrap-up follows)\n // For non-OUTDIAL: remove if state is 'new'\n // Always remove if secondary EpDn agent\n if (\n (isNew && !(isOutdial && needsWrapUp)) ||\n isSecondaryEpDnAgent(task.data.interaction) ||\n (!needsWrapUp && isOutdial) // For outdial tasks, needs wrap-up is false and state is \"WRAPUP\". We need to just remove the task.\n ) {\n this.removeTaskFromCollection(task);\n }\n }\n\n /**\n * Sends transcript start/stop event based on the CC event type.\n * Fire-and-forget; errors are logged but do not interrupt event processing.\n */\n private requestRealTimeTranscripts(eventType: string, interactionId: string): void {\n const action = TRANSCRIPT_EVENT_MAP[eventType];\n if (\n !action ||\n !this.apiAIAssistant ||\n this.apiAIAssistant.aiFeature?.realtimeTranscripts?.enable === false\n )\n return;\n\n this.apiAIAssistant\n .sendEvent(\n this.agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.GET_TRANSCRIPTS,\n action\n )\n .catch((error) => {\n LoggerProxy.error(`Failed to send transcript ${action} event`, {\n module: TASK_MANAGER_FILE,\n method: 'requestRealTimeTranscripts',\n interactionId,\n error,\n });\n });\n }\n\n public getTask(taskId: TaskId): ITask {\n return this.taskCollection[taskId];\n }\n\n /**\n * @param taskId - Unique identifier for each task\n */\n public getAllTasks = (): Record<TaskId, ITask> => {\n return this.taskCollection;\n };\n\n public static getTaskManager(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager\n ): TaskManager {\n if (!TaskManager.taskManager) {\n TaskManager.taskManager = new TaskManager(\n apiAIAssistant,\n contact,\n webCallingService,\n webSocketManager\n );\n }\n\n return this.taskManager;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_types","_constants","_constants2","_types2","_types3","_loggerProxy","_","_MetricsManager","_constants3","_TaskUtils","e","__esModule","default","TaskManager","EventEmitter","constructor","apiAIAssistant","contact","webCallingService","webSocketManager","taskCollection","metricsManager","MetricsManager","getInstance","registerTaskListeners","registerIncomingCallEvent","setWrapupData","wrapupData","setAgentId","agentId","getAgentId","setWebRtcEnabled","webRtcEnabled","handleRealtimeWebsocketEvent","event","payload","JSON","parse","eventType","type","data","notifType","interactionId","conversationId","task","LoggerProxy","info","module","TASK_MANAGER_FILE","method","METHODS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","emit","error","handleIncomingWebCall","call","currentTask","Object","values","find","interaction","mediaType","isCampaignPreviewReservation","mapCallToTask","getCallId","log","HANDLE_INCOMING_WEB_CALL","TASK_EVENTS","TASK_INCOMING","on","LINE_EVENTS","INCOMING_CALL","unregisterIncomingCallEvent","off","CC_TASK_EVENTS","includes","REGISTER_TASK_LISTENERS","CC_EVENTS","AGENT_CONTACT","shouldAutoAnswer","shouldAutoAnswerTask","loginOption","Task","wrapUpRequired","participants","isWrapUp","isConferenceInProgress","getIsConferenceInProgress","isAutoAnswering","state","TASK_HYDRATE","AGENT_CONTACT_RESERVED","shouldAutoAnswerReserved","isConsulted","LoginOption","BROWSER","MEDIA_CHANNEL","TELEPHONY","AGENT_OFFER_CONTACT","updateTaskData","TASK_OFFER_CONTACT","handleAutoAnswer","AGENT_OUTBOUND_FAILED","trackEvent","METRIC_EVENT_NAMES","TASK_OUTDIAL_FAILED","getCommonTrackingFieldForAQMResponse","taskId","reason","reasonCode","AGENT_CONTACT_ASSIGNED","reservationInteractionId","TASK_ASSIGNED","AGENT_CONTACT_UNASSIGNED","TASK_END","AGENT_CONTACT_OFFER_RONA","AGENT_CONTACT_ASSIGN_FAILED","AGENT_INVITE_FAILED","eventTypeToMetricMap","metricEventName","handleTaskCleanup","TASK_REJECT","CONTACT_ENDED","CAMPAIGN_OUTBOUND_TYPES","isCampaignPreview","outboundType","agentsPendingWrapUp","CAMPAIGN_CONTACT_UPDATED","existingCpd","callProcessingDetails","updatedData","campaignFields","campaignPreviewAutoAction","campaignPreviewOfferTimeout","campaignPreviewSkipDisabled","campaignPreviewRemoveDisabled","hasCpd","autoAction","skipDisabled","removeDisabled","TASK_CAMPAIGN_CONTACT_UPDATED","CAMPAIGN_PREVIEW_ACCEPT_FAILED","TASK_CAMPAIGN_PREVIEW_ACCEPT_FAILED","CAMPAIGN_PREVIEW_SKIP_FAILED","TASK_CAMPAIGN_PREVIEW_SKIP_FAILED","CAMPAIGN_PREVIEW_REMOVE_FAILED","TASK_CAMPAIGN_PREVIEW_REMOVE_FAILED","CONTACT_MERGED","handleContactMerged","AGENT_CONTACT_HELD","TASK_HOLD","AGENT_CONTACT_UNHELD","TASK_RESUME","AGENT_VTEAM_TRANSFERRED","AGENT_CTQ_CANCEL_FAILED","TASK_CONSULT_QUEUE_FAILED","AGENT_CONSULT_CREATED","TASK_CONSULT_CREATED","AGENT_OFFER_CONSULT","TASK_OFFER_CONSULT","AGENT_CONSULTING","TASK_CONSULT_ACCEPTED","TASK_CONSULTING","AGENT_CONSULT_FAILED","AGENT_CONSULT_ENDED","removeTaskFromCollection","TASK_CONSULT_END","AGENT_CTQ_CANCELLED","TASK_CONSULT_QUEUE_CANCELLED","AGENT_WRAPUP","AGENT_WRAPPEDUP","cancelAutoWrapupTimer","TASK_WRAPPEDUP","CONTACT_RECORDING_PAUSED","TASK_RECORDING_PAUSED","CONTACT_RECORDING_PAUSE_FAILED","TASK_RECORDING_PAUSE_FAILED","CONTACT_RECORDING_RESUMED","TASK_RECORDING_RESUMED","CONTACT_RECORDING_RESUME_FAILED","TASK_RECORDING_RESUME_FAILED","AGENT_CONSULT_CONFERENCING","TASK_CONFERENCE_ESTABLISHING","AGENT_CONSULT_CONFERENCED","TASK_CONFERENCE_STARTED","AGENT_CONSULT_CONFERENCE_FAILED","TASK_CONFERENCE_FAILED","AGENT_CONSULT_CONFERENCE_ENDED","isPrimary","isParticipantInMainInteraction","TASK_CONFERENCE_ENDED","PARTICIPANT_JOINED_CONFERENCE","TASK_PARTICIPANT_JOINED","PARTICIPANT_LEFT_CONFERENCE","checkParticipantNotInInteraction","TASK_PARTICIPANT_LEFT","PARTICIPANT_LEFT_CONFERENCE_FAILED","TASK_PARTICIPANT_LEFT_FAILED","AGENT_CONSULT_CONFERENCE_END_FAILED","TASK_CONFERENCE_END_FAILED","AGENT_CONFERENCE_TRANSFERRED","TASK_CONFERENCE_TRANSFERRED","AGENT_CONFERENCE_TRANSFER_FAILED","TASK_CONFERENCE_TRANSFER_FAILED","PARTICIPANT_POST_CALL_ACTIVITY","TASK_POST_CALL_ACTIVITY","AGENT_OFFER_CAMPAIGN_RESERVATION","TASK_CAMPAIGN_PREVIEW_RESERVATION","transcriptInteractionId","TRANSCRIPT_EVENT_MAP","requestRealTimeTranscripts","taskData","undefined","warn","UPDATE_TASK_DATA","childInteractionId","TASK_MERGED","REMOVE_TASK_FROM_COLLECTION","accept","TASK_AUTO_ANSWER_SUCCESS","isAutoAnswered","TASK_AUTO_ANSWERED","TASK_AUTO_ANSWER_FAILED","message","unregisterWebCallListeners","cleanUpCall","isOutdial","isNew","needsWrapUp","isSecondaryEpDnAgent","action","aiFeature","realtimeTranscripts","enable","sendEvent","AIAssistantEventType","CUSTOM_EVENT","AIAssistantEventName","GET_TRANSCRIPTS","catch","getTask","getAllTasks","getTaskManager","taskManager","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {ICall, LINE_EVENTS} from '@webex/calling';\nimport {WebSocketManager} from '../core/websocket/WebSocketManager';\nimport routingContact from './contact';\nimport WebCallingService from '../WebCallingService';\nimport {ITask, MEDIA_CHANNEL, TASK_EVENTS, TaskData, TaskId} from './types';\nimport {TASK_MANAGER_FILE} from '../../constants';\nimport {METHODS, TRANSCRIPT_EVENT_MAP} from './constants';\nimport {CC_EVENTS, CC_TASK_EVENTS, WrapupData} from '../config/types';\nimport {AIAssistantEventName, AIAssistantEventType, LoginOption} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport Task from '.';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport {\n checkParticipantNotInInteraction,\n getIsConferenceInProgress,\n isCampaignPreviewReservation,\n isParticipantInMainInteraction,\n isPrimary,\n isSecondaryEpDnAgent,\n shouldAutoAnswerTask,\n} from './TaskUtils';\nimport ApiAIAssistant from '../ApiAiAssistant';\n\n/** @internal */\nexport default class TaskManager extends EventEmitter {\n private call: ICall;\n private contact: ReturnType<typeof routingContact>;\n /**\n * Collection of tasks indexed by TaskId\n * @type {Record<TaskId, ITask>}\n * @private\n */\n private taskCollection: Record<TaskId, ITask>;\n private webCallingService: WebCallingService;\n private webSocketManager: WebSocketManager;\n private metricsManager: MetricsManager;\n private static taskManager;\n private wrapupData: WrapupData;\n private agentId: string;\n private webRtcEnabled: boolean;\n private apiAIAssistant?: ApiAIAssistant;\n /**\n * @param contact - Routing Contact layer. Talks to AQMReq layer to convert events to promises\n * @param webCallingService - Webrtc Service Layer\n * @param webSocketManager - Websocket Manager to maintain websocket connection and keepalives\n */\n constructor(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager\n ) {\n super();\n this.apiAIAssistant = apiAIAssistant;\n this.contact = contact;\n this.taskCollection = {};\n this.webCallingService = webCallingService;\n this.webSocketManager = webSocketManager;\n this.metricsManager = MetricsManager.getInstance();\n this.registerTaskListeners();\n this.registerIncomingCallEvent();\n }\n\n public setWrapupData(wrapupData: WrapupData) {\n this.wrapupData = wrapupData;\n }\n\n public setAgentId(agentId: string) {\n this.agentId = agentId;\n }\n\n /**\n * Gets the current agent ID\n * @returns {string} The agent ID set for this task manager instance\n * @public\n */\n public getAgentId(): string {\n return this.agentId;\n }\n\n public setWebRtcEnabled(webRtcEnabled: boolean) {\n this.webRtcEnabled = webRtcEnabled;\n }\n\n public handleRealtimeWebsocketEvent(event: string) {\n try {\n const payload = JSON.parse(event);\n\n const eventType = payload?.type || payload?.data?.notifType;\n const interactionId = payload?.data?.data?.conversationId;\n if (!eventType || !interactionId) return;\n\n const task = this.taskCollection[interactionId];\n if (!task) {\n LoggerProxy.info(`Realtime transcription task not found`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n interactionId,\n });\n\n return;\n }\n\n task.emit(eventType, payload.data);\n } catch (error) {\n LoggerProxy.error('Failed to parse RTD WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n error,\n });\n }\n }\n\n private handleIncomingWebCall = (call: ICall) => {\n const currentTask = Object.values(this.taskCollection).find(\n (task) =>\n task.data.interaction.mediaType === 'telephony' && !isCampaignPreviewReservation(task)\n );\n\n if (currentTask) {\n this.webCallingService.mapCallToTask(call.getCallId(), currentTask.data.interactionId);\n LoggerProxy.log(`Call mapped to task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_INCOMING_WEB_CALL,\n interactionId: currentTask.data.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_INCOMING, currentTask);\n }\n this.call = call;\n };\n\n public registerIncomingCallEvent() {\n this.webCallingService.on(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n public unregisterIncomingCallEvent() {\n this.webCallingService.off(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n private registerTaskListeners() {\n this.webSocketManager.on('message', (event) => {\n const payload = JSON.parse(event);\n // Re-emit the task events to the task object\n let task: ITask;\n if (payload.data?.type || payload.type) {\n if (Object.values(CC_TASK_EVENTS).includes(payload.data.type || payload.type)) {\n task =\n this.taskCollection[payload.data?.interactionId] ||\n this.taskCollection[payload.data?.data?.conversationId];\n }\n LoggerProxy.info(`Handling task event ${payload.data?.type}`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data?.interactionId,\n });\n switch (payload.data.type) {\n case CC_EVENTS.AGENT_CONTACT:\n // Case1 : Task is already present in taskCollection\n if (this.taskCollection[payload.data.interactionId]) {\n LoggerProxy.log(`Got AGENT_CONTACT: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n break;\n } else if (!this.taskCollection[payload.data.interactionId]) {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got AGENT_CONTACT : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n\n // Check if auto-answer should happen for this task\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload.data,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n wrapUpRequired:\n payload.data.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n isAutoAnswering: shouldAutoAnswer, // Set flag before emitting\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n // Condition 1: The state is=new i.e it is a incoming task\n if (payload.data.interaction.state === 'new') {\n LoggerProxy.log(\n `Got AGENT_CONTACT for a task with state=new, sending TASK_INCOMING event`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n } else {\n // Condition 2: The state is anything else i.e the task was connected\n LoggerProxy.log(\n `Got AGENT_CONTACT for a task with state=${payload.data.interaction.state}, sending TASK_HYDRATE event`,\n {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n }\n );\n this.emit(TASK_EVENTS.TASK_HYDRATE, task);\n }\n }\n break;\n\n case CC_EVENTS.AGENT_CONTACT_RESERVED: {\n // Check if auto-answer should happen for this task\n const shouldAutoAnswerReserved = shouldAutoAnswerTask(\n payload.data,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n isConsulted: false,\n isAutoAnswering: shouldAutoAnswerReserved, // Set flag before emitting\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n if (\n this.webCallingService.loginOption !== LoginOption.BROWSER ||\n task.data.interaction.mediaType !== MEDIA_CHANNEL.TELEPHONY // for digital channels\n ) {\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n } else if (this.call) {\n this.emit(TASK_EVENTS.TASK_INCOMING, task);\n }\n break;\n }\n case CC_EVENTS.AGENT_OFFER_CONTACT:\n // We don't have to emit any event here since this will be result of promise.\n task = this.updateTaskData(task, payload.data);\n LoggerProxy.log(`Agent offer contact received for task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_OFFER_CONTACT, task);\n\n // Handle auto-answer for offer contact\n this.handleAutoAnswer(task);\n break;\n case CC_EVENTS.AGENT_OUTBOUND_FAILED:\n if (task) {\n task = this.updateTaskData(task, payload.data);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(payload.data),\n taskId: payload.data.interactionId,\n reason: payload.data.reasonCode || payload.data.reason,\n },\n ['behavioral', 'operational']\n );\n LoggerProxy.log(`Agent outbound failed for task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n task.emit(TASK_EVENTS.TASK_OUTDIAL_FAILED, payload.data.reason ?? 'UNKNOWN_REASON');\n }\n break;\n case CC_EVENTS.AGENT_CONTACT_ASSIGNED:\n // When a campaign preview contact is accepted, the assigned event may arrive\n // with a new interactionId while the task is stored under the original\n // reservationInteractionId. Fall back to that key so the task is found.\n if (!task && payload.data.reservationInteractionId) {\n task = this.taskCollection[payload.data.reservationInteractionId];\n if (task) {\n // Re-key the task under the new interaction ID and remove the old entry\n delete this.taskCollection[payload.data.reservationInteractionId];\n this.taskCollection[payload.data.interactionId] = task;\n }\n }\n if (task) {\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_ASSIGNED, task);\n }\n break;\n case CC_EVENTS.AGENT_CONTACT_UNASSIGNED:\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired: true,\n });\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_CONTACT_OFFER_RONA:\n case CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:\n case CC_EVENTS.AGENT_INVITE_FAILED: {\n LoggerProxy.info(`Task removal triggered by ${payload.data.type}`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n task = this.updateTaskData(task, payload.data);\n\n const eventTypeToMetricMap: Record<string, keyof typeof METRIC_EVENT_NAMES> = {\n [CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED]: 'AGENT_CONTACT_ASSIGN_FAILED',\n [CC_EVENTS.AGENT_INVITE_FAILED]: 'AGENT_INVITE_FAILED',\n };\n const metricEventName: keyof typeof METRIC_EVENT_NAMES =\n eventTypeToMetricMap[payload.data.type] || 'AGENT_RONA';\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES[metricEventName],\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(payload.data),\n taskId: payload.data.interactionId,\n reason: payload.data.reason,\n },\n ['behavioral', 'operational']\n );\n this.handleTaskCleanup(task);\n task.emit(TASK_EVENTS.TASK_REJECT, payload.data.reason);\n break;\n }\n case CC_EVENTS.CONTACT_ENDED:\n // Update task data.\n if (task) {\n LoggerProxy.info(`Contact ended for interaction`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n\n // Campaign preview tasks should never trigger wrapup on ContactEnded —\n // they are terminal cleanup events. For all other tasks, derive\n // wrapUpRequired from agentsPendingWrapUp as before.\n const CAMPAIGN_OUTBOUND_TYPES = [\n 'STANDARD_PREVIEW_CAMPAIGN',\n 'DIRECT_PREVIEW_CAMPAIGN',\n ];\n const isCampaignPreview = CAMPAIGN_OUTBOUND_TYPES.includes(\n task.data?.interaction?.outboundType ?? ''\n );\n const wrapUpRequired = isCampaignPreview\n ? false\n : payload.data.agentsPendingWrapUp?.includes(this.agentId) || false;\n\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired,\n });\n\n // Handle cleanup based on whether task should be deleted\n this.handleTaskCleanup(task);\n\n task?.emit(TASK_EVENTS.TASK_END, task);\n }\n break;\n case CC_EVENTS.CAMPAIGN_CONTACT_UPDATED: {\n // CampaignContactUpdated is a non-terminal event (e.g., next contact after skip/remove).\n // Update the task data and emit an event so consumers can react to the updated contact.\n // Do NOT remove the task or emit TASK_END — cleanup is handled by CONTACT_ENDED.\n if (task) {\n // Carry forward campaign preview fields from existing task data since the updated\n // contact payload may not include them, and reconcileData would delete them.\n const existingCpd = task.data?.interaction?.callProcessingDetails;\n const updatedData = {...payload.data};\n\n if (existingCpd) {\n const campaignFields = {\n ...(existingCpd.campaignPreviewAutoAction && {\n campaignPreviewAutoAction: existingCpd.campaignPreviewAutoAction,\n }),\n ...(existingCpd.campaignPreviewOfferTimeout && {\n campaignPreviewOfferTimeout: existingCpd.campaignPreviewOfferTimeout,\n }),\n ...(existingCpd.campaignPreviewSkipDisabled && {\n campaignPreviewSkipDisabled: existingCpd.campaignPreviewSkipDisabled,\n }),\n ...(existingCpd.campaignPreviewRemoveDisabled && {\n campaignPreviewRemoveDisabled: existingCpd.campaignPreviewRemoveDisabled,\n }),\n };\n\n if (!updatedData.interaction) {\n updatedData.interaction = {} as typeof updatedData.interaction;\n }\n\n updatedData.interaction = {\n ...updatedData.interaction,\n callProcessingDetails: {\n ...campaignFields,\n ...(updatedData.interaction.callProcessingDetails || {}),\n } as typeof existingCpd,\n };\n }\n\n LoggerProxy.log('Campaign contact updated - carrying forward preview fields', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n data: {\n hasCpd: !!updatedData.interaction?.callProcessingDetails,\n autoAction:\n updatedData.interaction?.callProcessingDetails?.campaignPreviewAutoAction,\n skipDisabled:\n updatedData.interaction?.callProcessingDetails?.campaignPreviewSkipDisabled,\n removeDisabled:\n updatedData.interaction?.callProcessingDetails?.campaignPreviewRemoveDisabled,\n },\n });\n\n task = this.updateTaskData(task, updatedData);\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_CONTACT_UPDATED, task);\n }\n break;\n }\n case CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED:\n if (task) {\n // Failure payloads are sparse (no interaction field). Spread existing\n // task data first so reconcileData doesn't delete interaction/cpd.\n task = this.updateTaskData(task, {...task.data, ...payload.data});\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_ACCEPT_FAILED, task);\n }\n break;\n case CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED:\n if (task) {\n task = this.updateTaskData(task, {...task.data, ...payload.data});\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_SKIP_FAILED, task);\n }\n break;\n case CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED:\n if (task) {\n task = this.updateTaskData(task, {...task.data, ...payload.data});\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_REMOVE_FAILED, task);\n }\n break;\n case CC_EVENTS.CONTACT_MERGED:\n task = this.handleContactMerged(task, payload.data);\n break;\n case CC_EVENTS.AGENT_CONTACT_HELD:\n // As soon as the main interaction is held, we need to emit TASK_HOLD\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_HOLD, task);\n break;\n case CC_EVENTS.AGENT_CONTACT_UNHELD:\n // As soon as the main interaction is unheld, we need to emit TASK_RESUME\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RESUME, task);\n break;\n case CC_EVENTS.AGENT_VTEAM_TRANSFERRED:\n task = this.updateTaskData(task, {\n ...payload.data,\n wrapUpRequired: true,\n });\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_CTQ_CANCEL_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONSULT_QUEUE_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CREATED:\n // Received when self agent initiates a consult\n task = this.updateTaskData(task, {\n ...payload.data,\n isConsulted: false, // This ensures that the task consult status is always reset\n });\n task.emit(TASK_EVENTS.TASK_CONSULT_CREATED, task);\n break;\n case CC_EVENTS.AGENT_OFFER_CONSULT:\n // Received when other agent sends us a consult offer\n task = this.updateTaskData(task, {\n ...payload.data,\n isConsulted: true, // This ensures that the task is marked as us being requested for a consult\n });\n task.emit(TASK_EVENTS.TASK_OFFER_CONSULT, task);\n\n // Handle auto-answer for consult offer\n this.handleAutoAnswer(task);\n break;\n case CC_EVENTS.AGENT_CONSULTING:\n // Received when agent is in an active consult state\n // TODO: Check if we can use backend consult state instead of isConsulted\n task = this.updateTaskData(task, payload.data);\n if (task.data.isConsulted) {\n // Fire only if you are the agent who received the consult request\n task.emit(TASK_EVENTS.TASK_CONSULT_ACCEPTED, task);\n } else {\n // Fire only if you are the agent who initiated the consult\n task.emit(TASK_EVENTS.TASK_CONSULTING, task);\n }\n break;\n case CC_EVENTS.AGENT_CONSULT_FAILED:\n // This can only be received by the agent who initiated the consult.\n // We need not emit any event here since this will be result of promise\n task = this.updateTaskData(task, payload.data);\n break;\n case CC_EVENTS.AGENT_CONSULT_ENDED:\n task = this.updateTaskData(task, payload.data);\n if (task.data.isConsulted) {\n // This will be the end state of the task as soon as we end the consult in case of\n // us being offered a consult\n this.removeTaskFromCollection(task);\n }\n task.emit(TASK_EVENTS.TASK_CONSULT_END, task);\n break;\n case CC_EVENTS.AGENT_CTQ_CANCELLED:\n // This event is received when the consult using queue is cancelled using API\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONSULT_QUEUE_CANCELLED, task);\n break;\n case CC_EVENTS.AGENT_WRAPUP:\n task = this.updateTaskData(task, {...payload.data, wrapUpRequired: true});\n task.emit(TASK_EVENTS.TASK_END, task);\n break;\n case CC_EVENTS.AGENT_WRAPPEDUP:\n task.cancelAutoWrapupTimer();\n this.removeTaskFromCollection(task);\n task.emit(TASK_EVENTS.TASK_WRAPPEDUP, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_PAUSED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_PAUSED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_PAUSE_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_RESUMED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_RESUMED, task);\n break;\n case CC_EVENTS.CONTACT_RECORDING_RESUME_FAILED:\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_RECORDING_RESUME_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCING:\n // Conference is being established - update task state and emit establishing event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_ESTABLISHING, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCED:\n // Conference started successfully - update task state and emit event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_STARTED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_FAILED:\n // Conference failed - update task state and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_ENDED:\n // Conference ended - update task state and emit event\n task = this.updateTaskData(task, payload.data);\n if (\n !task ||\n isPrimary(task, this.agentId) ||\n isParticipantInMainInteraction(task, this.agentId)\n ) {\n LoggerProxy.log('Primary or main interaction participant leaving conference');\n } else {\n this.removeTaskFromCollection(task);\n }\n task.emit(TASK_EVENTS.TASK_CONFERENCE_ENDED, task);\n break;\n case CC_EVENTS.PARTICIPANT_JOINED_CONFERENCE: {\n task = this.updateTaskData(task, {\n ...payload.data,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n });\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_JOINED, task);\n break;\n }\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE: {\n // Conference ended - update task state and emit event\n\n task = this.updateTaskData(task, {\n ...payload.data,\n isConferenceInProgress: getIsConferenceInProgress(payload.data),\n });\n if (checkParticipantNotInInteraction(task, this.agentId)) {\n if (\n isParticipantInMainInteraction(task, this.agentId) ||\n isPrimary(task, this.agentId)\n ) {\n LoggerProxy.log('Primary or main interaction participant leaving conference');\n } else {\n this.removeTaskFromCollection(task);\n }\n }\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_LEFT, task);\n break;\n }\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE_FAILED:\n // Conference exit failed - update task state and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_PARTICIPANT_LEFT_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_END_FAILED:\n // Conference end failed - update task state with error details and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_END_FAILED, task);\n break;\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFERRED:\n // Conference was transferred - update task state and emit transfer success event\n // Note: Backend should provide hasLeft and wrapUpRequired status\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_TRANSFERRED, task);\n break;\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFER_FAILED:\n // Conference transfer failed - update task state with error details and emit failure event\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_CONFERENCE_TRANSFER_FAILED, task);\n break;\n case CC_EVENTS.PARTICIPANT_POST_CALL_ACTIVITY:\n // Post-call activity for participant - update task state with activity details\n task = this.updateTaskData(task, payload.data);\n task.emit(TASK_EVENTS.TASK_POST_CALL_ACTIVITY, task);\n break;\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION: {\n // Campaign preview contact offered to agent\n // Create a task in the collection so subsequent events (e.g. AGENT_CONTACT_ASSIGNED\n // after acceptPreviewContact) can find and update it.\n // Emit TASK_CAMPAIGN_PREVIEW_RESERVATION instead of TASK_INCOMING so the call\n // does not ring out to the customer before the agent explicitly accepts the preview contact.\n LoggerProxy.log('Campaign preview reservation received', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.data.interactionId,\n });\n\n if (!this.taskCollection[payload.data.interactionId]) {\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...payload.data,\n wrapUpRequired: false,\n isConferenceInProgress: false,\n isAutoAnswering: false,\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.data.interactionId] = task;\n } else {\n task = this.updateTaskData(task, payload.data);\n }\n\n this.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, task);\n break;\n }\n\n default:\n break;\n }\n if (task) {\n task.emit(payload.data.type, payload.data);\n }\n\n const transcriptInteractionId =\n payload.data?.interactionId ||\n payload.data?.data?.conversationId ||\n task?.data?.interactionId;\n\n if (TRANSCRIPT_EVENT_MAP[payload.data.type] && transcriptInteractionId) {\n this.requestRealTimeTranscripts(payload.data.type, transcriptInteractionId);\n }\n }\n });\n }\n\n private updateTaskData(task: ITask, taskData: TaskData): ITask {\n if (!task) {\n return undefined;\n }\n\n if (!taskData?.interactionId) {\n LoggerProxy.warn('Received task update with missing interactionId', {\n module: TASK_MANAGER_FILE,\n method: METHODS.UPDATE_TASK_DATA,\n });\n }\n\n try {\n const currentTask = task.updateTaskData(taskData);\n this.taskCollection[taskData.interactionId] = currentTask;\n\n return currentTask;\n } catch (error) {\n LoggerProxy.error(`Failed to update task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.UPDATE_TASK_DATA,\n interactionId: taskData.interactionId,\n });\n\n return task;\n }\n }\n\n /**\n * Handles CONTACT_MERGED event logic\n * @param task - The task to process\n * @param taskData - The task data from the event payload\n * @returns Updated or newly created task\n * @private\n */\n private handleContactMerged(task: ITask, taskData: TaskData): ITask {\n if (taskData.childInteractionId) {\n // remove the child task from collection\n this.removeTaskFromCollection(this.taskCollection[taskData.childInteractionId]);\n }\n\n if (this.taskCollection[taskData.interactionId]) {\n LoggerProxy.log(`Got CONTACT_MERGED: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: taskData.interactionId,\n });\n // update the task data\n task = this.updateTaskData(task, taskData);\n } else {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got CONTACT_MERGED : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: taskData.interactionId,\n });\n\n task = new Task(\n this.contact,\n this.webCallingService,\n {\n ...taskData,\n wrapUpRequired: taskData.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(taskData),\n },\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[taskData.interactionId] = task;\n }\n\n this.emit(TASK_EVENTS.TASK_MERGED, task);\n\n return task;\n }\n\n private removeTaskFromCollection(task: ITask) {\n if (task?.data?.interactionId) {\n delete this.taskCollection[task.data.interactionId];\n LoggerProxy.info(`Task removed from collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REMOVE_TASK_FROM_COLLECTION,\n interactionId: task.data.interactionId,\n });\n }\n }\n\n /**\n * Handles auto-answer logic for incoming tasks\n * Automatically accepts tasks when isAutoAnswering flag is set\n * The flag is set during task creation based on:\n * 1. WebRTC calls with auto-answer enabled in agent profile\n * 2. Agent-initiated WebRTC outdial calls\n * 3. Agent-initiated digital outbound (Email/SMS) without previous transfers\n *\n * @param task - The task to auto-answer\n * @private\n */\n private async handleAutoAnswer(task: ITask): Promise<void> {\n if (!task || !task.data || !task.data.isAutoAnswering) {\n return;\n }\n\n LoggerProxy.info(`Auto-answering task`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n });\n\n try {\n await task.accept();\n LoggerProxy.info(`Task auto-answered successfully`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n });\n\n // Track successful auto-answer\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_SUCCESS,\n {\n taskId: task.data.interactionId,\n mediaType: task.data.interaction.mediaType,\n isAutoAnswered: true,\n },\n ['behavioral', 'operational']\n );\n // Emit task:autoAnswered event for widgets/UI to react\n task.emit(TASK_EVENTS.TASK_AUTO_ANSWERED, task);\n } catch (error) {\n // Reset isAutoAnswering flag on failure\n task.updateTaskData({...task.data, isAutoAnswering: false});\n LoggerProxy.error(`Failed to auto-answer task`, {\n module: TASK_MANAGER_FILE,\n method: 'handleAutoAnswer',\n interactionId: task.data.interactionId,\n error,\n });\n\n // Track auto-answer failure\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_FAILED,\n {\n taskId: task.data.interactionId,\n mediaType: task.data.interaction.mediaType,\n error: error?.message || 'Unknown error',\n isAutoAnswered: false,\n },\n ['behavioral', 'operational']\n );\n }\n }\n\n /**\n * Handles cleanup of task resources including Desktop/WebRTC call cleanup and task removal\n * @param task - The task to clean up\n * @private\n */\n private handleTaskCleanup(task: ITask) {\n // Clean up Desktop/WebRTC calling resources for browser-based telephony tasks\n if (\n this.webCallingService.loginOption === LoginOption.BROWSER &&\n task.data.interaction.mediaType === 'telephony'\n ) {\n task.unregisterWebCallListeners();\n this.webCallingService.cleanUpCall();\n }\n\n const isOutdial = task.data.interaction.outboundType === 'OUTDIAL';\n const isNew = task.data.interaction.state === 'new';\n const needsWrapUp = task.data.agentsPendingWrapUp?.includes(this.agentId) ?? false;\n\n // For OUTDIAL: only remove if NOT terminated (user-declined, no wrap-up follows)\n // For non-OUTDIAL: remove if state is 'new'\n // Always remove if secondary EpDn agent\n if (\n (isNew && !(isOutdial && needsWrapUp)) ||\n isSecondaryEpDnAgent(task.data.interaction) ||\n (!needsWrapUp && isOutdial) // For outdial tasks, needs wrap-up is false and state is \"WRAPUP\". We need to just remove the task.\n ) {\n this.removeTaskFromCollection(task);\n }\n }\n\n /**\n * Sends transcript start/stop event based on the CC event type.\n * Fire-and-forget; errors are logged but do not interrupt event processing.\n */\n private requestRealTimeTranscripts(eventType: string, interactionId: string): void {\n const action = TRANSCRIPT_EVENT_MAP[eventType];\n if (\n !action ||\n !this.apiAIAssistant ||\n this.apiAIAssistant.aiFeature?.realtimeTranscripts?.enable === false\n )\n return;\n\n this.apiAIAssistant\n .sendEvent(\n this.agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.GET_TRANSCRIPTS,\n action\n )\n .catch((error) => {\n LoggerProxy.error(`Failed to send transcript ${action} event`, {\n module: TASK_MANAGER_FILE,\n method: 'requestRealTimeTranscripts',\n interactionId,\n error,\n });\n });\n }\n\n public getTask(taskId: TaskId): ITask {\n return this.taskCollection[taskId];\n }\n\n /**\n * @param taskId - Unique identifier for each task\n */\n public getAllTasks = (): Record<TaskId, ITask> => {\n return this.taskCollection;\n };\n\n public static getTaskManager(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager\n ): TaskManager {\n if (!TaskManager.taskManager) {\n TaskManager.taskManager = new TaskManager(\n apiAIAssistant,\n contact,\n webCallingService,\n webSocketManager\n );\n }\n\n return this.taskManager;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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.TIMEOUT_PREVIEW_ACCEPT = 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.DIALER_API = exports.CONSULT_TRANSFER = exports.CONSULT_END = exports.CONSULT_CONFERENCE = exports.CONSULT_ACCEPT = exports.CONSULT = exports.CONFERENCE_TRANSFER = exports.CONFERENCE_EXIT = exports.CAMPAIGN_PREVIEW_ACCEPT = void 0;
|
|
6
|
+
exports.WRAPUP = exports.UNHOLD = exports.TRANSFER = exports.TRANSCRIPT_EVENT_MAP = exports.TIMEOUT_PREVIEW_ACCEPT = 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.DIALER_API = exports.CONSULT_TRANSFER = exports.CONSULT_END = exports.CONSULT_CONFERENCE = exports.CONSULT_ACCEPT = exports.CONSULT = exports.CONFERENCE_TRANSFER = exports.CONFERENCE_EXIT = exports.CAMPAIGN_PREVIEW_SKIP = exports.CAMPAIGN_PREVIEW_REMOVE = exports.CAMPAIGN_PREVIEW_ACCEPT = void 0;
|
|
7
7
|
var _types = require("../config/types");
|
|
8
8
|
/**
|
|
9
9
|
* Constants for Task Service
|
|
@@ -29,6 +29,8 @@ const CONFERENCE_EXIT = exports.CONFERENCE_EXIT = '/conference/exit';
|
|
|
29
29
|
const CONFERENCE_TRANSFER = exports.CONFERENCE_TRANSFER = '/conference/transfer';
|
|
30
30
|
const DIALER_API = exports.DIALER_API = '/v1/dialer';
|
|
31
31
|
const CAMPAIGN_PREVIEW_ACCEPT = exports.CAMPAIGN_PREVIEW_ACCEPT = '/accept';
|
|
32
|
+
const CAMPAIGN_PREVIEW_SKIP = exports.CAMPAIGN_PREVIEW_SKIP = '/skip';
|
|
33
|
+
const CAMPAIGN_PREVIEW_REMOVE = exports.CAMPAIGN_PREVIEW_REMOVE = '/remove';
|
|
32
34
|
/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */
|
|
33
35
|
const TIMEOUT_PREVIEW_ACCEPT = exports.TIMEOUT_PREVIEW_ACCEPT = 80000;
|
|
34
36
|
const TASK_MANAGER_FILE = exports.TASK_MANAGER_FILE = 'taskManager';
|
|
@@ -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","DIALER_API","CAMPAIGN_PREVIEW_ACCEPT","TIMEOUT_PREVIEW_ACCEPT","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","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 DIALER_API = '/v1/dialer';\nexport const CAMPAIGN_PREVIEW_ACCEPT = '/accept';\n/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */\nexport const TIMEOUT_PREVIEW_ACCEPT = 80000;\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// 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};\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":";;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAIO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,gBAAgB;AAC1C,MAAME,QAAQ,GAAAD,OAAA,CAAAC,QAAA,GAAG,YAAY;AAC7B,MAAMC,IAAI,GAAAF,OAAA,CAAAE,IAAA,GAAG,OAAO;AACpB,MAAMC,MAAM,GAAAH,OAAA,CAAAG,MAAA,GAAG,SAAS;AACxB,MAAMC,OAAO,GAAAJ,OAAA,CAAAI,OAAA,GAAG,UAAU;AAC1B,MAAMC,cAAc,GAAAL,OAAA,CAAAK,cAAA,GAAG,iBAAiB;AACxC,MAAMC,WAAW,GAAAN,OAAA,CAAAM,WAAA,GAAG,cAAc;AAClC,MAAMC,QAAQ,GAAAP,OAAA,CAAAO,QAAA,GAAG,WAAW;AAC5B,MAAMC,gBAAgB,GAAAR,OAAA,CAAAQ,gBAAA,GAAG,mBAAmB;AAC5C,MAAMC,KAAK,GAAAT,OAAA,CAAAS,KAAA,GAAG,eAAe;AAC7B,MAAMC,MAAM,GAAAV,OAAA,CAAAU,MAAA,GAAG,gBAAgB;AAC/B,MAAMC,MAAM,GAAAX,OAAA,CAAAW,MAAA,GAAG,SAAS;AACxB,MAAMC,GAAG,GAAAZ,OAAA,CAAAY,GAAA,GAAG,MAAM;AAClB,MAAMC,kBAAkB,GAAAb,OAAA,CAAAa,kBAAA,GAAG,qBAAqB;AAChD,MAAMC,eAAe,GAAAd,OAAA,CAAAc,eAAA,GAAG,kBAAkB;AAC1C,MAAMC,mBAAmB,GAAAf,OAAA,CAAAe,mBAAA,GAAG,sBAAsB;AAClD,MAAMC,UAAU,GAAAhB,OAAA,CAAAgB,UAAA,GAAG,YAAY;AAC/B,MAAMC,uBAAuB,GAAAjB,OAAA,CAAAiB,uBAAA,GAAG,SAAS;AAChD;AACO,MAAMC,sBAAsB,
|
|
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","DIALER_API","CAMPAIGN_PREVIEW_ACCEPT","CAMPAIGN_PREVIEW_SKIP","CAMPAIGN_PREVIEW_REMOVE","TIMEOUT_PREVIEW_ACCEPT","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","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 DIALER_API = '/v1/dialer';\nexport const CAMPAIGN_PREVIEW_ACCEPT = '/accept';\nexport const CAMPAIGN_PREVIEW_SKIP = '/skip';\nexport const CAMPAIGN_PREVIEW_REMOVE = '/remove';\n/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */\nexport const TIMEOUT_PREVIEW_ACCEPT = 80000;\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// 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};\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":[]}
|
|
@@ -105,6 +105,84 @@ function aqmDialer(aqm) {
|
|
|
105
105
|
},
|
|
106
106
|
errId: 'Service.aqm.dialer.acceptPreviewContact'
|
|
107
107
|
}
|
|
108
|
+
})),
|
|
109
|
+
/**
|
|
110
|
+
* Skips a campaign preview contact, requesting the next contact from the campaign.
|
|
111
|
+
*
|
|
112
|
+
* @param {Object} p - Parameters object.
|
|
113
|
+
* @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
|
|
114
|
+
* @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
|
|
115
|
+
*
|
|
116
|
+
* Emits:
|
|
117
|
+
* - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
|
|
118
|
+
* - `CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED` on failure
|
|
119
|
+
* @ignore
|
|
120
|
+
*/
|
|
121
|
+
skipPreviewContact: aqm.req(p => ({
|
|
122
|
+
url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_SKIP}`,
|
|
123
|
+
host: _constants.WCC_API_GATEWAY,
|
|
124
|
+
data: {},
|
|
125
|
+
method: _types2.HTTP_METHODS.POST,
|
|
126
|
+
err: _Utils.createErrDetailsObject,
|
|
127
|
+
notifSuccess: {
|
|
128
|
+
bind: {
|
|
129
|
+
type: _constants2.TASK_MESSAGE_TYPE,
|
|
130
|
+
data: {
|
|
131
|
+
type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
|
|
132
|
+
interactionId: p.data.interactionId
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
msg: {}
|
|
136
|
+
},
|
|
137
|
+
notifFail: {
|
|
138
|
+
bind: {
|
|
139
|
+
type: _constants2.TASK_MESSAGE_TYPE,
|
|
140
|
+
data: {
|
|
141
|
+
type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED,
|
|
142
|
+
campaignId: p.data.campaignId
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
errId: 'Service.aqm.dialer.skipPreviewContact'
|
|
146
|
+
}
|
|
147
|
+
})),
|
|
148
|
+
/**
|
|
149
|
+
* Removes a campaign preview contact from the campaign list entirely.
|
|
150
|
+
*
|
|
151
|
+
* @param {Object} p - Parameters object.
|
|
152
|
+
* @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
|
|
153
|
+
* @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
|
|
154
|
+
*
|
|
155
|
+
* Emits:
|
|
156
|
+
* - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
|
|
157
|
+
* - `CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED` on failure
|
|
158
|
+
* @ignore
|
|
159
|
+
*/
|
|
160
|
+
removePreviewContact: aqm.req(p => ({
|
|
161
|
+
url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_REMOVE}`,
|
|
162
|
+
host: _constants.WCC_API_GATEWAY,
|
|
163
|
+
data: {},
|
|
164
|
+
method: _types2.HTTP_METHODS.POST,
|
|
165
|
+
err: _Utils.createErrDetailsObject,
|
|
166
|
+
notifSuccess: {
|
|
167
|
+
bind: {
|
|
168
|
+
type: _constants2.TASK_MESSAGE_TYPE,
|
|
169
|
+
data: {
|
|
170
|
+
type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
|
|
171
|
+
interactionId: p.data.interactionId
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
msg: {}
|
|
175
|
+
},
|
|
176
|
+
notifFail: {
|
|
177
|
+
bind: {
|
|
178
|
+
type: _constants2.TASK_MESSAGE_TYPE,
|
|
179
|
+
data: {
|
|
180
|
+
type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED,
|
|
181
|
+
campaignId: p.data.campaignId
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
errId: 'Service.aqm.dialer.removePreviewContact'
|
|
185
|
+
}
|
|
108
186
|
}))
|
|
109
187
|
};
|
|
110
188
|
}
|