@webex/contact-center 3.8.1 → 3.9.0-next.10
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 +105 -63
- package/dist/cc.js.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/logger-proxy.js +24 -1
- package/dist/logger-proxy.js.map +1 -1
- package/dist/metrics/MetricsManager.js +1 -1
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +51 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +12 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +271 -0
- package/dist/services/AddressBook.js.map +1 -0
- package/dist/services/EntryPoint.js +227 -0
- package/dist/services/EntryPoint.js.map +1 -0
- package/dist/services/Queue.js +261 -0
- package/dist/services/Queue.js.map +1 -0
- package/dist/services/config/constants.js +24 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +1 -43
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +0 -5
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/GlobalTypes.js.map +1 -1
- package/dist/services/core/Utils.js +121 -2
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +0 -4
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +0 -4
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/task/TaskManager.js +1 -0
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/index.js +145 -71
- package/dist/services/task/index.js.map +1 -1
- package/dist/types/cc.d.ts +77 -43
- package/dist/types/index.d.ts +8 -3
- package/dist/types/metrics/constants.d.ts +7 -0
- package/dist/types/services/AddressBook.d.ts +74 -0
- package/dist/types/services/EntryPoint.d.ts +67 -0
- package/dist/types/services/Queue.d.ts +76 -0
- package/dist/types/services/config/constants.d.ts +23 -1
- package/dist/types/services/config/index.d.ts +1 -14
- package/dist/types/services/config/types.d.ts +0 -64
- package/dist/types/services/core/GlobalTypes.d.ts +25 -0
- package/dist/types/services/core/Utils.d.ts +27 -1
- package/dist/types/services/task/index.d.ts +1 -1
- package/dist/types/types.d.ts +162 -0
- package/dist/types/utils/PageCache.d.ts +173 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +192 -0
- package/dist/utils/PageCache.js.map +1 -0
- package/dist/webex.js +1 -1
- package/package.json +10 -10
- package/src/cc.ts +121 -81
- package/src/index.ts +19 -3
- package/src/logger-proxy.ts +24 -1
- package/src/metrics/MetricsManager.ts +1 -1
- package/src/metrics/behavioral-events.ts +54 -0
- package/src/metrics/constants.ts +15 -0
- package/src/services/AddressBook.ts +291 -0
- package/src/services/EntryPoint.ts +241 -0
- package/src/services/Queue.ts +277 -0
- package/src/services/config/constants.ts +26 -2
- package/src/services/config/index.ts +1 -55
- package/src/services/config/types.ts +0 -65
- package/src/services/core/GlobalTypes.ts +27 -0
- package/src/services/core/Utils.ts +155 -1
- package/src/services/core/aqm-reqs.ts +0 -5
- package/src/services/core/websocket/WebSocketManager.ts +0 -4
- package/src/services/task/TaskManager.ts +1 -0
- package/src/services/task/index.ts +172 -56
- package/src/types.ts +180 -0
- package/src/utils/PageCache.ts +252 -0
- package/test/unit/spec/cc.ts +30 -82
- package/test/unit/spec/metrics/MetricsManager.ts +0 -1
- package/test/unit/spec/metrics/behavioral-events.ts +14 -0
- package/test/unit/spec/services/AddressBook.ts +332 -0
- package/test/unit/spec/services/EntryPoint.ts +259 -0
- package/test/unit/spec/services/Queue.ts +323 -0
- package/test/unit/spec/services/config/index.ts +0 -71
- package/test/unit/spec/services/core/Utils.ts +50 -0
- package/test/unit/spec/services/core/aqm-reqs.ts +1 -3
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +0 -4
- package/test/unit/spec/services/task/TaskManager.ts +8 -1
- package/test/unit/spec/services/task/index.ts +226 -122
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_Utils","_types","_constants","_constants2","_loggerProxy","_types2","_MetricsManager","_constants3","_AutoWrapup","obj","__esModule","default","Task","EventEmitter","constructor","contact","webCallingService","data","wrapupData","webCallMap","metricsManager","MetricsManager","getInstance","registerWebCallListeners","setupAutoWrapupTimer","wrapUpRequired","autoWrapup","wrapUpProps","LoggerProxy","info","module","TASK_FILE","method","METHODS","SETUP_AUTO_WRAPUP_TIMER","interactionId","defaultWrapupReason","wrapUpReasonList","find","r","isDefault","error","intervalMs","autoWrapupInterval","AutoWrapup","allowCancelAutoWrapup","start","wrapup","wrapUpReason","name","auxCodeId","id","cancelAutoWrapupTimer","clear","undefined","CANCEL_AUTO_WRAPUP_TIMER","handleRemoteMedia","track","emit","TASK_EVENTS","TASK_MEDIA","on","CALL_EVENT_KEYS","REMOTE_MEDIA","unregisterWebCallListeners","off","updateTaskData","updatedData","shouldOverwrite","reconcileData","oldData","newData","Object","keys","forEach","key","Array","isArray","accept","ACCEPT","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","interaction","mediaType","MEDIA_CHANNEL","TELEPHONY","response","log","trackingId","trackEvent","taskId","getCommonTrackingFieldForAQMResponse","loginOption","LoginOption","BROWSER","constraints","audio","localStream","navigator","mediaDevices","getUserMedia","audioTrack","getAudioTracks","localAudioStream","LocalMicrophoneStream","MediaStream","answerCall","Promise","resolve","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","toggleMute","TOGGLE_MUTE","muteUnmuteCall","isCallMuted","decline","DECLINE","TASK_DECLINE_SUCCESS","TASK_DECLINE_FAILED","declineCall","hold","HOLD","TASK_HOLD_SUCCESS","TASK_HOLD_FAILED","mediaResourceId","resume","RESUME","mainInteractionId","media","TASK_RESUME_SUCCESS","TASK_RESUME_FAILED","unHold","end","END","TASK_END_SUCCESS","TASK_END_FAILED","wrapupPayload","WRAPUP","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","Error","length","wrapUpCode","pauseRecording","PAUSE_RECORDING","TASK_PAUSE_RECORDING_SUCCESS","TASK_PAUSE_RECORDING_FAILED","result","resumeRecording","resumeRecordingPayload","RESUME_RECORDING","TASK_RESUME_RECORDING_SUCCESS","TASK_RESUME_RECORDING_FAILED","autoResumed","consult","consultPayload","CONSULT","TASK_CONSULT_START_SUCCESS","TASK_CONSULT_START_FAILED","destination","to","destinationType","endConsult","consultEndPayload","END_CONSULT","TASK_CONSULT_END_SUCCESS","TASK_CONSULT_END_FAILED","consultEnd","transfer","transferPayload","TRANSFER","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","DESTINATION_TYPE","QUEUE","vteamTransfer","blindTransfer","isConsultTransfer","consultTransfer","consultTransferPayload","CONSULT_TRANSFER","CONSULT_TRANSFER_DESTINATION_TYPE","destAgentId","AGENT","exports"],"sources":["index.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {CALL_EVENT_KEYS, LocalMicrophoneStream} from '@webex/calling';\nimport {CallId} from '@webex/calling/dist/types/common/types';\nimport {getErrorDetails} from '../core/Utils';\nimport {LoginOption} from '../../types';\nimport {TASK_FILE} from '../../constants';\nimport {METHODS} from './constants';\nimport routingContact from './contact';\nimport LoggerProxy from '../../logger-proxy';\nimport {\n ITask,\n TaskResponse,\n TaskData,\n TaskId,\n TASK_EVENTS,\n WrapupPayLoad,\n ResumeRecordingPayload,\n ConsultPayload,\n ConsultEndPayload,\n TransferPayLoad,\n DESTINATION_TYPE,\n CONSULT_TRANSFER_DESTINATION_TYPE,\n ConsultTransferPayLoad,\n MEDIA_CHANNEL,\n} from './types';\nimport WebCallingService from '../WebCallingService';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport {Failure} from '../core/GlobalTypes';\nimport AutoWrapup from './AutoWrapup';\nimport {WrapupData} from '../config/types';\n\n/**\n * Task class represents a contact center task/interaction that can be managed by an agent.\n * This class provides all the necessary methods to manage tasks in a contact center environment,\n * handling various call control operations and task lifecycle management.\n *\n * - Task Lifecycle Management:\n * - {@link accept} - Accept incoming task\n * - {@link decline} - Decline incoming task\n * - {@link end} - End active task\n * - Media Controls:\n * - {@link toggleMute} - Mute/unmute microphone for voice tasks\n * - {@link hold} - Place task on hold\n * - {@link resume} - Resume held task\n * - Recording Controls:\n * - {@link pauseRecording} - Pause task recording\n * - {@link resumeRecording} - Resume paused recording\n * - Task Transfer & Consultation:\n * - {@link consult} - Initiate consultation with another agent/queue\n * - {@link endConsult} - End ongoing consultation\n * - {@link transfer} - Transfer task to another agent/queue\n * - {@link consultTransfer} - Transfer after consultation\n * - Task Completion:\n * - {@link wrapup} - Complete task wrap-up\n *\n * Key events emitted by Task instances (see {@link TASK_EVENTS} for details):\n *\n * - Task Lifecycle:\n * - task:incoming — New task is being offered\n * - task:assigned — Task assigned to agent\n * - task:unassigned — Task unassigned from agent\n * - task:end — Task has ended\n * - task:wrapup — Task entered wrap-up state\n * - task:wrappedup — Task wrap-up completed\n * - task:rejected — Task was rejected/unanswered\n * - task:hydrate — Task data populated\n *\n * - Media & Controls:\n * - task:media — Voice call media track received\n * - task:hold — Task placed on hold\n * - task:unhold — Task resumed from hold\n *\n * - Consultation & Transfer:\n * - task:consultCreated — Consultation initiated\n * - task:consulting — Consultation in progress\n * - task:consultAccepted — Consultation accepted\n * - task:consultEnd — Consultation ended\n * - task:consultQueueCancelled — Queue consultation cancelled\n * - task:consultQueueFailed — Queue consultation failed\n * - task:offerConsult — Consultation offered\n * - task:offerContact — New contact offered\n *\n * - Recording:\n * - task:recordingPaused — Recording paused\n * - task:recordingPauseFailed — Recording pause failed\n * - task:recordingResumed — Recording resumed\n * - task:recordingResumeFailed — Recording resume failed\n *\n * @implements {ITask}\n * @example\n * ```typescript\n * // 1. Initialize task\n * const task = new Task(contact, webCallingService, taskData);\n *\n * // 2. Set up event listeners\n * task.on('task:media', (track) => {\n * // Handle voice call media\n * const audioElement = document.getElementById('remote-audio');\n * audioElement.srcObject = new MediaStream([track]);\n * });\n *\n * task.on('task:hold', () => {\n * console.log('Task is on hold');\n * // Update UI to show hold state\n * });\n *\n * task.on('task:end', () => {\n * console.log('Task ended');\n * if (task.data.wrapUpRequired) {\n * // Show wrap-up form\n * }\n * });\n *\n * // 3. Example task operations\n * await task.accept(); // Accept incoming task\n * await task.hold(); // Place on hold\n * await task.resume(); // Resume from hold\n * await task.end(); // End task\n *\n * // 4. Handle wrap-up if required\n * await task.wrapup({\n * auxCodeId: 'RESOLVED',\n * wrapUpReason: 'Customer issue resolved'\n * });\n * ```\n */\n\nexport default class Task extends EventEmitter implements ITask {\n private contact: ReturnType<typeof routingContact>;\n private localAudioStream: LocalMicrophoneStream;\n private webCallingService: WebCallingService;\n public data: TaskData;\n private metricsManager: MetricsManager;\n public webCallMap: Record<TaskId, CallId>;\n private wrapupData: WrapupData;\n public autoWrapup?: AutoWrapup;\n\n /**\n * Creates a new Task instance which provides the following features:\n * @param contact - The routing contact service instance\n * @param webCallingService - The web calling service instance\n * @param data - Initial task data\n * @param wrapupData - Wrap-up configuration data\n */\n public constructor(\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n data: TaskData,\n wrapupData: WrapupData\n ) {\n super();\n this.contact = contact;\n this.data = data;\n this.webCallingService = webCallingService;\n this.webCallMap = {};\n this.wrapupData = wrapupData;\n this.metricsManager = MetricsManager.getInstance();\n this.registerWebCallListeners();\n this.setupAutoWrapupTimer();\n }\n\n /**\n * Sets up the automatic wrap-up timer if wrap-up is required\n * @private\n */\n private setupAutoWrapupTimer() {\n if (\n this.data.wrapUpRequired && // only when wrapup required\n !this.autoWrapup && // if autoWrapup is not already set\n this.wrapupData && // wrapupData is not defined\n this.wrapupData.wrapUpProps // wrapUpProps is defined\n ) {\n const wrapUpProps = this.wrapupData.wrapUpProps;\n if (!wrapUpProps || wrapUpProps.autoWrapup === false) {\n LoggerProxy.info(`Auto wrap-up is not required for this task`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n\n return;\n }\n const defaultWrapupReason =\n wrapUpProps.wrapUpReasonList?.find((r) => r.isDefault) ?? wrapUpProps.wrapUpReasonList?.[0];\n if (!defaultWrapupReason) {\n LoggerProxy.error('No wrap-up reason configured', {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n const intervalMs = wrapUpProps.autoWrapupInterval;\n if (!intervalMs || intervalMs <= 0) {\n LoggerProxy.error(`Invalid auto wrap-up interval: ${intervalMs}`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n }\n this.autoWrapup = new AutoWrapup(intervalMs, wrapUpProps.allowCancelAutoWrapup);\n this.autoWrapup.start(async () => {\n LoggerProxy.info(`Auto wrap-up timer triggered`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n await this.wrapup({\n wrapUpReason: defaultWrapupReason.name,\n auxCodeId: defaultWrapupReason.id,\n });\n });\n }\n }\n\n /**\n * Cancels the automatic wrap-up timer if it's running\n * @public - Public so it can be called externally when needed\n * Note: This is supported only in single session mode. Not supported in multi-session mode.\n */\n public cancelAutoWrapupTimer() {\n this.autoWrapup?.clear();\n this.autoWrapup = undefined;\n LoggerProxy.info(`Auto wrap-up timer cancelled`, {\n module: TASK_FILE,\n method: METHODS.CANCEL_AUTO_WRAPUP_TIMER,\n interactionId: this.data?.interactionId,\n });\n }\n\n /**\n * @ignore\n * @private\n */\n private handleRemoteMedia = (track: MediaStreamTrack) => {\n this.emit(TASK_EVENTS.TASK_MEDIA, track);\n };\n\n /**\n * @ignore\n * @private\n */\n private registerWebCallListeners() {\n this.webCallingService.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * @ignore\n */\n public unregisterWebCallListeners() {\n this.webCallingService.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * Updates the task data with new information\n * @param updatedData - New task data to merge with existing data\n * @param shouldOverwrite - If true, completely replace data instead of merging\n * @returns The updated task instance\n * @example\n * ```typescript\n * task.updateTaskData(newData);\n * task.updateTaskData(newData, true); // completely replace data\n * ```\n */\n public updateTaskData = (updatedData: TaskData, shouldOverwrite = false) => {\n this.data = shouldOverwrite ? updatedData : this.reconcileData(this.data, updatedData);\n this.setupAutoWrapupTimer();\n\n return this;\n };\n\n /**\n * Recursively merges old data with new data\n * @private\n */\n private reconcileData(oldData: TaskData, newData: TaskData): TaskData {\n Object.keys(newData).forEach((key) => {\n if (newData[key] && typeof newData[key] === 'object' && !Array.isArray(newData[key])) {\n oldData[key] = this.reconcileData({...oldData[key]}, newData[key]);\n } else {\n oldData[key] = newData[key];\n }\n });\n\n return oldData;\n }\n\n /**\n * Agent accepts the incoming task.\n * After accepting, the task will emit task:assigned event and for voice calls,\n * a task:media event with the audio stream.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if accepting task fails or media requirements not met\n * @example\n * ```typescript\n * // Set up event handlers before accepting\n * task.on(TASK_EVENTS.TASK_ASSIGNED, () => {\n * console.log('Task assigned, ID:', task.data.interactionId);\n * // Update UI to show active task\n * });\n *\n * // For voice calls, handle media\n * task.on(TASK_EVENTS.TASK_MEDIA, (track) => {\n * const audioElement = document.getElementById('remote-audio');\n * audioElement.srcObject = new MediaStream([track]);\n * });\n *\n * // Accept the task\n * try {\n * await task.accept();\n * console.log('Successfully accepted task');\n * } catch (error) {\n * console.error('Failed to accept task:', error);\n * // Handle error (e.g., show error message to agent)\n * }\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Accepting task`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n if (this.data.interaction.mediaType !== MEDIA_CHANNEL.TELEPHONY) {\n const response = await this.contact.accept({interactionId: this.data.interactionId});\n LoggerProxy.log(`Task accepted successfully`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(this.data),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n }\n\n if (this.webCallingService.loginOption === LoginOption.BROWSER) {\n const constraints = {audio: true};\n\n const localStream = await navigator.mediaDevices.getUserMedia(constraints);\n const audioTrack = localStream.getAudioTracks()[0];\n this.localAudioStream = new LocalMicrophoneStream(new MediaStream([audioTrack]));\n this.webCallingService.answerCall(this.localAudioStream, this.data.interactionId);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(this.data),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task accepted successfully with webrtc calling`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n }\n\n return Promise.resolve(); // TODO: reject for extension as part of refactor\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.ACCEPT, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details as Failure),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Agent can mute/unmute their microphone during a WebRTC task.\n * This method toggles between muted and unmuted states for the local audio stream.\n *\n * @returns Promise<void> - Resolves when mute/unmute operation completes\n * @throws Error if toggling mute state fails or audio stream is not available\n * @example\n * ```typescript\n * // Toggle mute state\n * task.toggleMute()\n * .then(() => console.log('Mute state toggled successfully'))\n * .catch(error => console.error('Failed to toggle mute:', error));\n * ```\n */\n public async toggleMute() {\n try {\n LoggerProxy.info(`Toggling mute state`, {\n module: TASK_FILE,\n method: METHODS.TOGGLE_MUTE,\n interactionId: this.data.interactionId,\n });\n\n this.webCallingService.muteUnmuteCall(this.localAudioStream);\n\n LoggerProxy.log(\n `Mute state toggled successfully isCallMuted: ${this.webCallingService.isCallMuted()}`,\n {\n module: TASK_FILE,\n method: METHODS.TOGGLE_MUTE,\n interactionId: this.data.interactionId,\n }\n );\n\n return Promise.resolve();\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.TOGGLE_MUTE, TASK_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Declines the incoming task. This will reject the task and notify the routing system.\n * For voice calls, this is equivalent to declining the incoming call.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if the decline operation fails\n * @example\n * ```typescript\n * // Decline an incoming task\n * task.decline()\n * .then(() => console.log('Task declined successfully'))\n * .catch(error => console.error('Failed to decline task:', error));\n * ```\n */\n public async decline(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Declining task`, {\n module: TASK_FILE,\n method: METHODS.DECLINE,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n ]);\n\n this.webCallingService.declineCall(this.data.interactionId);\n this.unregisterWebCallListeners();\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n {taskId: this.data.interactionId},\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task declined successfully`, {\n module: TASK_FILE,\n method: METHODS.DECLINE,\n interactionId: this.data.interactionId,\n });\n\n return Promise.resolve();\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.DECLINE, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw detailedError;\n }\n }\n\n /**\n * Puts the current task/interaction on hold.\n * Emits task:hold event when successful. For voice tasks, this mutes the audio.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if hold operation fails\n * @example\n * ```typescript\n * // Set up hold event handler\n * task.on(TASK_EVENTS.TASK_HOLD, () => {\n * console.log('Task is now on hold');\n * // Update UI to show hold state (e.g., enable resume button, show hold indicator)\n * document.getElementById('resume-btn').disabled = false;\n * document.getElementById('hold-indicator').style.display = 'block';\n * });\n *\n * // Place task on hold\n * try {\n * await task.hold();\n * console.log('Successfully placed task on hold');\n * } catch (error) {\n * console.error('Failed to place task on hold:', error);\n * // Handle error (e.g., show error message, reset UI state)\n * }\n * ```\n */\n public async hold(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Holding task`, {\n module: TASK_FILE,\n method: METHODS.HOLD,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS,\n METRIC_EVENT_NAMES.TASK_HOLD_FAILED,\n ]);\n\n const response = await this.contact.hold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: this.data.mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task placed on hold successfully`, {\n module: TASK_FILE,\n method: METHODS.HOLD,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.HOLD, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_HOLD_FAILED,\n {\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw detailedError;\n }\n }\n\n /**\n * Resumes the task/interaction that was previously put on hold.\n * Emits task:resume event when successful. For voice tasks, this restores the audio.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if resume operation fails\n * @example\n * ```typescript\n * // Set up resume event handler\n * task.on(TASK_EVENTS.TASK_RESUME, () => {\n * console.log('Task resumed from hold');\n * // Update UI to show active state\n * document.getElementById('hold-btn').disabled = false;\n * document.getElementById('hold-indicator').style.display = 'none';\n * });\n *\n * // Resume task from hold\n * try {\n * await task.resume();\n * console.log('Successfully resumed task from hold');\n * } catch (error) {\n * console.error('Failed to resume task:', error);\n * // Handle error (e.g., show error message)\n * }\n * ```\n */\n public async resume(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Resuming task`, {\n module: TASK_FILE,\n method: METHODS.RESUME,\n interactionId: this.data.interactionId,\n });\n const {mainInteractionId} = this.data.interaction;\n const {mediaResourceId} = this.data.interaction.media[mainInteractionId];\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_FAILED,\n ]);\n\n const response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task resumed successfully`, {\n module: TASK_FILE,\n method: METHODS.RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.RESUME, TASK_FILE);\n const mainInteractionId = this.data.interaction?.mainInteractionId;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_FAILED,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId: mainInteractionId\n ? this.data.interaction.media[mainInteractionId].mediaResourceId\n : '',\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw detailedError;\n }\n }\n\n /**\n * Ends the task/interaction with the customer.\n * Emits task:end event when successful. If task requires wrap-up,\n * this will be indicated in the task:end event data.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if ending task fails\n * @example\n * ```typescript\n * // Set up task end event handler\n * task.on(TASK_EVENTS.TASK_END, (data) => {\n * console.log('Task ended:', task.data.interactionId);\n *\n * if (data.wrapUpRequired) {\n * // Show wrap-up form\n * showWrapupForm();\n * } else {\n * // Clean up and prepare for next task\n * cleanupTask();\n * }\n * });\n *\n * // End the task\n * try {\n * await task.end();\n * console.log('Task end request successful');\n * } catch (error) {\n * console.error('Failed to end task:', error);\n * // Handle error (e.g., show error message, retry option)\n * }\n *\n * function showWrapupForm() {\n * // Show wrap-up UI with required codes\n * document.getElementById('wrapup-form').style.display = 'block';\n * }\n *\n * function cleanupTask() {\n * // Reset UI state\n * document.getElementById('active-task').style.display = 'none';\n * document.getElementById('controls').style.display = 'none';\n * }\n * ```\n */\n public async end(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Ending task`, {\n module: TASK_FILE,\n method: METHODS.END,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n ]);\n\n const response = await this.contact.end({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task ended successfully`, {\n module: TASK_FILE,\n method: METHODS.END,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.END, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Wraps up the task/interaction with the customer.\n * This is called after task:end event if wrapUpRequired is true.\n * Emits task:wrappedup event when successful.\n *\n * @param wrapupPayload - WrapupPayLoad containing:\n * - auxCodeId: Required ID for the wrap-up code\n * - wrapUpReason: Required description of wrap-up reason\n * @returns Promise<TaskResponse>\n * @throws Error if task data is unavailable, auxCodeId is missing, or wrapUpReason is missing\n * @example\n * ```typescript\n * // Set up wrap-up events\n * task.on(TASK_EVENTS.TASK_WRAPUP, () => {\n * console.log('Task ready for wrap-up');\n * // Show wrap-up form\n * document.getElementById('wrapup-form').style.display = 'block';\n * });\n *\n * task.on(TASK_EVENTS.TASK_WRAPPEDUP, () => {\n * console.log('Task wrap-up completed');\n * // Clean up UI\n * document.getElementById('wrapup-form').style.display = 'none';\n * });\n *\n * // Submit wrap-up\n * try {\n * const wrapupPayload = {\n * auxCodeId: selectedCode, // e.g., 'ISSUE_RESOLVED'\n * wrapUpReason: 'Customer issue resolved successfully'\n * };\n * await task.wrapup(wrapupPayload);\n * console.log('Successfully submitted wrap-up');\n * } catch (error) {\n * console.error('Failed to submit wrap-up:', error);\n * // Handle validation errors\n * if (error.message.includes('required')) {\n * // Show validation error to agent\n * }\n * }\n * ```\n */\n public async wrapup(wrapupPayload: WrapupPayLoad): Promise<TaskResponse> {\n try {\n this.cancelAutoWrapupTimer();\n LoggerProxy.info(`Wrapping up task`, {\n module: TASK_FILE,\n method: METHODS.WRAPUP,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n ]);\n\n if (!this.data) {\n throw new Error('No task data available');\n }\n if (!wrapupPayload.auxCodeId || wrapupPayload.auxCodeId.length === 0) {\n throw new Error('AuxCodeId is required');\n }\n if (!wrapupPayload.wrapUpReason || wrapupPayload.wrapUpReason.length === 0) {\n throw new Error('WrapUpReason is required');\n }\n\n const response = await this.contact.wrapup({\n interactionId: this.data.interactionId,\n data: wrapupPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task wrapped up successfully`, {\n module: TASK_FILE,\n method: METHODS.WRAPUP,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.WRAPUP, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Pauses the recording for the current voice task.\n * Emits task:recordingPaused event when successful.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if pause recording fails\n * @example\n * ```typescript\n * // Set up recording events\n * task.on(TASK_EVENTS.TASK_RECORDING_PAUSED, () => {\n * console.log('Recording paused');\n * // Update UI to show recording paused state\n * document.getElementById('recording-status').textContent = 'Recording Paused';\n * document.getElementById('pause-recording-btn').style.display = 'none';\n * document.getElementById('resume-recording-btn').style.display = 'block';\n * });\n *\n * task.on(TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED, (error) => {\n * console.error('Failed to pause recording:', error);\n * // Show error to agent\n * });\n *\n * // Pause recording\n * try {\n * await task.pauseRecording();\n * console.log('Pause recording request sent');\n * } catch (error) {\n * console.error('Error sending pause recording request:', error);\n * // Handle error\n * }\n * ```\n */\n public async pauseRecording(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Pausing recording`, {\n module: TASK_FILE,\n method: METHODS.PAUSE_RECORDING,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n ]);\n\n const result = await this.contact.pauseRecording({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Recording paused successfully`, {\n module: TASK_FILE,\n method: METHODS.PAUSE_RECORDING,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.PAUSE_RECORDING, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Resumes the recording for the voice task that was previously paused.\n * Emits task:recordingResumed event when successful.\n *\n * @param resumeRecordingPayload - Configuration for resuming recording:\n * - autoResumed: Indicates if resume was automatic (defaults to false)\n * @returns Promise<TaskResponse>\n * @throws Error if resume recording fails\n * @example\n * ```typescript\n * // Set up recording resume events\n * task.on(TASK_EVENTS.TASK_RECORDING_RESUMED, () => {\n * console.log('Recording resumed');\n * // Update UI to show active recording state\n * document.getElementById('recording-status').textContent = 'Recording Active';\n * document.getElementById('pause-recording-btn').style.display = 'block';\n * document.getElementById('resume-recording-btn').style.display = 'none';\n * });\n *\n * task.on(TASK_EVENTS.TASK_RECORDING_RESUME_FAILED, (error) => {\n * console.error('Failed to resume recording:', error);\n * // Show error to agent\n * });\n *\n * // Resume recording\n * try {\n * const resumePayload = {\n * autoResumed: false // Set to true if triggered by system\n * };\n * await task.resumeRecording(resumePayload);\n * console.log('Resume recording request sent');\n * } catch (error) {\n * console.error('Error sending resume recording request:', error);\n * // Handle error\n * }\n * ```\n */\n public async resumeRecording(\n resumeRecordingPayload: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Resuming recording`, {\n module: TASK_FILE,\n method: METHODS.RESUME_RECORDING,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n ]);\n\n resumeRecordingPayload ??= {autoResumed: false};\n\n const result = await this.contact.resumeRecording({\n interactionId: this.data.interactionId,\n data: resumeRecordingPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Recording resumed successfully`, {\n module: TASK_FILE,\n method: METHODS.RESUME_RECORDING,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.RESUME_RECORDING, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Consults another agent or queue on an ongoing task for further assistance.\n * During consultation, the original customer is typically placed on hold while\n * the agent seeks guidance from another agent or queue.\n *\n * @param consultPayload - Configuration for the consultation containing:\n * - to: ID of the agent or queue to consult with\n * - destinationType: Type of destination (AGENT, QUEUE, etc.)\n * - holdParticipants: Whether to hold other participants (defaults to true)\n * @returns Promise<TaskResponse> - Resolves with consultation result\n * @throws Error if consultation fails or invalid parameters provided\n * @example\n * ```typescript\n * // Consult with another agent\n * const consultPayload = {\n * to: 'agentId123',\n * destinationType: DESTINATION_TYPE.AGENT,\n * holdParticipants: true\n * };\n * task.consult(consultPayload)\n * .then(response => console.log('Consultation started successfully'))\n * .catch(error => console.error('Failed to start consultation:', error));\n *\n * // Consult with a queue\n * const queueConsultPayload = {\n * to: 'salesQueue123',\n * destinationType: DESTINATION_TYPE.QUEUE\n * };\n * task.consult(queueConsultPayload)\n * .then(response => console.log('Queue consultation started'))\n * .catch(error => console.error('Failed to start queue consultation:', error));\n * ```\n */\n public async consult(consultPayload: ConsultPayload): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Starting consult`, {\n module: TASK_FILE,\n method: METHODS.CONSULT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n ]);\n\n const result = await this.contact.consult({\n interactionId: this.data.interactionId,\n data: consultPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult started successfully to ${consultPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.CONSULT,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.CONSULT, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Ends an ongoing consultation session for the task.\n * This terminates the consultation while maintaining the original customer connection.\n *\n * @param consultEndPayload - Configuration for ending the consultation containing:\n * - isConsult: Must be true to indicate this is a consultation end\n * - taskId: ID of the task being consulted on\n * - queueId: (Optional) Queue ID if this was a queue consultation\n * - isSecondaryEpDnAgent: (Optional) Indicates if this involves a secondary entry point\n * @returns Promise<TaskResponse> - Resolves when consultation is ended\n * @throws Error if ending consultation fails or invalid parameters provided\n * @example\n * ```typescript\n * // End a direct agent consultation\n * const consultEndPayload = {\n * isConsult: true,\n * taskId: 'task123'\n * };\n * task.endConsult(consultEndPayload)\n * .then(response => console.log('Consultation ended successfully'))\n * .catch(error => console.error('Failed to end consultation:', error));\n *\n * // End a queue consultation\n * const queueConsultEndPayload = {\n * isConsult: true,\n * taskId: 'task123',\n * queueId: 'queue123'\n * };\n * task.endConsult(queueConsultEndPayload)\n * .then(response => console.log('Queue consultation ended'))\n * .catch(error => console.error('Failed to end queue consultation:', error));\n * ```\n */\n public async endConsult(consultEndPayload: ConsultEndPayload): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Ending consult`, {\n module: TASK_FILE,\n method: METHODS.END_CONSULT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n ]);\n\n const result = await this.contact.consultEnd({\n interactionId: this.data.interactionId,\n data: consultEndPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult ended successfully`, {\n module: TASK_FILE,\n method: METHODS.END_CONSULT,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.END_CONSULT, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Transfer the task to an agent directly or to a queue.\n * This is a blind transfer that immediately redirects the task to the specified destination.\n *\n * @param transferPayload - Transfer configuration containing:\n * - to: ID of the agent or queue to transfer to\n * - destinationType: Type of destination (AGENT, QUEUE, etc.)\n * @returns Promise<TaskResponse> - Resolves when transfer is completed\n * @throws Error if transfer fails or invalid parameters provided\n * @example\n * ```typescript\n * // Transfer to a queue\n * const queueTransferPayload = {\n * to: 'salesQueue123',\n * destinationType: DESTINATION_TYPE.QUEUE\n * };\n * task.transfer(queueTransferPayload)\n * .then(response => console.log('Task transferred to queue successfully'))\n * .catch(error => console.error('Failed to transfer to queue:', error));\n *\n * // Transfer to an agent\n * const agentTransferPayload = {\n * to: 'agentId123',\n * destinationType: DESTINATION_TYPE.AGENT\n * };\n * task.transfer(agentTransferPayload)\n * .then(response => console.log('Task transferred to agent successfully'))\n * .catch(error => console.error('Failed to transfer to agent:', error));\n * ```\n */\n public async transfer(transferPayload: TransferPayLoad): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Transferring task to ${transferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.TRANSFER,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n\n let result: TaskResponse;\n if (transferPayload.destinationType === DESTINATION_TYPE.QUEUE) {\n result = await this.contact.vteamTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n } else {\n result = await this.contact.blindTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task transferred successfully to ${transferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.TRANSFER,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.TRANSFER, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Transfer the task to the party that was consulted.\n * This completes a consultative transfer where the agent first consulted with the target\n * before transferring the task. For queue consultations, the transfer is automatically\n * directed to the agent who accepted the consultation.\n *\n * @param consultTransferPayload - Configuration for the consultation transfer containing:\n * - to: ID of the agent or queue to transfer to\n * - destinationType: Type of destination (AGENT, QUEUE, etc. from CONSULT_TRANSFER_DESTINATION_TYPE)\n * @returns Promise<TaskResponse> - Resolves when consultation transfer is completed\n * @throws Error if transfer fails, no agent has accepted a queue consultation, or other validation errors\n * @example\n * ```typescript\n * // Complete consultation transfer to an agent\n * const agentConsultTransfer = {\n * to: 'agentId123',\n * destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.AGENT\n * };\n * task.consultTransfer(agentConsultTransfer)\n * .then(response => console.log('Consultation transfer to agent completed'))\n * .catch(error => console.error('Failed to complete agent consultation transfer:', error));\n *\n * // Complete consultation transfer to a queue agent\n * const queueConsultTransfer = {\n * to: 'queue123',\n * destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.QUEUE\n * };\n * task.consultTransfer(queueConsultTransfer)\n * .then(response => console.log('Consultation transfer to queue agent completed'))\n * .catch(error => console.error('Failed to complete queue consultation transfer:', error));\n * ```\n */\n public async consultTransfer(\n consultTransferPayload: ConsultTransferPayLoad\n ): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Initiating consult transfer to ${consultTransferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.CONSULT_TRANSFER,\n interactionId: this.data.interactionId,\n });\n\n // For queue destinations, use the destAgentId from task data\n if (consultTransferPayload.destinationType === CONSULT_TRANSFER_DESTINATION_TYPE.QUEUE) {\n if (!this.data.destAgentId) {\n throw new Error('No agent has accepted this queue consult yet');\n }\n\n // Override the destination with the agent who accepted the queue consult\n consultTransferPayload = {\n to: this.data.destAgentId,\n destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.AGENT,\n };\n }\n\n const result = await this.contact.consultTransfer({\n interactionId: this.data.interactionId,\n data: consultTransferPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultTransferPayload.to,\n destinationType: consultTransferPayload.destinationType,\n isConsultTransfer: true,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult transfer completed successfully to ${consultTransferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.CONSULT_TRANSFER,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.CONSULT_TRANSFER, TASK_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: consultTransferPayload.to,\n destinationType: consultTransferPayload.destinationType,\n isConsultTransfer: true,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAEA,IAAAM,YAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AAiBA,IAAAQ,eAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AAEA,IAAAU,WAAA,GAAAX,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAY,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMG,IAAI,SAASC,eAAY,CAAkB;EAU9D;AACF;AACA;AACA;AACA;AACA;AACA;EACSC,WAAWA,CAChBC,OAA0C,EAC1CC,iBAAoC,EACpCC,IAAc,EACdC,UAAsB,EACtB;IACA,KAAK,CAAC,CAAC;IACP,IAAI,CAACH,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACD,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACG,UAAU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"}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_Utils","_types","_constants","_constants2","_loggerProxy","_types2","_MetricsManager","_constants3","_AutoWrapup","obj","__esModule","default","Task","EventEmitter","constructor","contact","webCallingService","data","wrapupData","webCallMap","metricsManager","MetricsManager","getInstance","registerWebCallListeners","setupAutoWrapupTimer","wrapUpRequired","autoWrapup","wrapUpProps","LoggerProxy","info","module","TASK_FILE","method","METHODS","SETUP_AUTO_WRAPUP_TIMER","interactionId","defaultWrapupReason","wrapUpReasonList","find","r","isDefault","error","intervalMs","autoWrapupInterval","AutoWrapup","allowCancelAutoWrapup","start","wrapup","wrapUpReason","name","auxCodeId","id","cancelAutoWrapupTimer","clear","undefined","CANCEL_AUTO_WRAPUP_TIMER","handleRemoteMedia","track","emit","TASK_EVENTS","TASK_MEDIA","on","CALL_EVENT_KEYS","REMOTE_MEDIA","unregisterWebCallListeners","off","updateTaskData","updatedData","shouldOverwrite","reconcileData","oldData","newData","Object","keys","forEach","key","Array","isArray","accept","ACCEPT","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","interaction","mediaType","MEDIA_CHANNEL","TELEPHONY","response","log","trackingId","trackEvent","taskId","getCommonTrackingFieldForAQMResponse","loginOption","LoginOption","BROWSER","constraints","audio","localStream","navigator","mediaDevices","getUserMedia","audioTrack","getAudioTracks","localAudioStream","LocalMicrophoneStream","MediaStream","answerCall","Promise","resolve","err","generateTaskErrorObject","taskErrorProps","errorMessage","message","errorType","errorData","reasonCode","toString","getCommonTrackingFieldForAQMResponseFailed","details","toggleMute","TOGGLE_MUTE","muteUnmuteCall","isCallMuted","decline","DECLINE","TASK_DECLINE_SUCCESS","TASK_DECLINE_FAILED","declineCall","hold","HOLD","TASK_HOLD_SUCCESS","TASK_HOLD_FAILED","mediaResourceId","resume","RESUME","mainInteractionId","media","TASK_RESUME_SUCCESS","TASK_RESUME_FAILED","unHold","end","END","TASK_END_SUCCESS","TASK_END_FAILED","wrapupPayload","WRAPUP","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","Error","length","wrapUpCode","pauseRecording","PAUSE_RECORDING","TASK_PAUSE_RECORDING_SUCCESS","TASK_PAUSE_RECORDING_FAILED","result","resumeRecording","resumeRecordingPayload","RESUME_RECORDING","TASK_RESUME_RECORDING_SUCCESS","TASK_RESUME_RECORDING_FAILED","autoResumed","consult","consultPayload","CONSULT","TASK_CONSULT_START_SUCCESS","TASK_CONSULT_START_FAILED","destination","to","destinationType","endConsult","consultEndPayload","END_CONSULT","TASK_CONSULT_END_SUCCESS","TASK_CONSULT_END_FAILED","consultEnd","transfer","transferPayload","TRANSFER","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","DESTINATION_TYPE","QUEUE","vteamTransfer","blindTransfer","isConsultTransfer","consultTransfer","consultTransferPayload","destAgentId","getDestinationAgentId","participants","agentId","CONSULT_TRANSFER","finalDestinationType","deriveConsultTransferDestinationType","consultTransferRequest","failedDestinationType","failedDestAgentId","exports"],"sources":["index.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {CALL_EVENT_KEYS, LocalMicrophoneStream} from '@webex/calling';\nimport {CallId} from '@webex/calling/dist/types/common/types';\nimport {\n generateTaskErrorObject,\n deriveConsultTransferDestinationType,\n getDestinationAgentId,\n} from '../core/Utils';\nimport {Failure} from '../core/GlobalTypes';\nimport {LoginOption} from '../../types';\nimport {TASK_FILE} from '../../constants';\nimport {METHODS} from './constants';\nimport routingContact from './contact';\nimport LoggerProxy from '../../logger-proxy';\nimport {\n ITask,\n TaskResponse,\n TaskData,\n TaskId,\n TASK_EVENTS,\n WrapupPayLoad,\n ResumeRecordingPayload,\n ConsultPayload,\n ConsultEndPayload,\n TransferPayLoad,\n DESTINATION_TYPE,\n ConsultTransferPayLoad,\n MEDIA_CHANNEL,\n} from './types';\nimport WebCallingService from '../WebCallingService';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport AutoWrapup from './AutoWrapup';\nimport {WrapupData} from '../config/types';\n\n/**\n * Task class represents a contact center task/interaction that can be managed by an agent.\n * This class provides all the necessary methods to manage tasks in a contact center environment,\n * handling various call control operations and task lifecycle management.\n *\n * - Task Lifecycle Management:\n * - {@link accept} - Accept incoming task\n * - {@link decline} - Decline incoming task\n * - {@link end} - End active task\n * - Media Controls:\n * - {@link toggleMute} - Mute/unmute microphone for voice tasks\n * - {@link hold} - Place task on hold\n * - {@link resume} - Resume held task\n * - Recording Controls:\n * - {@link pauseRecording} - Pause task recording\n * - {@link resumeRecording} - Resume paused recording\n * - Task Transfer & Consultation:\n * - {@link consult} - Initiate consultation with another agent/queue\n * - {@link endConsult} - End ongoing consultation\n * - {@link transfer} - Transfer task to another agent/queue\n * - {@link consultTransfer} - Transfer after consultation\n * - Task Completion:\n * - {@link wrapup} - Complete task wrap-up\n *\n * Key events emitted by Task instances (see {@link TASK_EVENTS} for details):\n *\n * - Task Lifecycle:\n * - task:incoming — New task is being offered\n * - task:assigned — Task assigned to agent\n * - task:unassigned — Task unassigned from agent\n * - task:end — Task has ended\n * - task:wrapup — Task entered wrap-up state\n * - task:wrappedup — Task wrap-up completed\n * - task:rejected — Task was rejected/unanswered\n * - task:hydrate — Task data populated\n *\n * - Media & Controls:\n * - task:media — Voice call media track received\n * - task:hold — Task placed on hold\n * - task:unhold — Task resumed from hold\n *\n * - Consultation & Transfer:\n * - task:consultCreated — Consultation initiated\n * - task:consulting — Consultation in progress\n * - task:consultAccepted — Consultation accepted\n * - task:consultEnd — Consultation ended\n * - task:consultQueueCancelled — Queue consultation cancelled\n * - task:consultQueueFailed — Queue consultation failed\n * - task:offerConsult — Consultation offered\n * - task:offerContact — New contact offered\n *\n * - Recording:\n * - task:recordingPaused — Recording paused\n * - task:recordingPauseFailed — Recording pause failed\n * - task:recordingResumed — Recording resumed\n * - task:recordingResumeFailed — Recording resume failed\n *\n * @implements {ITask}\n * @example\n * ```typescript\n * // 1. Initialize task\n * const task = new Task(contact, webCallingService, taskData);\n *\n * // 2. Set up event listeners\n * task.on('task:media', (track) => {\n * // Handle voice call media\n * const audioElement = document.getElementById('remote-audio');\n * audioElement.srcObject = new MediaStream([track]);\n * });\n *\n * task.on('task:hold', () => {\n * console.log('Task is on hold');\n * // Update UI to show hold state\n * });\n *\n * task.on('task:end', () => {\n * console.log('Task ended');\n * if (task.data.wrapUpRequired) {\n * // Show wrap-up form\n * }\n * });\n *\n * // 3. Example task operations\n * await task.accept(); // Accept incoming task\n * await task.hold(); // Place on hold\n * await task.resume(); // Resume from hold\n * await task.end(); // End task\n *\n * // 4. Handle wrap-up if required\n * await task.wrapup({\n * auxCodeId: 'RESOLVED',\n * wrapUpReason: 'Customer issue resolved'\n * });\n * ```\n */\n\nexport default class Task extends EventEmitter implements ITask {\n private contact: ReturnType<typeof routingContact>;\n private localAudioStream: LocalMicrophoneStream;\n private webCallingService: WebCallingService;\n public data: TaskData;\n private metricsManager: MetricsManager;\n public webCallMap: Record<TaskId, CallId>;\n private wrapupData: WrapupData;\n public autoWrapup?: AutoWrapup;\n\n /**\n * Creates a new Task instance which provides the following features:\n * @param contact - The routing contact service instance\n * @param webCallingService - The web calling service instance\n * @param data - Initial task data\n * @param wrapupData - Wrap-up configuration data\n */\n public constructor(\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n data: TaskData,\n wrapupData: WrapupData\n ) {\n super();\n this.contact = contact;\n this.data = data;\n this.webCallingService = webCallingService;\n this.webCallMap = {};\n this.wrapupData = wrapupData;\n this.metricsManager = MetricsManager.getInstance();\n this.registerWebCallListeners();\n this.setupAutoWrapupTimer();\n }\n\n /**\n * Sets up the automatic wrap-up timer if wrap-up is required\n * @private\n */\n private setupAutoWrapupTimer() {\n if (\n this.data.wrapUpRequired && // only when wrapup required\n !this.autoWrapup && // if autoWrapup is not already set\n this.wrapupData && // wrapupData is not defined\n this.wrapupData.wrapUpProps // wrapUpProps is defined\n ) {\n const wrapUpProps = this.wrapupData.wrapUpProps;\n if (!wrapUpProps || wrapUpProps.autoWrapup === false) {\n LoggerProxy.info(`Auto wrap-up is not required for this task`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n\n return;\n }\n const defaultWrapupReason =\n wrapUpProps.wrapUpReasonList?.find((r) => r.isDefault) ?? wrapUpProps.wrapUpReasonList?.[0];\n if (!defaultWrapupReason) {\n LoggerProxy.error('No wrap-up reason configured', {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n const intervalMs = wrapUpProps.autoWrapupInterval;\n if (!intervalMs || intervalMs <= 0) {\n LoggerProxy.error(`Invalid auto wrap-up interval: ${intervalMs}`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n }\n this.autoWrapup = new AutoWrapup(intervalMs, wrapUpProps.allowCancelAutoWrapup);\n this.autoWrapup.start(async () => {\n LoggerProxy.info(`Auto wrap-up timer triggered`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n await this.wrapup({\n wrapUpReason: defaultWrapupReason.name,\n auxCodeId: defaultWrapupReason.id,\n });\n });\n }\n }\n\n /**\n * Cancels the automatic wrap-up timer if it's running\n * @public - Public so it can be called externally when needed\n * Note: This is supported only in single session mode. Not supported in multi-session mode.\n */\n public cancelAutoWrapupTimer() {\n this.autoWrapup?.clear();\n this.autoWrapup = undefined;\n LoggerProxy.info(`Auto wrap-up timer cancelled`, {\n module: TASK_FILE,\n method: METHODS.CANCEL_AUTO_WRAPUP_TIMER,\n interactionId: this.data?.interactionId,\n });\n }\n\n /**\n * @ignore\n * @private\n */\n private handleRemoteMedia = (track: MediaStreamTrack) => {\n this.emit(TASK_EVENTS.TASK_MEDIA, track);\n };\n\n /**\n * @ignore\n * @private\n */\n private registerWebCallListeners() {\n this.webCallingService.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * @ignore\n */\n public unregisterWebCallListeners() {\n this.webCallingService.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * Updates the task data with new information\n * @param updatedData - New task data to merge with existing data\n * @param shouldOverwrite - If true, completely replace data instead of merging\n * @returns The updated task instance\n * @example\n * ```typescript\n * task.updateTaskData(newData);\n * task.updateTaskData(newData, true); // completely replace data\n * ```\n */\n public updateTaskData = (updatedData: TaskData, shouldOverwrite = false) => {\n this.data = shouldOverwrite ? updatedData : this.reconcileData(this.data, updatedData);\n this.setupAutoWrapupTimer();\n\n return this;\n };\n\n /**\n * Recursively merges old data with new data\n * @private\n */\n private reconcileData(oldData: TaskData, newData: TaskData): TaskData {\n Object.keys(newData).forEach((key) => {\n if (newData[key] && typeof newData[key] === 'object' && !Array.isArray(newData[key])) {\n oldData[key] = this.reconcileData({...oldData[key]}, newData[key]);\n } else {\n oldData[key] = newData[key];\n }\n });\n\n return oldData;\n }\n\n /**\n * Agent accepts the incoming task.\n * After accepting, the task will emit task:assigned event and for voice calls,\n * a task:media event with the audio stream.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if accepting task fails or media requirements not met\n * @example\n * ```typescript\n * // Set up event handlers before accepting\n * task.on(TASK_EVENTS.TASK_ASSIGNED, () => {\n * console.log('Task assigned, ID:', task.data.interactionId);\n * // Update UI to show active task\n * });\n *\n * // For voice calls, handle media\n * task.on(TASK_EVENTS.TASK_MEDIA, (track) => {\n * const audioElement = document.getElementById('remote-audio');\n * audioElement.srcObject = new MediaStream([track]);\n * });\n *\n * // Accept the task\n * try {\n * await task.accept();\n * console.log('Successfully accepted task');\n * } catch (error) {\n * console.error('Failed to accept task:', error);\n * // Handle error (e.g., show error message to agent)\n * }\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Accepting task`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n if (this.data.interaction.mediaType !== MEDIA_CHANNEL.TELEPHONY) {\n const response = await this.contact.accept({interactionId: this.data.interactionId});\n LoggerProxy.log(`Task accepted successfully`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(this.data),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n }\n\n if (this.webCallingService.loginOption === LoginOption.BROWSER) {\n const constraints = {audio: true};\n\n const localStream = await navigator.mediaDevices.getUserMedia(constraints);\n const audioTrack = localStream.getAudioTracks()[0];\n this.localAudioStream = new LocalMicrophoneStream(new MediaStream([audioTrack]));\n this.webCallingService.answerCall(this.localAudioStream, this.data.interactionId);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(this.data),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task accepted successfully with webrtc calling`, {\n module: TASK_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n }\n\n return Promise.resolve(); // TODO: reject for extension as part of refactor\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.ACCEPT, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details as Failure),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Agent can mute/unmute their microphone during a WebRTC task.\n * This method toggles between muted and unmuted states for the local audio stream.\n *\n * @returns Promise<void> - Resolves when mute/unmute operation completes\n * @throws Error if toggling mute state fails or audio stream is not available\n * @example\n * ```typescript\n * // Toggle mute state\n * task.toggleMute()\n * .then(() => console.log('Mute state toggled successfully'))\n * .catch(error => console.error('Failed to toggle mute:', error));\n * ```\n */\n public async toggleMute() {\n try {\n LoggerProxy.info(`Toggling mute state`, {\n module: TASK_FILE,\n method: METHODS.TOGGLE_MUTE,\n interactionId: this.data.interactionId,\n });\n\n this.webCallingService.muteUnmuteCall(this.localAudioStream);\n\n LoggerProxy.log(\n `Mute state toggled successfully isCallMuted: ${this.webCallingService.isCallMuted()}`,\n {\n module: TASK_FILE,\n method: METHODS.TOGGLE_MUTE,\n interactionId: this.data.interactionId,\n }\n );\n\n return Promise.resolve();\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.TOGGLE_MUTE, TASK_FILE);\n throw err;\n }\n }\n\n /**\n * Declines the incoming task. This will reject the task and notify the routing system.\n * For voice calls, this is equivalent to declining the incoming call.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if the decline operation fails\n * @example\n * ```typescript\n * // Decline an incoming task\n * task.decline()\n * .then(() => console.log('Task declined successfully'))\n * .catch(error => console.error('Failed to decline task:', error));\n * ```\n */\n public async decline(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Declining task`, {\n module: TASK_FILE,\n method: METHODS.DECLINE,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n ]);\n\n this.webCallingService.declineCall(this.data.interactionId);\n this.unregisterWebCallListeners();\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n {taskId: this.data.interactionId},\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task declined successfully`, {\n module: TASK_FILE,\n method: METHODS.DECLINE,\n interactionId: this.data.interactionId,\n });\n\n return Promise.resolve();\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.DECLINE, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw err;\n }\n }\n\n /**\n * Puts the current task/interaction on hold.\n * Emits task:hold event when successful. For voice tasks, this mutes the audio.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if hold operation fails\n * @example\n * ```typescript\n * // Set up hold event handler\n * task.on(TASK_EVENTS.TASK_HOLD, () => {\n * console.log('Task is now on hold');\n * // Update UI to show hold state (e.g., enable resume button, show hold indicator)\n * document.getElementById('resume-btn').disabled = false;\n * document.getElementById('hold-indicator').style.display = 'block';\n * });\n *\n * // Place task on hold\n * try {\n * await task.hold();\n * console.log('Successfully placed task on hold');\n * } catch (error) {\n * console.error('Failed to place task on hold:', error);\n * // Handle error (e.g., show error message, reset UI state)\n * }\n * ```\n */\n public async hold(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Holding task`, {\n module: TASK_FILE,\n method: METHODS.HOLD,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS,\n METRIC_EVENT_NAMES.TASK_HOLD_FAILED,\n ]);\n\n const response = await this.contact.hold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: this.data.mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task placed on hold successfully`, {\n module: TASK_FILE,\n method: METHODS.HOLD,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.HOLD, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_HOLD_FAILED,\n {\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw err;\n }\n }\n\n /**\n * Resumes the task/interaction that was previously put on hold.\n * Emits task:resume event when successful. For voice tasks, this restores the audio.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if resume operation fails\n * @example\n * ```typescript\n * // Set up resume event handler\n * task.on(TASK_EVENTS.TASK_RESUME, () => {\n * console.log('Task resumed from hold');\n * // Update UI to show active state\n * document.getElementById('hold-btn').disabled = false;\n * document.getElementById('hold-indicator').style.display = 'none';\n * });\n *\n * // Resume task from hold\n * try {\n * await task.resume();\n * console.log('Successfully resumed task from hold');\n * } catch (error) {\n * console.error('Failed to resume task:', error);\n * // Handle error (e.g., show error message)\n * }\n * ```\n */\n public async resume(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Resuming task`, {\n module: TASK_FILE,\n method: METHODS.RESUME,\n interactionId: this.data.interactionId,\n });\n const {mainInteractionId} = this.data.interaction;\n const {mediaResourceId} = this.data.interaction.media[mainInteractionId];\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_FAILED,\n ]);\n\n const response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Task resumed successfully`, {\n module: TASK_FILE,\n method: METHODS.RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.RESUME, TASK_FILE);\n const mainInteractionId = this.data.interaction?.mainInteractionId;\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_FAILED,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId: mainInteractionId\n ? this.data.interaction.media[mainInteractionId].mediaResourceId\n : '',\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw err;\n }\n }\n\n /**\n * Ends the task/interaction with the customer.\n * Emits task:end event when successful. If task requires wrap-up,\n * this will be indicated in the task:end event data.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if ending task fails\n * @example\n * ```typescript\n * // Set up task end event handler\n * task.on(TASK_EVENTS.TASK_END, (data) => {\n * console.log('Task ended:', task.data.interactionId);\n *\n * if (data.wrapUpRequired) {\n * // Show wrap-up form\n * showWrapupForm();\n * } else {\n * // Clean up and prepare for next task\n * cleanupTask();\n * }\n * });\n *\n * // End the task\n * try {\n * await task.end();\n * console.log('Task end request successful');\n * } catch (error) {\n * console.error('Failed to end task:', error);\n * // Handle error (e.g., show error message, retry option)\n * }\n *\n * function showWrapupForm() {\n * // Show wrap-up UI with required codes\n * document.getElementById('wrapup-form').style.display = 'block';\n * }\n *\n * function cleanupTask() {\n * // Reset UI state\n * document.getElementById('active-task').style.display = 'none';\n * document.getElementById('controls').style.display = 'none';\n * }\n * ```\n */\n public async end(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Ending task`, {\n module: TASK_FILE,\n method: METHODS.END,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n ]);\n\n const response = await this.contact.end({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task ended successfully`, {\n module: TASK_FILE,\n method: METHODS.END,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.END, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n {\n taskId: this.data.interactionId,\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Wraps up the task/interaction with the customer.\n * This is called after task:end event if wrapUpRequired is true.\n * Emits task:wrappedup event when successful.\n *\n * @param wrapupPayload - WrapupPayLoad containing:\n * - auxCodeId: Required ID for the wrap-up code\n * - wrapUpReason: Required description of wrap-up reason\n * @returns Promise<TaskResponse>\n * @throws Error if task data is unavailable, auxCodeId is missing, or wrapUpReason is missing\n * @example\n * ```typescript\n * // Set up wrap-up events\n * task.on(TASK_EVENTS.TASK_WRAPUP, () => {\n * console.log('Task ready for wrap-up');\n * // Show wrap-up form\n * document.getElementById('wrapup-form').style.display = 'block';\n * });\n *\n * task.on(TASK_EVENTS.TASK_WRAPPEDUP, () => {\n * console.log('Task wrap-up completed');\n * // Clean up UI\n * document.getElementById('wrapup-form').style.display = 'none';\n * });\n *\n * // Submit wrap-up\n * try {\n * const wrapupPayload = {\n * auxCodeId: selectedCode, // e.g., 'ISSUE_RESOLVED'\n * wrapUpReason: 'Customer issue resolved successfully'\n * };\n * await task.wrapup(wrapupPayload);\n * console.log('Successfully submitted wrap-up');\n * } catch (error) {\n * console.error('Failed to submit wrap-up:', error);\n * // Handle validation errors\n * if (error.message.includes('required')) {\n * // Show validation error to agent\n * }\n * }\n * ```\n */\n public async wrapup(wrapupPayload: WrapupPayLoad): Promise<TaskResponse> {\n try {\n this.cancelAutoWrapupTimer();\n LoggerProxy.info(`Wrapping up task`, {\n module: TASK_FILE,\n method: METHODS.WRAPUP,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n ]);\n\n if (!this.data) {\n throw new Error('No task data available');\n }\n if (!wrapupPayload.auxCodeId || wrapupPayload.auxCodeId.length === 0) {\n throw new Error('AuxCodeId is required');\n }\n if (!wrapupPayload.wrapUpReason || wrapupPayload.wrapUpReason.length === 0) {\n throw new Error('WrapUpReason is required');\n }\n\n const response = await this.contact.wrapup({\n interactionId: this.data.interactionId,\n data: wrapupPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task wrapped up successfully`, {\n module: TASK_FILE,\n method: METHODS.WRAPUP,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.WRAPUP, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Pauses the recording for the current voice task.\n * Emits task:recordingPaused event when successful.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if pause recording fails\n * @example\n * ```typescript\n * // Set up recording events\n * task.on(TASK_EVENTS.TASK_RECORDING_PAUSED, () => {\n * console.log('Recording paused');\n * // Update UI to show recording paused state\n * document.getElementById('recording-status').textContent = 'Recording Paused';\n * document.getElementById('pause-recording-btn').style.display = 'none';\n * document.getElementById('resume-recording-btn').style.display = 'block';\n * });\n *\n * task.on(TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED, (error) => {\n * console.error('Failed to pause recording:', error);\n * // Show error to agent\n * });\n *\n * // Pause recording\n * try {\n * await task.pauseRecording();\n * console.log('Pause recording request sent');\n * } catch (error) {\n * console.error('Error sending pause recording request:', error);\n * // Handle error\n * }\n * ```\n */\n public async pauseRecording(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Pausing recording`, {\n module: TASK_FILE,\n method: METHODS.PAUSE_RECORDING,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n ]);\n\n const result = await this.contact.pauseRecording({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Recording paused successfully`, {\n module: TASK_FILE,\n method: METHODS.PAUSE_RECORDING,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.PAUSE_RECORDING, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Resumes the recording for the voice task that was previously paused.\n * Emits task:recordingResumed event when successful.\n *\n * @param resumeRecordingPayload - Configuration for resuming recording:\n * - autoResumed: Indicates if resume was automatic (defaults to false)\n * @returns Promise<TaskResponse>\n * @throws Error if resume recording fails\n * @example\n * ```typescript\n * // Set up recording resume events\n * task.on(TASK_EVENTS.TASK_RECORDING_RESUMED, () => {\n * console.log('Recording resumed');\n * // Update UI to show active recording state\n * document.getElementById('recording-status').textContent = 'Recording Active';\n * document.getElementById('pause-recording-btn').style.display = 'block';\n * document.getElementById('resume-recording-btn').style.display = 'none';\n * });\n *\n * task.on(TASK_EVENTS.TASK_RECORDING_RESUME_FAILED, (error) => {\n * console.error('Failed to resume recording:', error);\n * // Show error to agent\n * });\n *\n * // Resume recording\n * try {\n * const resumePayload = {\n * autoResumed: false // Set to true if triggered by system\n * };\n * await task.resumeRecording(resumePayload);\n * console.log('Resume recording request sent');\n * } catch (error) {\n * console.error('Error sending resume recording request:', error);\n * // Handle error\n * }\n * ```\n */\n public async resumeRecording(\n resumeRecordingPayload: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Resuming recording`, {\n module: TASK_FILE,\n method: METHODS.RESUME_RECORDING,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n ]);\n\n resumeRecordingPayload ??= {autoResumed: false};\n\n const result = await this.contact.resumeRecording({\n interactionId: this.data.interactionId,\n data: resumeRecordingPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Recording resumed successfully`, {\n module: TASK_FILE,\n method: METHODS.RESUME_RECORDING,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.RESUME_RECORDING, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Consults another agent or queue on an ongoing task for further assistance.\n * During consultation, the original customer is typically placed on hold while\n * the agent seeks guidance from another agent or queue.\n *\n * @param consultPayload - Configuration for the consultation containing:\n * - to: ID of the agent or queue to consult with\n * - destinationType: Type of destination (AGENT, QUEUE, etc.)\n * - holdParticipants: Whether to hold other participants (defaults to true)\n * @returns Promise<TaskResponse> - Resolves with consultation result\n * @throws Error if consultation fails or invalid parameters provided\n * @example\n * ```typescript\n * // Consult with another agent\n * const consultPayload = {\n * to: 'agentId123',\n * destinationType: DESTINATION_TYPE.AGENT,\n * holdParticipants: true\n * };\n * task.consult(consultPayload)\n * .then(response => console.log('Consultation started successfully'))\n * .catch(error => console.error('Failed to start consultation:', error));\n *\n * // Consult with a queue\n * const queueConsultPayload = {\n * to: 'salesQueue123',\n * destinationType: DESTINATION_TYPE.QUEUE\n * };\n * task.consult(queueConsultPayload)\n * .then(response => console.log('Queue consultation started'))\n * .catch(error => console.error('Failed to start queue consultation:', error));\n * ```\n */\n public async consult(consultPayload: ConsultPayload): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Starting consult`, {\n module: TASK_FILE,\n method: METHODS.CONSULT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n ]);\n\n const result = await this.contact.consult({\n interactionId: this.data.interactionId,\n data: consultPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult started successfully to ${consultPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.CONSULT,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.CONSULT, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Ends an ongoing consultation session for the task.\n * This terminates the consultation while maintaining the original customer connection.\n *\n * @param consultEndPayload - Configuration for ending the consultation containing:\n * - isConsult: Must be true to indicate this is a consultation end\n * - taskId: ID of the task being consulted on\n * - queueId: (Optional) Queue ID if this was a queue consultation\n * - isSecondaryEpDnAgent: (Optional) Indicates if this involves a secondary entry point\n * @returns Promise<TaskResponse> - Resolves when consultation is ended\n * @throws Error if ending consultation fails or invalid parameters provided\n * @example\n * ```typescript\n * // End a direct agent consultation\n * const consultEndPayload = {\n * isConsult: true,\n * taskId: 'task123'\n * };\n * task.endConsult(consultEndPayload)\n * .then(response => console.log('Consultation ended successfully'))\n * .catch(error => console.error('Failed to end consultation:', error));\n *\n * // End a queue consultation\n * const queueConsultEndPayload = {\n * isConsult: true,\n * taskId: 'task123',\n * queueId: 'queue123'\n * };\n * task.endConsult(queueConsultEndPayload)\n * .then(response => console.log('Queue consultation ended'))\n * .catch(error => console.error('Failed to end queue consultation:', error));\n * ```\n */\n public async endConsult(consultEndPayload: ConsultEndPayload): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Ending consult`, {\n module: TASK_FILE,\n method: METHODS.END_CONSULT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n ]);\n\n const result = await this.contact.consultEnd({\n interactionId: this.data.interactionId,\n data: consultEndPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult ended successfully`, {\n module: TASK_FILE,\n method: METHODS.END_CONSULT,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.END_CONSULT, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Transfer the task to an agent directly or to a queue.\n * This is a blind transfer that immediately redirects the task to the specified destination.\n *\n * @param transferPayload - Transfer configuration containing:\n * - to: ID of the agent or queue to transfer to\n * - destinationType: Type of destination (AGENT, QUEUE, etc.)\n * @returns Promise<TaskResponse> - Resolves when transfer is completed\n * @throws Error if transfer fails or invalid parameters provided\n * @example\n * ```typescript\n * // Transfer to a queue\n * const queueTransferPayload = {\n * to: 'salesQueue123',\n * destinationType: DESTINATION_TYPE.QUEUE\n * };\n * task.transfer(queueTransferPayload)\n * .then(response => console.log('Task transferred to queue successfully'))\n * .catch(error => console.error('Failed to transfer to queue:', error));\n *\n * // Transfer to an agent\n * const agentTransferPayload = {\n * to: 'agentId123',\n * destinationType: DESTINATION_TYPE.AGENT\n * };\n * task.transfer(agentTransferPayload)\n * .then(response => console.log('Task transferred to agent successfully'))\n * .catch(error => console.error('Failed to transfer to agent:', error));\n * ```\n */\n public async transfer(transferPayload: TransferPayLoad): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Transferring task to ${transferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.TRANSFER,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n\n let result: TaskResponse;\n if (transferPayload.destinationType === DESTINATION_TYPE.QUEUE) {\n result = await this.contact.vteamTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n } else {\n result = await this.contact.blindTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Task transferred successfully to ${transferPayload.to}`, {\n module: TASK_FILE,\n method: METHODS.TRANSFER,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.TRANSFER, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n\n /**\n * Transfer the task to the party that was consulted.\n * This completes a consultative transfer where the agent first consulted with the target\n * before transferring the task. For queue consultations, the transfer is automatically\n * directed to the agent who accepted the consultation.\n *\n * @param consultTransferPayload - Configuration for the consultation transfer containing:\n * - to: ID of the agent or queue to transfer to\n * - destinationType: Type of destination (AGENT, QUEUE, etc. from CONSULT_TRANSFER_DESTINATION_TYPE)\n * @returns Promise<TaskResponse> - Resolves when consultation transfer is completed\n * @throws Error if transfer fails, no agent has accepted a queue consultation, or other validation errors\n * @example\n * ```typescript\n * // Complete consultation transfer to an agent\n * const agentConsultTransfer = {\n * to: 'agentId123',\n * destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.AGENT\n * };\n * task.consultTransfer(agentConsultTransfer)\n * .then(response => console.log('Consultation transfer to agent completed'))\n * .catch(error => console.error('Failed to complete agent consultation transfer:', error));\n *\n * // Complete consultation transfer to a queue agent\n * const queueConsultTransfer = {\n * to: 'queue123',\n * destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.QUEUE\n * };\n * task.consultTransfer(queueConsultTransfer)\n * .then(response => console.log('Consultation transfer to queue agent completed'))\n * .catch(error => console.error('Failed to complete queue consultation transfer:', error));\n * ```\n */\n public async consultTransfer(\n consultTransferPayload?: ConsultTransferPayLoad\n ): Promise<TaskResponse> {\n try {\n // Get the destination agent ID using custom logic from participants data\n const destAgentId = getDestinationAgentId(\n this.data.interaction?.participants,\n this.data.agentId\n );\n\n // Resolve the target id (queue consult transfers go to the accepted agent)\n if (!destAgentId) {\n throw new Error('No agent has accepted this queue consult yet');\n }\n\n LoggerProxy.info(\n `Initiating consult transfer to ${consultTransferPayload?.to || destAgentId}`,\n {\n module: TASK_FILE,\n method: METHODS.CONSULT_TRANSFER,\n interactionId: this.data.interactionId,\n }\n );\n // Obtain payload based on desktop logic using TaskData\n const finalDestinationType = deriveConsultTransferDestinationType(this.data);\n\n // By default we always use the computed destAgentId as the target id\n const consultTransferRequest: ConsultTransferPayLoad = {\n to: destAgentId,\n destinationType: finalDestinationType,\n };\n\n const result = await this.contact.consultTransfer({\n interactionId: this.data.interactionId,\n data: consultTransferRequest,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultTransferRequest.to,\n destinationType: consultTransferRequest.destinationType,\n isConsultTransfer: true,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(\n `Consult transfer completed successfully to ${consultTransferPayload?.to || destAgentId}`,\n {\n module: TASK_FILE,\n method: METHODS.CONSULT_TRANSFER,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n }\n );\n\n return result;\n } catch (error) {\n const err = generateTaskErrorObject(error, METHODS.CONSULT_TRANSFER, TASK_FILE);\n const taskErrorProps = {\n trackingId: err.data?.trackingId,\n errorMessage: err.data?.message,\n errorType: err.data?.errorType,\n errorData: err.data?.errorData,\n reasonCode: err.data?.reasonCode,\n };\n const failedDestinationType = deriveConsultTransferDestinationType(this.data);\n const failedDestAgentId = getDestinationAgentId(\n this.data.interaction?.participants,\n this.data.agentId\n );\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: failedDestAgentId || '',\n destinationType: failedDestinationType,\n isConsultTransfer: true,\n error: error.toString(),\n ...taskErrorProps,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw err;\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAMA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAEA,IAAAM,YAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AAgBA,IAAAQ,eAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AACA,IAAAU,WAAA,GAAAX,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAY,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMG,IAAI,SAASC,eAAY,CAAkB;EAU9D;AACF;AACA;AACA;AACA;AACA;AACA;EACSC,WAAWA,CAChBC,OAA0C,EAC1CC,iBAAoC,EACpCC,IAAc,EACdC,UAAsB,EACtB;IACA,KAAK,CAAC,CAAC;IACP,IAAI,CAACH,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACD,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACG,UAAU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"}
|
package/dist/types/cc.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ import { WebexPlugin } from '@webex/webex-core';
|
|
|
9
9
|
import { SetStateResponse, IContactCenter, AgentLogin, AgentProfileUpdate, StationLoginResponse, StationLogoutResponse, BuddyAgentsResponse, BuddyAgents, UploadLogsResponse, UpdateDeviceTypeResponse } from './types';
|
|
10
10
|
import LoggerProxy from './logger-proxy';
|
|
11
11
|
import { StateChange, Logout } from './services/agent/types';
|
|
12
|
-
import { Profile
|
|
12
|
+
import { Profile } from './services/config/types';
|
|
13
13
|
import { TaskResponse } from './services/task/types';
|
|
14
|
+
import AddressBook from './services/AddressBook';
|
|
15
|
+
import type { EntryPointListResponse, EntryPointSearchParams, ContactServiceQueuesResponse, ContactServiceQueueSearchParams } from './types';
|
|
14
16
|
/**
|
|
15
17
|
* The main Contact Center plugin class that enables integration with Webex Contact Center.
|
|
16
18
|
*
|
|
@@ -185,6 +187,68 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
185
187
|
* @private
|
|
186
188
|
*/
|
|
187
189
|
private metricsManager;
|
|
190
|
+
/**
|
|
191
|
+
* API instance for managing Webex Contact Center entry points
|
|
192
|
+
* Provides functionality to fetch entry points with caching support
|
|
193
|
+
* @type {EntryPoint}
|
|
194
|
+
* @public
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* const cc = webex.cc;
|
|
198
|
+
* await cc.register();
|
|
199
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
200
|
+
*
|
|
201
|
+
* // Access EntryPointRecord
|
|
202
|
+
* const response = await cc.entryPoint.getEntryPoints({
|
|
203
|
+
* page: 0,
|
|
204
|
+
* pageSize: 50
|
|
205
|
+
* });
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
private entryPoint;
|
|
209
|
+
/**
|
|
210
|
+
* API instance for managing Webex Contact Center address book contacts
|
|
211
|
+
* Provides functionality to fetch address book entries with caching support
|
|
212
|
+
* @type {AddressBook}
|
|
213
|
+
* @public
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const cc = webex.cc;
|
|
217
|
+
* await cc.register();
|
|
218
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
219
|
+
*
|
|
220
|
+
* // Access AddressBook API
|
|
221
|
+
* const response = await cc.addressBook.getEntries({
|
|
222
|
+
* page: 0,
|
|
223
|
+
* pageSize: 25
|
|
224
|
+
* });
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
addressBook: AddressBook;
|
|
228
|
+
/**
|
|
229
|
+
* API instance for managing Webex Contact Center queues
|
|
230
|
+
* Provides functionality to fetch queues with caching support
|
|
231
|
+
* @type {Queue}
|
|
232
|
+
* @public
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* const cc = webex.cc;
|
|
236
|
+
* await cc.register();
|
|
237
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
238
|
+
*
|
|
239
|
+
* // Access Queue API
|
|
240
|
+
* const response = await cc.queue.getQueues({
|
|
241
|
+
* page: 0,
|
|
242
|
+
* pageSize: 50
|
|
243
|
+
* });
|
|
244
|
+
*
|
|
245
|
+
* // Filter queues by specific criteria
|
|
246
|
+
* const filteredQueues = await cc.queue.getQueues({
|
|
247
|
+
* filter: 'id=="queue-id-123"'
|
|
248
|
+
* });
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
private queue;
|
|
188
252
|
/**
|
|
189
253
|
* Logger utility for Contact Center plugin
|
|
190
254
|
* Provides consistent logging across the plugin
|
|
@@ -580,48 +644,6 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
580
644
|
* ```
|
|
581
645
|
*/
|
|
582
646
|
startOutdial(destination: string): Promise<TaskResponse>;
|
|
583
|
-
/**
|
|
584
|
-
* This is used for getting the list of queues to which a task can be consulted or transferred.
|
|
585
|
-
* @param {string} [search] - Optional search string to filter queues by name
|
|
586
|
-
* @param {string} [filter] - Optional OData filter expression (e.g., 'teamId eq "team123"')
|
|
587
|
-
* @param {number} [page=0] - Page number for paginated results, starting at 0
|
|
588
|
-
* @param {number} [pageSize=100] - Number of queues to return per page
|
|
589
|
-
* @returns Promise<ContactServiceQueue[]> Resolves with the list of queues
|
|
590
|
-
* @throws Error If the operation fails
|
|
591
|
-
* @public
|
|
592
|
-
* @example
|
|
593
|
-
* ```typescript
|
|
594
|
-
* const cc = webex.cc;
|
|
595
|
-
* await cc.register();
|
|
596
|
-
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
597
|
-
*
|
|
598
|
-
* // Basic usage - get all queues
|
|
599
|
-
* const allQueues = await cc.getQueues();
|
|
600
|
-
*
|
|
601
|
-
* // Search for specific queues
|
|
602
|
-
* const salesQueues = await cc.getQueues('sales'); // Search for 'sales' in queue names
|
|
603
|
-
*
|
|
604
|
-
* // Use filtering and pagination
|
|
605
|
-
* const filteredQueues = await cc.getQueues(
|
|
606
|
-
* '', // No search term
|
|
607
|
-
* 'teamId eq "team123"', // Filter by team
|
|
608
|
-
* 0, // First page
|
|
609
|
-
* 50 // 50 items per page
|
|
610
|
-
* );
|
|
611
|
-
*
|
|
612
|
-
* // Process queue results
|
|
613
|
-
* queues.forEach(queue => {
|
|
614
|
-
* console.log('Queue:', {
|
|
615
|
-
* id: queue.queueId,
|
|
616
|
-
* name: queue.queueName,
|
|
617
|
-
* channelType: queue.channelType,
|
|
618
|
-
* isActive: queue.isActive,
|
|
619
|
-
* description: queue.description
|
|
620
|
-
* });
|
|
621
|
-
* });
|
|
622
|
-
* ```
|
|
623
|
-
*/
|
|
624
|
-
getQueues(search?: string, filter?: string, page?: number, pageSize?: number): Promise<ContactServiceQueue[]>;
|
|
625
647
|
/**
|
|
626
648
|
* Uploads logs to help troubleshoot SDK issues.
|
|
627
649
|
*
|
|
@@ -673,4 +695,16 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
|
|
|
673
695
|
* @public
|
|
674
696
|
*/
|
|
675
697
|
updateAgentProfile(data: AgentProfileUpdate): Promise<UpdateDeviceTypeResponse>;
|
|
698
|
+
/**
|
|
699
|
+
* Returns paginated entry points for the organization.
|
|
700
|
+
* Thin wrapper around internal EntryPoint instance.
|
|
701
|
+
* @public
|
|
702
|
+
*/
|
|
703
|
+
getEntryPoints(params?: EntryPointSearchParams): Promise<EntryPointListResponse>;
|
|
704
|
+
/**
|
|
705
|
+
* Returns paginated contact service queues for the organization.
|
|
706
|
+
* Thin wrapper around internal Queue instance.
|
|
707
|
+
* @public
|
|
708
|
+
*/
|
|
709
|
+
getQueues(params?: ContactServiceQueueSearchParams): Promise<ContactServiceQueuesResponse>;
|
|
676
710
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import ContactCenter from './cc';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* @module ContactCenterModule
|
|
4
|
+
* /
|
|
5
|
+
|
|
6
|
+
// Core exports
|
|
3
7
|
/**
|
|
4
8
|
* ContactCenter is the main plugin class for Webex Contact Center integration
|
|
5
9
|
* @category Core
|
|
@@ -15,6 +19,9 @@ export { default as Task } from './services/task';
|
|
|
15
19
|
* @category Services
|
|
16
20
|
*/
|
|
17
21
|
export { default as routingAgent } from './services/agent';
|
|
22
|
+
export { default as AddressBook } from './services/AddressBook';
|
|
23
|
+
/** EntryPoint API types */
|
|
24
|
+
export type { EntryPointRecord, EntryPointListResponse, EntryPointSearchParams, AddressBookEntry, AddressBookEntriesResponse, AddressBookEntrySearchParams, ContactServiceQueuesResponse, ContactServiceQueueSearchParams, ContactServiceQueue, } from './types';
|
|
18
25
|
/**
|
|
19
26
|
* Task Events for Contact Center operations
|
|
20
27
|
* @enum {string}
|
|
@@ -122,8 +129,6 @@ BuddyAgentsSuccess, } from './services/agent/types';
|
|
|
122
129
|
export type {
|
|
123
130
|
/** Profile interface */
|
|
124
131
|
Profile,
|
|
125
|
-
/** Contact service queue interface */
|
|
126
|
-
ContactServiceQueue,
|
|
127
132
|
/** Response type from getUserUsingCI method */
|
|
128
133
|
AgentResponse,
|
|
129
134
|
/** Response from getDesktopProfileById */
|
|
@@ -109,8 +109,15 @@ export declare const METRIC_EVENT_NAMES: {
|
|
|
109
109
|
readonly UPLOAD_LOGS_FAILED: "Upload Logs Failed";
|
|
110
110
|
readonly WEBSOCKET_DEREGISTER_SUCCESS: "Websocket Deregister Success";
|
|
111
111
|
readonly WEBSOCKET_DEREGISTER_FAIL: "Websocket Deregister Failed";
|
|
112
|
+
readonly WEBSOCKET_EVENT_RECEIVED: "Websocket Event Received";
|
|
112
113
|
readonly AGENT_DEVICE_TYPE_UPDATE_SUCCESS: "Agent Device Type Update Success";
|
|
113
114
|
readonly AGENT_DEVICE_TYPE_UPDATE_FAILED: "Agent Device Type Update Failed";
|
|
115
|
+
readonly ENTRYPOINT_FETCH_SUCCESS: "Entrypoint Fetch Success";
|
|
116
|
+
readonly ENTRYPOINT_FETCH_FAILED: "Entrypoint Fetch Failed";
|
|
117
|
+
readonly ADDRESSBOOK_FETCH_SUCCESS: "AddressBook Fetch Success";
|
|
118
|
+
readonly ADDRESSBOOK_FETCH_FAILED: "AddressBook Fetch Failed";
|
|
119
|
+
readonly QUEUE_FETCH_SUCCESS: "Queue Fetch Success";
|
|
120
|
+
readonly QUEUE_FETCH_FAILED: "Queue Fetch Failed";
|
|
114
121
|
};
|
|
115
122
|
/**
|
|
116
123
|
* Represents the possible metric event names used within the metrics system.
|