@webex/contact-center 3.12.0-next.72 → 3.12.0-next.74

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.
Files changed (188) hide show
  1. package/AGENTS.md +438 -0
  2. package/ai-docs/README.md +131 -0
  3. package/ai-docs/RULES.md +455 -0
  4. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  5. package/ai-docs/patterns/testing-patterns.md +480 -0
  6. package/ai-docs/patterns/typescript-patterns.md +365 -0
  7. package/ai-docs/templates/README.md +102 -0
  8. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  9. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  10. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  11. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  12. package/ai-docs/templates/new-method/00-master.md +80 -0
  13. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  14. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  15. package/ai-docs/templates/new-method/03-tests.md +201 -0
  16. package/ai-docs/templates/new-method/04-validation.md +141 -0
  17. package/ai-docs/templates/new-service/00-master.md +109 -0
  18. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  19. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  20. package/ai-docs/templates/new-service/03-integration.md +178 -0
  21. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  22. package/ai-docs/templates/new-service/05-validation.md +145 -0
  23. package/dist/cc.js +53 -38
  24. package/dist/cc.js.map +1 -1
  25. package/dist/config.js +6 -0
  26. package/dist/config.js.map +1 -1
  27. package/dist/constants.js +14 -1
  28. package/dist/constants.js.map +1 -1
  29. package/dist/index.js +13 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/metrics/behavioral-events.js +26 -0
  32. package/dist/metrics/behavioral-events.js.map +1 -1
  33. package/dist/metrics/constants.js +9 -3
  34. package/dist/metrics/constants.js.map +1 -1
  35. package/dist/services/ApiAiAssistant.js +74 -3
  36. package/dist/services/ApiAiAssistant.js.map +1 -1
  37. package/dist/services/config/Util.js +2 -2
  38. package/dist/services/config/Util.js.map +1 -1
  39. package/dist/services/config/types.js +25 -9
  40. package/dist/services/config/types.js.map +1 -1
  41. package/dist/services/core/Utils.js +74 -27
  42. package/dist/services/core/Utils.js.map +1 -1
  43. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  44. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  45. package/dist/services/core/websocket/types.js.map +1 -1
  46. package/dist/services/index.js +1 -1
  47. package/dist/services/index.js.map +1 -1
  48. package/dist/services/task/Task.js +688 -0
  49. package/dist/services/task/Task.js.map +1 -0
  50. package/dist/services/task/TaskFactory.js +45 -0
  51. package/dist/services/task/TaskFactory.js.map +1 -0
  52. package/dist/services/task/TaskManager.js +725 -612
  53. package/dist/services/task/TaskManager.js.map +1 -1
  54. package/dist/services/task/TaskUtils.js +162 -26
  55. package/dist/services/task/TaskUtils.js.map +1 -1
  56. package/dist/services/task/constants.js +6 -1
  57. package/dist/services/task/constants.js.map +1 -1
  58. package/dist/services/task/digital/Digital.js +77 -0
  59. package/dist/services/task/digital/Digital.js.map +1 -0
  60. package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
  61. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  62. package/dist/services/task/state-machine/actions.js +543 -0
  63. package/dist/services/task/state-machine/actions.js.map +1 -0
  64. package/dist/services/task/state-machine/constants.js +161 -0
  65. package/dist/services/task/state-machine/constants.js.map +1 -0
  66. package/dist/services/task/state-machine/guards.js +340 -0
  67. package/dist/services/task/state-machine/guards.js.map +1 -0
  68. package/dist/services/task/state-machine/index.js +53 -0
  69. package/dist/services/task/state-machine/index.js.map +1 -0
  70. package/dist/services/task/state-machine/types.js +54 -0
  71. package/dist/services/task/state-machine/types.js.map +1 -0
  72. package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
  73. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  74. package/dist/services/task/taskDataNormalizer.js +99 -0
  75. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  76. package/dist/services/task/types.js +168 -16
  77. package/dist/services/task/types.js.map +1 -1
  78. package/dist/services/task/voice/Voice.js +1042 -0
  79. package/dist/services/task/voice/Voice.js.map +1 -0
  80. package/dist/services/task/voice/WebRTC.js +149 -0
  81. package/dist/services/task/voice/WebRTC.js.map +1 -0
  82. package/dist/types/cc.d.ts +19 -18
  83. package/dist/types/config.d.ts +6 -0
  84. package/dist/types/constants.d.ts +14 -1
  85. package/dist/types/index.d.ts +11 -5
  86. package/dist/types/metrics/constants.d.ts +7 -1
  87. package/dist/types/services/ApiAiAssistant.d.ts +11 -3
  88. package/dist/types/services/config/types.d.ts +113 -9
  89. package/dist/types/services/core/Utils.d.ts +23 -10
  90. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  91. package/dist/types/services/core/websocket/types.d.ts +1 -1
  92. package/dist/types/services/index.d.ts +1 -1
  93. package/dist/types/services/task/Task.d.ts +157 -0
  94. package/dist/types/services/task/TaskFactory.d.ts +12 -0
  95. package/dist/types/services/task/TaskUtils.d.ts +46 -2
  96. package/dist/types/services/task/constants.d.ts +5 -0
  97. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  98. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
  99. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  100. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  101. package/dist/types/services/task/state-machine/guards.d.ts +90 -0
  102. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  103. package/dist/types/services/task/state-machine/types.d.ts +267 -0
  104. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  105. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  106. package/dist/types/services/task/types.d.ts +551 -78
  107. package/dist/types/services/task/voice/Voice.d.ts +184 -0
  108. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  109. package/dist/types/types.d.ts +92 -0
  110. package/dist/types/webex.d.ts +1 -0
  111. package/dist/types.js +85 -0
  112. package/dist/types.js.map +1 -1
  113. package/dist/webex.js +14 -2
  114. package/dist/webex.js.map +1 -1
  115. package/package.json +15 -12
  116. package/src/cc.ts +63 -43
  117. package/src/config.ts +6 -0
  118. package/src/constants.ts +14 -1
  119. package/src/index.ts +14 -5
  120. package/src/metrics/ai-docs/AGENTS.md +348 -0
  121. package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
  122. package/src/metrics/behavioral-events.ts +28 -0
  123. package/src/metrics/constants.ts +9 -4
  124. package/src/services/ApiAiAssistant.ts +104 -3
  125. package/src/services/agent/ai-docs/AGENTS.md +238 -0
  126. package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
  127. package/src/services/ai-docs/AGENTS.md +384 -0
  128. package/src/services/config/Util.ts +2 -2
  129. package/src/services/config/ai-docs/AGENTS.md +253 -0
  130. package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
  131. package/src/services/config/types.ts +116 -10
  132. package/src/services/core/Utils.ts +85 -34
  133. package/src/services/core/ai-docs/AGENTS.md +379 -0
  134. package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
  135. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  136. package/src/services/core/websocket/types.ts +1 -1
  137. package/src/services/index.ts +1 -1
  138. package/src/services/task/Task.ts +837 -0
  139. package/src/services/task/TaskFactory.ts +55 -0
  140. package/src/services/task/TaskManager.ts +738 -697
  141. package/src/services/task/TaskUtils.ts +205 -25
  142. package/src/services/task/ai-docs/AGENTS.md +455 -0
  143. package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
  144. package/src/services/task/constants.ts +5 -0
  145. package/src/services/task/digital/Digital.ts +95 -0
  146. package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
  147. package/src/services/task/state-machine/actions.ts +685 -0
  148. package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
  149. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
  150. package/src/services/task/state-machine/constants.ts +172 -0
  151. package/src/services/task/state-machine/guards.ts +406 -0
  152. package/src/services/task/state-machine/index.ts +28 -0
  153. package/src/services/task/state-machine/types.ts +241 -0
  154. package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
  155. package/src/services/task/taskDataNormalizer.ts +137 -0
  156. package/src/services/task/types.ts +654 -85
  157. package/src/services/task/voice/Voice.ts +1267 -0
  158. package/src/services/task/voice/WebRTC.ts +187 -0
  159. package/src/types.ts +112 -1
  160. package/src/utils/AGENTS.md +276 -0
  161. package/src/webex.js +2 -0
  162. package/test/unit/spec/cc.ts +133 -3
  163. package/test/unit/spec/logger-proxy.ts +70 -0
  164. package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
  165. package/test/unit/spec/services/WebCallingService.ts +7 -1
  166. package/test/unit/spec/services/config/index.ts +27 -27
  167. package/test/unit/spec/services/core/Utils.ts +335 -1
  168. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  169. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  170. package/test/unit/spec/services/task/Task.ts +477 -0
  171. package/test/unit/spec/services/task/TaskFactory.ts +62 -0
  172. package/test/unit/spec/services/task/TaskManager.ts +821 -1936
  173. package/test/unit/spec/services/task/TaskUtils.ts +206 -0
  174. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  175. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
  176. package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
  177. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  178. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
  179. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  180. package/test/unit/spec/services/task/voice/Voice.ts +631 -0
  181. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  182. package/umd/contact-center.min.js +2 -2
  183. package/umd/contact-center.min.js.map +1 -1
  184. package/dist/services/task/index.js +0 -1530
  185. package/dist/services/task/index.js.map +0 -1
  186. package/dist/types/services/task/index.d.ts +0 -650
  187. package/src/services/task/index.ts +0 -1806
  188. package/test/unit/spec/services/task/index.ts +0 -2205
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_Utils","_types","_Task","_interopRequireDefault","_loggerProxy","_MetricsManager","_constants2","_stateMachine","_TaskUtils","e","__esModule","default","Voice","Task","constructor","contact","data","callOptions","wrapupData","agentId","resolvedOptions","isEndTaskEnabled","isEndConsultEnabled","voiceVariant","VOICE_VARIANT","PSTN","isRecordingEnabled","getStateMachineSnapshot","stateMachineService","getSnapshot","accept","unsupportedMethodError","METHODS","ACCEPT","decline","REJECT","hold","holdResume","resume","snapshot","snapshotState","value","mainInteractionId","interaction","interactionId","mainMediaResource","media","mediaResourceId","mediaHoldState","isHold","shouldHold","TaskState","HELD","CONNECTED","state","currentState","matches","error","Error","LoggerProxy","module","CC_FILE","method","HOLD_RESUME","CONFERENCING","initiatingEvent","TaskEvent","HOLD_INITIATED","UNHOLD_INITIATED","send","type","info","successEvt","failedEvt","METRIC_EVENT_NAMES","TASK_HOLD_SUCCESS","TASK_HOLD_FAILED","TASK_RESUME_SUCCESS","TASK_RESUME_FAILED","metricsManager","timeEvent","response","HOLD_SUCCESS","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","log","trackingId","unHold","UNHOLD_SUCCESS","failureEvent","HOLD_FAILED","UNHOLD_FAILED","reason","toString","detailedError","getErrorDetails","getCommonTrackingFieldForAQMResponseFailed","details","pauseRecording","recordingControlsAvailable","recordingInProgress","context","recordingActive","Boolean","TASK_PAUSE_RECORDING_SUCCESS","TASK_PAUSE_RECORDING_FAILED","result","resumeRecording","resumeRecordingPayload","recordingPaused","TASK_RESUME_RECORDING_SUCCESS","TASK_RESUME_RECORDING_FAILED","autoResumed","consult","consultPayload","canConsult","CONSULT","destination","to","destinationType","requestInteractionId","TASK_CONSULT_START_SUCCESS","TASK_CONSULT_START_FAILED","CONSULT_SUCCESS","taskData","CONSULT_FAILED","endConsult","consultEndPayload","TASK_CONSULT_END_SUCCESS","TASK_CONSULT_END_FAILED","consultEnd","transfer","payload","TRANSFER_CALL","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","normalizedDestinationType","toLowerCase","CONSULT_TRANSFER_DESTINATION_TYPE","QUEUE","consultContext","destAgent","consultDestinationAgentId","destAgentId","AGENT","consultTransfer","isConsultTransfer","err","consultConference","derivedDestAgentId","calculateDestAgentId","derivedDestType","calculateDestType","resolvedDestinationType","consultDestinationType","consultationData","MERGE_TO_CONFERENCE","CONSULT_CONFERENCE","paramsDataForConferenceV2","buildConsultConferenceParamData","CONFERENCE_START","TASK_CONFERENCE_START_SUCCESS","CONFERENCE_FAILED","failedParamsData","TASK_CONFERENCE_START_FAILED","exitConference","isConferencingState","isConferenceInProgressFromData","getIsConferenceInProgress","EXIT_CONFERENCE","TASK_CONFERENCE_EXIT_SUCCESS","TASK_CONFERENCE_EXIT_FAILED","EXIT_CONFERENCE_SUCCESS","EXIT_CONFERENCE_FAILED","transferConference","isValidState","CONSULTING","TRANSFER_CONFERENCE","TASK_CONFERENCE_TRANSFER_SUCCESS","TASK_CONFERENCE_TRANSFER_FAILED","conferenceTransfer","TRANSFER_CONFERENCE_SUCCESS","TRANSFER_CONFERENCE_FAILED","switchCall","consultMediaResourceId","getConsultMediaResourceId","isOnConsultLeg","consultCallHeld","targetEvent","SWITCH_TO_MAIN_CALL","SWITCH_TO_CONSULT","revertEvent","TASK_SWITCH_CALL_SUCCESS","TASK_SWITCH_CALL_FAILED","direction","getChannelSpecificActionOverrides","baseOverrides","emitTaskHold","createEmitSelfAction","TASK_EVENTS","TASK_HOLD","updateTaskData","emitTaskResume","TASK_RESUME","emitTaskRecordingStarted","TASK_RECORDING_STARTED","emitTaskRecordingPaused","TASK_RECORDING_PAUSED","emitTaskRecordingPauseFailed","TASK_RECORDING_PAUSE_FAILED","emitTaskRecordingResumed","TASK_RECORDING_RESUMED","emitTaskRecordingResumeFailed","TASK_RECORDING_RESUME_FAILED","emitTaskParticipantJoined","TASK_PARTICIPANT_JOINED","emitTaskParticipantLeft","TASK_PARTICIPANT_LEFT","emitTaskConferenceStarted","TASK_CONFERENCE_STARTED","emitTaskConferenceEnded","TASK_CONFERENCE_ENDED","emitTaskConferenceFailed","TASK_CONFERENCE_FAILED","emitTaskExitConference","TASK_EXIT_CONFERENCE","emitTaskTransferConference","TASK_TRANSFER_CONFERENCE","emitTaskSwitchCall","TASK_SWITCH_CALL","emitTaskTransferConferenceFailed","emitTaskOutdialFailed","event","emit","TASK_OUTDIAL_FAILED","exports"],"sources":["Voice.ts"],"sourcesContent":["import {CC_FILE, METHODS} from '../../../constants';\nimport {\n buildConsultConferenceParamData,\n calculateDestAgentId,\n calculateDestType,\n getErrorDetails,\n} from '../../core/Utils';\nimport routingContact from '../contact';\nimport {\n ConsultPayload,\n ConsultEndPayload,\n ResumeRecordingPayload,\n TaskData,\n TaskResponse,\n IVoice,\n VoiceUIControlOptions,\n TransferPayLoad,\n ConsultTransferPayLoad,\n consultConferencePayloadData,\n CONSULT_TRANSFER_DESTINATION_TYPE,\n TASK_EVENTS,\n VOICE_VARIANT,\n} from '../types';\nimport Task from '../Task';\nimport LoggerProxy from '../../../logger-proxy';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {TaskState, TaskEvent, TaskActionArgs} from '../state-machine';\nimport {WrapupData} from '../../config/types';\nimport {getConsultMediaResourceId, getIsConferenceInProgress} from '../TaskUtils';\n\nexport default class Voice extends Task implements IVoice {\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n callOptions?: VoiceUIControlOptions,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n const resolvedOptions = {\n isEndTaskEnabled: callOptions?.isEndTaskEnabled ?? true,\n isEndConsultEnabled: callOptions?.isEndConsultEnabled ?? true,\n voiceVariant: callOptions?.voiceVariant ?? VOICE_VARIANT.PSTN,\n isRecordingEnabled: callOptions?.isRecordingEnabled ?? true,\n };\n\n super(\n contact,\n data,\n {\n ...resolvedOptions,\n },\n wrapupData,\n agentId\n );\n }\n\n private getStateMachineSnapshot() {\n return this.stateMachineService?.getSnapshot?.();\n }\n\n /**\n * This method is used to accept the task.\n * It is expected to be overridden by child classes.\n * @returns Promise<TaskResponse>\n * @throws Error\n */\n public async accept(): Promise<TaskResponse> {\n super.unsupportedMethodError(METHODS.ACCEPT);\n }\n\n /**\n * This method is used to decline the task.\n * It is expected to be overridden by child classes.\n * @returns Promise<TaskResponse>\n * @throws Error\n */\n public async decline(): Promise<TaskResponse> {\n super.unsupportedMethodError(METHODS.REJECT);\n }\n\n /**\n * This is used to hold the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.hold().then(()=>{}).catch(()=>{})\n * ```\n * */\n public async hold(): Promise<TaskResponse> {\n return this.holdResume();\n }\n\n /**\n * This is used to resume the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.resume().then(()=>{}).catch(()=>{})\n * ```\n * */\n public async resume(): Promise<TaskResponse> {\n return this.holdResume();\n }\n\n /**\n * This is used to hold or resume the task.\n * @param isHeld: boolean - true to hold the task, false to resume it\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.holdResume(isHeld: true).then(()=>{}).catch(()=>{})\n * ```\n * */\n public async holdResume(): Promise<TaskResponse> {\n /* \n Determine if the task is being held or resumed based on the media resource state\n If the media resource is not found, default to resuming the task\n */\n const snapshot = this.getStateMachineSnapshot();\n const snapshotState = snapshot?.value as TaskState | undefined;\n const mainInteractionId = this.data.interaction?.mainInteractionId || this.data.interactionId;\n const mainMediaResource =\n this.data.interaction?.media?.[mainInteractionId]?.mediaResourceId ||\n this.data.mediaResourceId;\n const mediaHoldState =\n this.data.interaction?.media?.[mainInteractionId]?.isHold ??\n this.data.interaction.media?.[mainMediaResource]?.isHold;\n let shouldHold = !(mediaHoldState ?? false);\n if (snapshotState === TaskState.HELD) {\n shouldHold = false;\n } else if (snapshotState === TaskState.CONNECTED) {\n shouldHold = true;\n }\n\n // Validate operation is allowed in current state\n const state = snapshot;\n if (state) {\n const currentState = state.value as TaskState;\n if (shouldHold) {\n if (!state.matches(TaskState.CONNECTED)) {\n const error = new Error(`Cannot hold call in current state: ${currentState}`);\n LoggerProxy.error('Hold operation not allowed', {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n } else if (\n !state.matches(TaskState.HELD) &&\n !(state.matches(TaskState.CONFERENCING) && mediaHoldState === true)\n ) {\n const error = new Error(`Cannot resume call in current state: ${currentState}`);\n LoggerProxy.error('Resume operation not allowed', {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n // Send initiating event to transition to intermediate state\n if (this.stateMachineService) {\n const initiatingEvent = shouldHold ? TaskEvent.HOLD_INITIATED : TaskEvent.UNHOLD_INITIATED;\n this.stateMachineService.send({\n type: initiatingEvent,\n mediaResourceId: mainMediaResource,\n });\n }\n\n LoggerProxy.info(`${shouldHold ? 'Holding' : 'Resuming'} task`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n const [successEvt, failedEvt] = shouldHold\n ? [METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS, METRIC_EVENT_NAMES.TASK_HOLD_FAILED]\n : [METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS, METRIC_EVENT_NAMES.TASK_RESUME_FAILED];\n\n this.metricsManager.timeEvent([successEvt, failedEvt]);\n\n try {\n let response: TaskResponse;\n if (shouldHold) {\n response = await this.contact.hold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: mainMediaResource},\n });\n\n // Send success event to complete the transition\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.HOLD_SUCCESS,\n mediaResourceId: mainMediaResource,\n });\n }\n\n this.metricsManager.trackEvent(\n successEvt,\n {\n taskId: this.data.interactionId,\n mediaResourceId: mainMediaResource,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n LoggerProxy.log(`Task placed on hold successfully`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n } else {\n response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: mainMediaResource},\n });\n\n // Send success event to complete the transition\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.UNHOLD_SUCCESS,\n mediaResourceId: mainMediaResource,\n });\n }\n\n this.metricsManager.trackEvent(\n successEvt,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId: mainMediaResource,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n LoggerProxy.log(`Task resumed successfully`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n }\n\n return response;\n } catch (error) {\n const failureEvent = shouldHold ? TaskEvent.HOLD_FAILED : TaskEvent.UNHOLD_FAILED;\n this.stateMachineService.send({\n type: failureEvent,\n reason: error.toString(),\n mediaResourceId: this.data.mediaResourceId,\n });\n\n const {error: detailedError} = getErrorDetails(error, 'holdResume', CC_FILE);\n this.metricsManager.trackEvent(\n failedEvt,\n shouldHold\n ? {\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n }\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 * This is used to pause the call recording\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.pauseRecording().then(()=>{}).catch(()=>{});\n * ```\n */\n public async pauseRecording(): Promise<TaskResponse> {\n // Validate recording is active\n const state = this.getStateMachineSnapshot();\n if (state) {\n const {recordingControlsAvailable, recordingInProgress} = state.context as {\n recordingControlsAvailable?: boolean;\n recordingInProgress?: boolean;\n };\n const recordingActive = Boolean(recordingControlsAvailable && recordingInProgress);\n if (!recordingActive) {\n const error = new Error('Recording is not active or already paused');\n LoggerProxy.error('Pause recording operation not allowed', {\n module: CC_FILE,\n method: 'pauseRecording',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n try {\n LoggerProxy.info(`Pausing recording`, {\n module: CC_FILE,\n method: 'pauseRecording',\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n ]);\n const result = await this.contact.pauseRecording({interactionId: this.data.interactionId});\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 LoggerProxy.log(`Recording paused successfully`, {\n module: CC_FILE,\n method: 'pauseRecording',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'pauseRecording', CC_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 * This is used to pause the call recording\n * @param resumeRecordingPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.resumeRecording(resumeRecordingPayload).then(()=>{}).catch(()=>{});\n * ```\n */\n public async resumeRecording(\n resumeRecordingPayload?: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n // Validate recording is paused\n const state = this.getStateMachineSnapshot();\n if (state) {\n const {recordingControlsAvailable, recordingInProgress} = state.context as {\n recordingControlsAvailable?: boolean;\n recordingInProgress?: boolean;\n };\n const recordingPaused = Boolean(recordingControlsAvailable && !recordingInProgress);\n if (!recordingPaused) {\n const error = new Error('Recording is not paused');\n LoggerProxy.error('Resume recording operation not allowed', {\n module: CC_FILE,\n method: 'resumeRecording',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n try {\n LoggerProxy.info(`Resuming recording`, {\n module: CC_FILE,\n method: 'resumeRecording',\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n ]);\n resumeRecordingPayload ??= {autoResumed: false};\n\n const result = await this.contact.resumeRecording({\n interactionId: this.data.interactionId,\n data: resumeRecordingPayload,\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 LoggerProxy.log(`Recording resumed successfully`, {\n module: CC_FILE,\n method: 'resumeRecording',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'resumeRecording', CC_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 * This is used to consult the task\n * @param consultPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * const consultPayload = {\n * destination: 'myBuddyAgentId',\n * destinationType: DESTINATION_TYPE.AGENT,\n * }\n * task.consult(consultPayload).then(()=>{}).catch(()=>{});\n * ```\n * */\n public async consult(consultPayload?: ConsultPayload): Promise<TaskResponse> {\n // Validate consult is allowed\n const state = this.getStateMachineSnapshot();\n const canConsult =\n state &&\n (state.matches(TaskState.CONNECTED) ||\n state.matches(TaskState.HELD) ||\n state.matches(TaskState.CONFERENCING));\n\n if (!canConsult) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot initiate consult in ${currentState} state`);\n LoggerProxy.error('Consult operation not allowed', {\n module: CC_FILE,\n method: 'consult',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send initiating event to transition to CONSULT_INITIATING state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Starting consult`, {\n module: CC_FILE,\n method: 'consult',\n interactionId: requestInteractionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n ]);\n const result = await this.contact.consult({\n interactionId: requestInteractionId,\n data: consultPayload,\n });\n\n // Send success event to transition to CONSULTING state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT_SUCCESS,\n taskData: result.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult successfully initiated to ${consultPayload.to}`, {\n module: CC_FILE,\n method: 'consult',\n trackingId: result.trackingId,\n interactionId: requestInteractionId,\n });\n\n return result;\n } catch (error) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT_FAILED,\n reason: error.toString(),\n });\n\n const {error: detailedError} = getErrorDetails(error, 'consult', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\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 * This is used to end the consult session on the task.\n * @param consultEndPayload - Payload indicating consult end flags and identifiers\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.endConsult({\n * isConsult: true,\n * queueId: 'myQueueId',\n * taskId: 'taskId',\n * });\n * ```\n */\n public async endConsult(consultEndPayload?: ConsultEndPayload): Promise<TaskResponse> {\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Ending consult`, {\n module: CC_FILE,\n method: 'endConsult',\n interactionId: requestInteractionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n ]);\n const result = await this.contact.consultEnd({\n interactionId: requestInteractionId,\n data: consultEndPayload,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult ended successfully`, {\n module: CC_FILE,\n method: 'endConsult',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'endConsult', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to transfer the task.\n * @param payload - Transfer payload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.transfer({\n * to: 'destinationId',\n * destinationType: DESTINATION_TYPE.AGENT,\n * consult: true, // Optional, if true will perform a consult transfer else blind transfer\n * });\n * ```\n */\n public async transfer(payload: TransferPayLoad): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Transferring task to ${payload.to}`, {\n module: CC_FILE,\n method: METHODS.TRANSFER_CALL,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n\n // consult transfer path\n if (this.data.interaction.state === 'consulting') {\n const normalizedDestinationType =\n payload.destinationType === 'Agent' || payload.destinationType === 'Queue'\n ? (payload.destinationType.toLowerCase() as ConsultTransferPayLoad['destinationType'])\n : payload.destinationType;\n let consultPayload: ConsultTransferPayLoad = {\n to: payload.to,\n destinationType: normalizedDestinationType,\n };\n\n if (normalizedDestinationType === CONSULT_TRANSFER_DESTINATION_TYPE.QUEUE) {\n const consultContext = this.getStateMachineSnapshot()?.context;\n const destAgent = consultContext?.consultDestinationAgentId || this.data.destAgentId;\n if (!destAgent) {\n throw new Error('No agent has accepted this queue consult yet');\n }\n consultPayload = {\n to: destAgent,\n destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.AGENT,\n };\n }\n\n const result = await this.contact.consultTransfer({\n interactionId: this.data.interactionId,\n data: consultPayload,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n isConsultTransfer: true,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult transfer completed successfully to ${consultPayload.to}`, {\n module: CC_FILE,\n method: METHODS.TRANSFER_CALL,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n }\n\n // standard blind transfer\n return await super.transfer({\n to: payload.to,\n destinationType: payload.destinationType,\n });\n } catch (err) {\n const {error: detailedError} = getErrorDetails(err, METHODS.TRANSFER_CALL, CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: payload.to,\n destinationType: payload.destinationType,\n isConsultTransfer: this.data.interaction.state === 'consulting',\n error: err.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(err.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Start a consult conference, merging main and consult calls.\n */\n public async consultConference(): Promise<TaskResponse> {\n const derivedDestAgentId =\n this.data.interaction && this.data.agentId\n ? calculateDestAgentId(this.data.interaction, this.data.agentId)\n : '';\n const derivedDestType =\n this.data.interaction && this.data.agentId\n ? calculateDestType(this.data.interaction, this.data.agentId)\n : '';\n\n // derivedDestType is most reliable as it inspects live interaction participants\n const resolvedDestinationType =\n derivedDestType ||\n this.getStateMachineSnapshot()?.context?.consultDestinationType ||\n this.data.destinationType ||\n 'agent';\n\n const consultationData: consultConferencePayloadData = {\n agentId: this.data.agentId,\n destinationType: resolvedDestinationType,\n // derivedDestAgentId is most reliable as it resolves epId for EP_DN\n // and agent ID for regular agents from live interaction data\n destAgentId:\n derivedDestAgentId ||\n this.getStateMachineSnapshot()?.context?.consultDestinationAgentId ||\n this.data.destAgentId,\n };\n\n // Send state machine event to transition to CONF_INITIATING\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.MERGE_TO_CONFERENCE,\n });\n }\n\n try {\n if (!consultationData.destAgentId) {\n throw new Error('Unable to determine consult destination for conference');\n }\n\n LoggerProxy.info(`Initiating consult conference to ${consultationData.destAgentId}`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n const paramsDataForConferenceV2 = buildConsultConferenceParamData(\n consultationData,\n this.data.interactionId\n );\n\n const response = await this.contact.consultConference({\n interactionId: paramsDataForConferenceV2.interactionId,\n data: paramsDataForConferenceV2.data,\n });\n\n // Send success event to transition to CONFERENCING\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONFERENCE_START,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: paramsDataForConferenceV2.data.to,\n destinationType: paramsDataForConferenceV2.data.destinationType,\n agentId: paramsDataForConferenceV2.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult conference started successfully`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event to revert state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, METHODS.CONSULT_CONFERENCE, CC_FILE);\n\n const failedParamsData = buildConsultConferenceParamData(\n consultationData,\n this.data.interactionId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_START_FAILED,\n {\n taskId: this.data.interactionId,\n destination: failedParamsData.data.to,\n destinationType: failedParamsData.data.destinationType,\n agentId: failedParamsData.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to start consult conference`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Exit from a conference call.\n * Per conference-spec.md:\n * - Primary agent exits to wrapup\n * - Non-primary agent exits to available/connected\n * - Other participants continue the call\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in conference or exit fails\n * @example\n * ```typescript\n * task.exitConference().then(() => {}).catch(() => {});\n * ```\n */\n public async exitConference(): Promise<TaskResponse> {\n // Validate we're in conference state OR conference is in progress per task data\n // This handles cases where:\n // 1. State machine is in CONFERENCING state\n // 2. State machine is in CONNECTED but conference is active (e.g., ownership transferred)\n const state = this.getStateMachineSnapshot();\n const isConferencingState = state?.matches(TaskState.CONFERENCING);\n\n const isConferenceInProgressFromData = this.data ? getIsConferenceInProgress(this.data) : false;\n\n if (!state || (!isConferencingState && !isConferenceInProgressFromData)) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot exit conference in ${currentState} state`);\n LoggerProxy.error('Exit conference operation not allowed', {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send state machine event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE,\n agentId: this.data.agentId,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Exiting conference`, {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: requestInteractionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED,\n ]);\n\n const response = await this.contact.exitConference({\n interactionId: requestInteractionId,\n });\n\n // Send success event to transition state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE_SUCCESS,\n taskData: response.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Successfully exited conference`, {\n module: CC_FILE,\n method: 'exitConference',\n trackingId: response.trackingId,\n interactionId: requestInteractionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, 'exitConference', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to exit conference`, {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: requestInteractionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Transfer the conference to another participant.\n * Per conference-spec.md: Only primary agent can transfer conference.\n * After transfer, the transferring agent exits to wrapup.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in conference or transfer fails\n * @example\n * ```typescript\n * task.transferConference().then(() => {}).catch(() => {});\n * ```\n */\n public async transferConference(): Promise<TaskResponse> {\n // Validate we're in conference or consulting state\n // CONSULTING is allowed because agent can transfer conference while consulting\n // (transfers ownership to the consulted agent)\n const state = this.getStateMachineSnapshot();\n const isValidState =\n state && (state.matches(TaskState.CONFERENCING) || state.matches(TaskState.CONSULTING));\n if (!isValidState) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot transfer conference in ${currentState} state`);\n LoggerProxy.error('Transfer conference operation not allowed', {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send state machine event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE,\n agentId: this.data.agentId,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Transferring conference`, {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: requestInteractionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_FAILED,\n ]);\n\n const response = await this.contact.conferenceTransfer({\n interactionId: requestInteractionId,\n });\n\n // Send success event to transition state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE_SUCCESS,\n taskData: response.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Successfully transferred conference`, {\n module: CC_FILE,\n method: 'transferConference',\n trackingId: response.trackingId,\n interactionId: requestInteractionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, 'transferConference', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to transfer conference`, {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: requestInteractionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Toggle between consult call and main call during consulting.\n * If on consult leg (consultCallHeld = false), switches to main call by holding consult.\n * If on main call (consultCallHeld = true), switches to consult by resuming consult.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in CONSULTING state or no consult media resource\n * @example\n * ```typescript\n * await task.switchCall();\n * ```\n */\n public async switchCall(): Promise<TaskResponse> {\n // Validate we're in CONSULTING state\n const state = this.getStateMachineSnapshot();\n if (!state?.matches(TaskState.CONSULTING)) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot switch call in ${currentState} state`);\n LoggerProxy.error('Switch call operation not allowed', {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Validate we have a consult media resource\n const consultMediaResourceId = getConsultMediaResourceId(\n this.data.interaction,\n this.data.consultMediaResourceId,\n this.data.agentId\n );\n if (!consultMediaResourceId) {\n const error = new Error('No consult media resource available');\n LoggerProxy.error('Switch call failed - no consult media resource', {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n const context = state.context;\n const isOnConsultLeg = !context.consultCallHeld;\n\n // Determine direction and send appropriate state machine event\n const targetEvent = isOnConsultLeg\n ? TaskEvent.SWITCH_TO_MAIN_CALL\n : TaskEvent.SWITCH_TO_CONSULT;\n const revertEvent = isOnConsultLeg\n ? TaskEvent.SWITCH_TO_CONSULT\n : TaskEvent.SWITCH_TO_MAIN_CALL;\n\n if (this.stateMachineService) {\n this.stateMachineService.send({type: targetEvent});\n }\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS,\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED,\n ]);\n\n try {\n if (isOnConsultLeg) {\n const response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: this.data.mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS,\n {\n taskId: this.data.interactionId,\n direction: 'toMainCall',\n mediaResourceId: consultMediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Switched to main call successfully`, {\n module: CC_FILE,\n method: 'switchCall',\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\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_SWITCH_CALL_SUCCESS,\n {\n taskId: this.data.interactionId,\n direction: 'toConsultCall',\n mediaResourceId: consultMediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Switched to consult call successfully`, {\n module: CC_FILE,\n method: 'switchCall',\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n if (this.stateMachineService) {\n this.stateMachineService.send({type: revertEvent});\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED,\n {\n taskId: this.data.interactionId,\n direction: isOnConsultLeg ? 'toMainCall' : 'toConsultCall',\n mediaResourceId: consultMediaResourceId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n\n const {error: detailedError} = getErrorDetails(error, 'switchCall', CC_FILE);\n LoggerProxy.error(`Failed to switch call`, {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw detailedError;\n }\n }\n\n protected override getChannelSpecificActionOverrides() {\n const baseOverrides = super.getChannelSpecificActionOverrides();\n\n return {\n ...baseOverrides,\n emitTaskHold: this.createEmitSelfAction(TASK_EVENTS.TASK_HOLD, {updateTaskData: true}),\n emitTaskResume: this.createEmitSelfAction(TASK_EVENTS.TASK_RESUME, {updateTaskData: true}),\n emitTaskRecordingStarted: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_STARTED, {\n updateTaskData: true,\n }),\n emitTaskRecordingPaused: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_PAUSED, {\n updateTaskData: true,\n }),\n emitTaskRecordingPauseFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED,\n {updateTaskData: true}\n ),\n emitTaskRecordingResumed: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_RESUMED, {\n updateTaskData: true,\n }),\n emitTaskRecordingResumeFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_RECORDING_RESUME_FAILED,\n {updateTaskData: true}\n ),\n // Conference event emitters\n emitTaskParticipantJoined: this.createEmitSelfAction(TASK_EVENTS.TASK_PARTICIPANT_JOINED, {\n updateTaskData: true,\n }),\n emitTaskParticipantLeft: this.createEmitSelfAction(TASK_EVENTS.TASK_PARTICIPANT_LEFT, {\n updateTaskData: true,\n }),\n emitTaskConferenceStarted: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_STARTED, {\n updateTaskData: true,\n }),\n emitTaskConferenceEnded: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_ENDED, {\n updateTaskData: true,\n }),\n emitTaskConferenceFailed: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_FAILED, {\n updateTaskData: true,\n }),\n emitTaskExitConference: this.createEmitSelfAction(TASK_EVENTS.TASK_EXIT_CONFERENCE, {\n updateTaskData: false,\n }),\n emitTaskTransferConference: this.createEmitSelfAction(TASK_EVENTS.TASK_TRANSFER_CONFERENCE, {\n updateTaskData: false,\n }),\n emitTaskSwitchCall: this.createEmitSelfAction(TASK_EVENTS.TASK_SWITCH_CALL, {\n updateTaskData: false,\n }),\n emitTaskTransferConferenceFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CONFERENCE_TRANSFER_FAILED,\n {updateTaskData: true}\n ),\n emitTaskOutdialFailed: ({event}: TaskActionArgs) => {\n if (event && 'taskData' in event && event.taskData) {\n this.updateTaskData(event.taskData as TaskData);\n }\n const reason = (event as {reason?: string})?.reason || 'Outdial failed';\n this.emit(TASK_EVENTS.TASK_OUTDIAL_FAILED, reason);\n },\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _calling = require("@webex/calling");
8
+ var _constants = require("../../../constants");
9
+ var _Utils = require("../../core/Utils");
10
+ var _types = require("../types");
11
+ var _Voice = _interopRequireDefault(require("./Voice"));
12
+ var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
13
+ var _constants2 = require("../../../metrics/constants");
14
+ var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ class WebRTC extends _Voice.default {
17
+ constructor(contact, webCallingService, data, callOptions, wrapupData, agentId) {
18
+ const mergedCallOptions = {
19
+ ...callOptions,
20
+ voiceVariant: _types.VOICE_VARIANT.WEBRTC
21
+ };
22
+ super(contact, data, mergedCallOptions, wrapupData, agentId);
23
+ this.webCallingService = webCallingService;
24
+ this.registerWebCallListeners();
25
+ }
26
+ registerWebCallListeners() {
27
+ this.webCallingService.on(_calling.CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);
28
+ }
29
+ handleRemoteMedia = track => {
30
+ this.emit(_types.TASK_EVENTS.TASK_MEDIA, track);
31
+ };
32
+
33
+ /**
34
+ * This method is used to unregister the web call listeners.
35
+ * @returns void
36
+ * @example
37
+ * ```typescript
38
+ * task.unregisterWebCallListeners();
39
+ * ```
40
+ */
41
+ unregisterWebCallListeners() {
42
+ this.webCallingService.off(_calling.CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);
43
+ }
44
+
45
+ /**
46
+ * This is used for incoming task accept by agent.
47
+ *
48
+ * @returns Promise<TaskResponse>
49
+ * @throws Error
50
+ * @example
51
+ * ```typescript
52
+ * task.accept().then(()=>{}).catch(()=>{})
53
+ * ```
54
+ */
55
+ async accept() {
56
+ _loggerProxy.default.log(`Accepting WebRTC task for taskId:${this.data.interactionId}`, {
57
+ module: 'WebRTC',
58
+ method: 'accept'
59
+ });
60
+ try {
61
+ this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED]);
62
+ const constraints = {
63
+ audio: true
64
+ };
65
+ const localStream = await navigator.mediaDevices.getUserMedia(constraints);
66
+ const audioTrack = localStream.getAudioTracks()[0];
67
+ this.localAudioStream = new _calling.LocalMicrophoneStream(new MediaStream([audioTrack]));
68
+ this.webCallingService.answerCall(this.localAudioStream, this.data.interactionId);
69
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, {
70
+ taskId: this.data.interactionId,
71
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponse(this.data)
72
+ }, ['operational', 'behavioral', 'business']);
73
+ return Promise.resolve();
74
+ } catch (error) {
75
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED, {
76
+ taskId: this.data.interactionId,
77
+ error: error.toString(),
78
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
79
+ }, ['operational', 'behavioral', 'business']);
80
+ const {
81
+ error: detailedError
82
+ } = (0, _Utils.getErrorDetails)(error, 'accept', _constants.CC_FILE);
83
+ throw detailedError;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * This is used for the incoming task decline by agent.
89
+ *
90
+ * @returns Promise<TaskResponse>
91
+ * @throws Error
92
+ * @example
93
+ * ```typescript
94
+ * task.decline().then(()=>{}).catch(()=>{})
95
+ * ```
96
+ */
97
+ async decline() {
98
+ _loggerProxy.default.log(`Declining WebRTC task for taskId:${this.data.interactionId}`, {
99
+ module: 'WebRTC',
100
+ method: 'decline'
101
+ });
102
+ try {
103
+ this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_DECLINE_FAILED]);
104
+ this.webCallingService.declineCall(this.data.interactionId);
105
+ this.unregisterWebCallListeners();
106
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS, {
107
+ taskId: this.data.interactionId
108
+ }, ['operational', 'behavioral']);
109
+ return Promise.resolve();
110
+ } catch (error) {
111
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_FAILED, {
112
+ taskId: this.data.interactionId,
113
+ error: error.toString(),
114
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
115
+ }, ['operational', 'behavioral']);
116
+ const {
117
+ error: detailedError
118
+ } = (0, _Utils.getErrorDetails)(error, 'decline', _constants.CC_FILE);
119
+ throw detailedError;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * This is used for the placing the call in mute or unmute by the agent.
125
+ *
126
+ * @throws Error
127
+ * @example
128
+ * ```typescript
129
+ * task.toggleMute().then(()=>{}).catch(()=>{})
130
+ * ```
131
+ */
132
+ async toggleMute() {
133
+ _loggerProxy.default.log(`Toggling mute WebRTC task for taskId:${this.data.interactionId}`, {
134
+ module: 'WebRTC',
135
+ method: 'toggleMute'
136
+ });
137
+ try {
138
+ this.webCallingService.muteUnmuteCall(this.localAudioStream);
139
+ return Promise.resolve();
140
+ } catch (error) {
141
+ const {
142
+ error: detailedError
143
+ } = (0, _Utils.getErrorDetails)(error, 'mute', _constants.CC_FILE);
144
+ throw detailedError;
145
+ }
146
+ }
147
+ }
148
+ exports.default = WebRTC;
149
+ //# sourceMappingURL=WebRTC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_calling","require","_constants","_Utils","_types","_Voice","_interopRequireDefault","_MetricsManager","_constants2","_loggerProxy","e","__esModule","default","WebRTC","Voice","constructor","contact","webCallingService","data","callOptions","wrapupData","agentId","mergedCallOptions","voiceVariant","VOICE_VARIANT","WEBRTC","registerWebCallListeners","on","CALL_EVENT_KEYS","REMOTE_MEDIA","handleRemoteMedia","track","emit","TASK_EVENTS","TASK_MEDIA","unregisterWebCallListeners","off","accept","LoggerProxy","log","interactionId","module","method","metricsManager","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","constraints","audio","localStream","navigator","mediaDevices","getUserMedia","audioTrack","getAudioTracks","localAudioStream","LocalMicrophoneStream","MediaStream","answerCall","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","Promise","resolve","error","toString","getCommonTrackingFieldForAQMResponseFailed","details","detailedError","getErrorDetails","CC_FILE","decline","TASK_DECLINE_SUCCESS","TASK_DECLINE_FAILED","declineCall","toggleMute","muteUnmuteCall","exports"],"sources":["WebRTC.ts"],"sourcesContent":["import {LocalMicrophoneStream, CALL_EVENT_KEYS} from '@webex/calling';\nimport {CC_FILE} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport routingContact from '../contact';\nimport {\n TaskData,\n TaskResponse,\n TASK_EVENTS,\n IWebRTC,\n VoiceUIControlOptions,\n VOICE_VARIANT,\n} from '../types';\nimport Voice from './Voice';\nimport WebCallingService from '../../WebCallingService';\nimport {WrapupData} from '../../config/types';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport LoggerProxy from '../../../logger-proxy';\n\nexport default class WebRTC extends Voice implements IWebRTC {\n private localAudioStream: LocalMicrophoneStream;\n private webCallingService: WebCallingService;\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n data: TaskData,\n callOptions?: VoiceUIControlOptions,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n const mergedCallOptions: VoiceUIControlOptions = {\n ...callOptions,\n voiceVariant: VOICE_VARIANT.WEBRTC,\n };\n\n super(contact, data, mergedCallOptions, wrapupData, agentId);\n this.webCallingService = webCallingService;\n this.registerWebCallListeners();\n }\n\n private registerWebCallListeners() {\n this.webCallingService.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n private handleRemoteMedia = (track: MediaStreamTrack) => {\n this.emit(TASK_EVENTS.TASK_MEDIA, track);\n };\n\n /**\n * This method is used to unregister the web call listeners.\n * @returns void\n * @example\n * ```typescript\n * task.unregisterWebCallListeners();\n * ```\n */\n public unregisterWebCallListeners() {\n this.webCallingService.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * This is used for incoming task accept by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.accept().then(()=>{}).catch(()=>{})\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n LoggerProxy.log(`Accepting WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'accept',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n const constraints = {audio: true};\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\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 Promise.resolve();\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n const {error: detailedError} = getErrorDetails(error, 'accept', CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * This is used for the incoming task decline by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.decline().then(()=>{}).catch(()=>{})\n * ```\n */\n public async decline(): Promise<TaskResponse> {\n LoggerProxy.log(`Declining WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'decline',\n });\n try {\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 return Promise.resolve();\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral']\n );\n const {error: detailedError} = getErrorDetails(error, 'decline', CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * This is used for the placing the call in mute or unmute by the agent.\n *\n * @throws Error\n * @example\n * ```typescript\n * task.toggleMute().then(()=>{}).catch(()=>{})\n * ```\n */\n public async toggleMute() {\n LoggerProxy.log(`Toggling mute WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'toggleMute',\n });\n try {\n this.webCallingService.muteUnmuteCall(this.localAudioStream);\n\n return Promise.resolve();\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'mute', CC_FILE);\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ import { StateChange, Logout } from './services/agent/types';
12
12
  import { Profile, OutdialAniEntriesResponse, OutdialAniParams } from './services/config/types';
13
13
  import { TaskResponse, PreviewContactPayload } from './services/task/types';
14
14
  import { AddressBook } from './services/AddressBook';
15
+ import { Queue } from './services/Queue';
15
16
  import { ApiAIAssistant } from './services/ApiAiAssistant';
16
17
  import type { EntryPointListResponse, EntryPointSearchParams, ContactServiceQueuesResponse, ContactServiceQueueSearchParams } from './types';
17
18
  /**
@@ -250,7 +251,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
250
251
  * });
251
252
  * ```
252
253
  */
253
- private queue;
254
+ queue: Queue;
254
255
  /**
255
256
  * API instance for AI Assistant operations such as transcript controls.
256
257
  * @type {ApiAIAssistant}
@@ -282,6 +283,12 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
282
283
  * @param {ITask} task The task object to be hydrated with additional data
283
284
  */
284
285
  private handleTaskHydrate;
286
+ /**
287
+ * Handles multi-login hydrate events for SDK instances without Mobius registration
288
+ * @private
289
+ * @param {ITask} task The task object associated with the multi-login hydrate
290
+ */
291
+ private handleTaskMultiLoginHydrate;
285
292
  /**
286
293
  * Handles task merged events when tasks are combined eg: EPDN merge/transfer
287
294
  * @private
@@ -294,12 +301,6 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
294
301
  * @param {ITask} task The campaign reservation task
295
302
  */
296
303
  private handleCampaignPreviewReservation;
297
- /**
298
- * Handles multi-login hydrate events emitted when browser login accepts an incoming call.
299
- * @private
300
- * @param {ITask} task The task object associated with multi-login hydrate
301
- */
302
- private handleTaskMultiLoginHydrate;
303
304
  private handleRTDWebsocketMessage;
304
305
  /**
305
306
  * Sets up event listeners for incoming tasks and task hydration
@@ -412,17 +413,6 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
412
413
  * ```
413
414
  */
414
415
  getBuddyAgents(data: BuddyAgents): Promise<BuddyAgentsResponse>;
415
- /**
416
- * Checks whether WebRTC registration should be skipped by config.
417
- * @returns {boolean}
418
- * @private
419
- */
420
- private isWebRTCRegistrationDisabled;
421
- /**
422
- * Validates contact-center plugin configuration before service initialization
423
- * @private
424
- */
425
- private validatePluginConfig;
426
416
  /**
427
417
  * Connects to the websocket and fetches the agent profile
428
418
  * @returns {Promise<Profile>} Agent profile information
@@ -542,6 +532,17 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
542
532
  * @param {string} event The raw websocket event message
543
533
  */
544
534
  private handleWebsocketMessage;
535
+ /**
536
+ * Checks whether Mobius/WebRTC registration should be skipped by config
537
+ * @returns {boolean} True when browser WebRTC registration is disabled
538
+ * @private
539
+ */
540
+ private isWebRTCRegistrationDisabled;
541
+ /**
542
+ * Validates contact-center plugin configuration before service initialization
543
+ * @private
544
+ */
545
+ private validatePluginConfig;
545
546
  /**
546
547
  * Initializes event listeners for the Contact Center service
547
548
  * Sets up handlers for connection state changes and other core events
@@ -25,6 +25,12 @@ declare const _default: {
25
25
  * @default true
26
26
  */
27
27
  allowAutomatedRelogin: boolean;
28
+ /**
29
+ * Whether to skip Mobius/WebRTC registration for browser login flows.
30
+ * @type {boolean}
31
+ * @default false
32
+ */
33
+ disableWebRTCRegistration: boolean;
28
34
  /**
29
35
  * The type of client making the connection.
30
36
  * @type {string}
@@ -36,17 +36,30 @@ export declare const METHODS: {
36
36
  HANDLE_DEVICE_TYPE: string;
37
37
  START_OUTDIAL: string;
38
38
  GET_QUEUES: string;
39
- GET_OUTDIAL_ANI_ENTRIES: string;
40
39
  UPLOAD_LOGS: string;
41
40
  UPDATE_AGENT_PROFILE: string;
42
41
  GET_DEVICE_ID: string;
43
42
  HANDLE_INCOMING_TASK: string;
44
43
  HANDLE_TASK_HYDRATE: string;
45
44
  INCOMING_TASK_LISTENER: string;
45
+ ACCEPT: string;
46
+ REJECT: string;
47
+ HOLD: string;
48
+ RESUME: string;
49
+ HOLD_RESUME: string;
50
+ TRANSFER_CALL: string;
51
+ CONSULT_TRANSFER: string;
52
+ CONSULT_CONFERENCE: string;
53
+ EXIT_CONFERENCE: string;
54
+ TRANSFER_CONFERENCE: string;
55
+ TOGGLE_MUTE: string;
56
+ COMPLETE_TRANSFER: string;
57
+ GET_OUTDIAL_ANI_ENTRIES: string;
46
58
  ACCEPT_PREVIEW_CONTACT: string;
47
59
  SKIP_PREVIEW_CONTACT: string;
48
60
  REMOVE_PREVIEW_CONTACT: string;
49
61
  GET_BASE_URL: string;
50
62
  SEND_EVENT: string;
63
+ GET_SUGGESTED_RESPONSE: string;
51
64
  FETCH_HISTORIC_TRANSCRIPTS: string;
52
65
  };
@@ -10,15 +10,15 @@ import ContactCenter from './cc';
10
10
  */
11
11
  export { default as ContactCenter } from './cc';
12
12
  /**
13
- * Task class represents a contact center task that can be managed by an agent
13
+ * Agent routing service for Contact Center operations
14
14
  * @category Services
15
15
  */
16
- export { default as Task } from './services/task';
16
+ export { default as routingAgent } from './services/agent';
17
17
  /**
18
- * Agent routing service for Contact Center operations
18
+ * Task class represents a contact center task that can be managed by an agent
19
19
  * @category Services
20
20
  */
21
- export { default as routingAgent } from './services/agent';
21
+ export { default as Task } from './services/task/Task';
22
22
  export { default as AddressBook } from './services/AddressBook';
23
23
  export { default as ApiAIAssistant } from './services/ApiAiAssistant';
24
24
  /** EntryPoint API types */
@@ -92,12 +92,18 @@ GenericError,
92
92
  SetStateResponse, } from './types';
93
93
  /** Task related types */
94
94
  export type { AgentContact,
95
+ /** Event emitter contract for task consumers (no @types/node needed) */
96
+ IEventEmitter,
95
97
  /** Task interface */
96
98
  ITask, Interaction, TaskData,
97
99
  /** Task response */
98
100
  TaskResponse, ConsultPayload, ConsultEndPayload, ConsultTransferPayLoad,
99
101
  /** Dialer payload */
100
- DialerPayload, TransferPayLoad, ResumeRecordingPayload, WrapupPayLoad, } from './services/task/types';
102
+ DialerPayload, TransferPayLoad, ResumeRecordingPayload, WrapupPayLoad,
103
+ /** UI control types for task buttons */
104
+ InteractionUIControls, TaskUILeg, TaskUIControls, TaskUIControlState, } from './services/task/types';
105
+ /** UI controls utilities */
106
+ export { getDefaultUIControls } from './services/task/state-machine/uiControlsComputer';
101
107
  /** Agent related types */
102
108
  export type {
103
109
  /** State change interface */
@@ -122,15 +122,19 @@ export declare const METRIC_EVENT_NAMES: {
122
122
  readonly TASK_CONFERENCE_END_FAILED: "Task Conference End Failed";
123
123
  readonly TASK_CONFERENCE_TRANSFER_SUCCESS: "Task Conference Transfer Success";
124
124
  readonly TASK_CONFERENCE_TRANSFER_FAILED: "Task Conference Transfer Failed";
125
+ readonly TASK_CONFERENCE_EXIT_SUCCESS: "Task Conference Exit Success";
126
+ readonly TASK_CONFERENCE_EXIT_FAILED: "Task Conference Exit Failed";
127
+ readonly TASK_SWITCH_CALL_SUCCESS: "Task Switch Call Success";
128
+ readonly TASK_SWITCH_CALL_FAILED: "Task Switch Call Failed";
125
129
  readonly TASK_OUTDIAL_SUCCESS: "Task Outdial Success";
126
130
  readonly TASK_OUTDIAL_FAILED: "Task Outdial Failed";
127
131
  readonly UPLOAD_LOGS_SUCCESS: "Upload Logs Success";
128
132
  readonly UPLOAD_LOGS_FAILED: "Upload Logs Failed";
129
133
  readonly WEBSOCKET_DEREGISTER_SUCCESS: "Websocket Deregister Success";
130
134
  readonly WEBSOCKET_DEREGISTER_FAIL: "Websocket Deregister Failed";
131
- readonly WEBSOCKET_EVENT_RECEIVED: "Websocket Event Received";
132
135
  readonly AGENT_DEVICE_TYPE_UPDATE_SUCCESS: "Agent Device Type Update Success";
133
136
  readonly AGENT_DEVICE_TYPE_UPDATE_FAILED: "Agent Device Type Update Failed";
137
+ readonly WEBSOCKET_EVENT_RECEIVED: "Websocket Event Received";
134
138
  readonly ENTRYPOINT_FETCH_SUCCESS: "Entrypoint Fetch Success";
135
139
  readonly ENTRYPOINT_FETCH_FAILED: "Entrypoint Fetch Failed";
136
140
  readonly ADDRESSBOOK_FETCH_SUCCESS: "AddressBook Fetch Success";
@@ -147,6 +151,8 @@ export declare const METRIC_EVENT_NAMES: {
147
151
  readonly CAMPAIGN_PREVIEW_REMOVE_FAILED: "Campaign Preview Remove Failed";
148
152
  readonly AI_ASSISTANT_SEND_EVENT_SUCCESS: "AI Assistant Send Event Success";
149
153
  readonly AI_ASSISTANT_SEND_EVENT_FAILED: "AI Assistant Send Event Failed";
154
+ readonly AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS: "AI Assistant Get Suggested Response Success";
155
+ readonly AI_ASSISTANT_GET_SUGGESTED_RESPONSE_FAILED: "AI Assistant Get Suggested Response Failed";
150
156
  readonly AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS: "AI Assistant Fetch Historic Transcripts Success";
151
157
  readonly AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED: "AI Assistant Fetch Historic Transcripts Failed";
152
158
  };
@@ -1,4 +1,4 @@
1
- import { WebexSDK, TranscriptAction, AIAssistantEventType, AIAssistantEventName, HistoricTranscriptsResponse } from '../types';
1
+ import { WebexSDK, TranscriptAction, AIAssistantEventType, AIAssistantEventName, HistoricTranscriptsResponse, SuggestedResponseParams } from '../types';
2
2
  import { AIFeatureFlags } from './config/types';
3
3
  /**
4
4
  * ApiAIAssistant provides AI Assistant APIs for transcript controls.
@@ -7,7 +7,7 @@ import { AIFeatureFlags } from './config/types';
7
7
  export declare class ApiAIAssistant {
8
8
  private webex;
9
9
  private metricsManager;
10
- aiFeature: AIFeatureFlags;
10
+ private aiFeature;
11
11
  constructor(webex: WebexSDK);
12
12
  setAIFeatureFlags(aiFeature: AIFeatureFlags): void;
13
13
  private getBaseUrl;
@@ -19,7 +19,15 @@ export declare class ApiAIAssistant {
19
19
  * @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
20
20
  * @param action - action within eventDetails (e.g. 'START' or 'STOP')
21
21
  */
22
- sendEvent(agentId: string, interactionId: string, eventType: AIAssistantEventType, eventName: AIAssistantEventName, action: TranscriptAction): Promise<Record<string, unknown>>;
22
+ sendEvent(agentId: string, interactionId: string, eventType: AIAssistantEventType, eventName: AIAssistantEventName, action?: TranscriptAction, context?: string, languageCode?: string, trackingId?: string): Promise<Record<string, unknown>>;
23
+ /**
24
+ * Requests a suggested response for an interaction.
25
+ *
26
+ * @param params - Suggestion request parameters
27
+ * @returns HTTP response body from the AI Assistant event API
28
+ * @public
29
+ */
30
+ getSuggestedResponse(params: SuggestedResponseParams): Promise<any>;
23
31
  /**
24
32
  * Fetches historic transcripts for an interaction.
25
33
  * This API is allowed only when real-time transcription feature is enabled.