@webex/contact-center 3.12.0-next.9 → 3.12.0-next.91

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 (229) hide show
  1. package/.sdd/manifest.json +876 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +46 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +48 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +341 -0
  17. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  18. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  19. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  20. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  21. package/ai-docs/patterns/testing-patterns.md +480 -0
  22. package/ai-docs/patterns/typescript-patterns.md +365 -0
  23. package/ai-docs/templates/README.md +102 -0
  24. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  25. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  26. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  27. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  28. package/ai-docs/templates/new-method/00-master.md +80 -0
  29. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  30. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  31. package/ai-docs/templates/new-method/03-tests.md +201 -0
  32. package/ai-docs/templates/new-method/04-validation.md +141 -0
  33. package/ai-docs/templates/new-service/00-master.md +109 -0
  34. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  35. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  36. package/ai-docs/templates/new-service/03-integration.md +178 -0
  37. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  38. package/ai-docs/templates/new-service/05-validation.md +145 -0
  39. package/dist/cc.js +265 -29
  40. package/dist/cc.js.map +1 -1
  41. package/dist/config.js +6 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/constants.js +17 -1
  44. package/dist/constants.js.map +1 -1
  45. package/dist/index.js +20 -5
  46. package/dist/index.js.map +1 -1
  47. package/dist/metrics/behavioral-events.js +101 -0
  48. package/dist/metrics/behavioral-events.js.map +1 -1
  49. package/dist/metrics/constants.js +25 -4
  50. package/dist/metrics/constants.js.map +1 -1
  51. package/dist/services/ApiAiAssistant.js +153 -8
  52. package/dist/services/ApiAiAssistant.js.map +1 -1
  53. package/dist/services/UserPreference.js +427 -0
  54. package/dist/services/UserPreference.js.map +1 -0
  55. package/dist/services/config/Util.js +3 -3
  56. package/dist/services/config/Util.js.map +1 -1
  57. package/dist/services/config/constants.js +23 -2
  58. package/dist/services/config/constants.js.map +1 -1
  59. package/dist/services/config/types.js +49 -9
  60. package/dist/services/config/types.js.map +1 -1
  61. package/dist/services/core/Err.js.map +1 -1
  62. package/dist/services/core/Utils.js +107 -32
  63. package/dist/services/core/Utils.js.map +1 -1
  64. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  65. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  66. package/dist/services/core/websocket/types.js.map +1 -1
  67. package/dist/services/index.js +1 -1
  68. package/dist/services/index.js.map +1 -1
  69. package/dist/services/task/Task.js +688 -0
  70. package/dist/services/task/Task.js.map +1 -0
  71. package/dist/services/task/TaskFactory.js +45 -0
  72. package/dist/services/task/TaskFactory.js.map +1 -0
  73. package/dist/services/task/TaskManager.js +728 -527
  74. package/dist/services/task/TaskManager.js.map +1 -1
  75. package/dist/services/task/TaskUtils.js +162 -26
  76. package/dist/services/task/TaskUtils.js.map +1 -1
  77. package/dist/services/task/constants.js +9 -2
  78. package/dist/services/task/constants.js.map +1 -1
  79. package/dist/services/task/dialer.js +78 -0
  80. package/dist/services/task/dialer.js.map +1 -1
  81. package/dist/services/task/digital/Digital.js +77 -0
  82. package/dist/services/task/digital/Digital.js.map +1 -0
  83. package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
  84. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  85. package/dist/services/task/state-machine/actions.js +543 -0
  86. package/dist/services/task/state-machine/actions.js.map +1 -0
  87. package/dist/services/task/state-machine/constants.js +161 -0
  88. package/dist/services/task/state-machine/constants.js.map +1 -0
  89. package/dist/services/task/state-machine/guards.js +340 -0
  90. package/dist/services/task/state-machine/guards.js.map +1 -0
  91. package/dist/services/task/state-machine/index.js +53 -0
  92. package/dist/services/task/state-machine/index.js.map +1 -0
  93. package/dist/services/task/state-machine/types.js +54 -0
  94. package/dist/services/task/state-machine/types.js.map +1 -0
  95. package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
  96. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  97. package/dist/services/task/taskDataNormalizer.js +99 -0
  98. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  99. package/dist/services/task/types.js +212 -4
  100. package/dist/services/task/types.js.map +1 -1
  101. package/dist/services/task/voice/Voice.js +1042 -0
  102. package/dist/services/task/voice/Voice.js.map +1 -0
  103. package/dist/services/task/voice/WebRTC.js +149 -0
  104. package/dist/services/task/voice/WebRTC.js.map +1 -0
  105. package/dist/types/cc.d.ts +94 -1
  106. package/dist/types/config.d.ts +6 -0
  107. package/dist/types/constants.d.ts +17 -1
  108. package/dist/types/index.d.ts +21 -6
  109. package/dist/types/metrics/constants.d.ts +21 -1
  110. package/dist/types/services/ApiAiAssistant.d.ts +22 -4
  111. package/dist/types/services/UserPreference.d.ts +118 -0
  112. package/dist/types/services/config/constants.d.ts +21 -0
  113. package/dist/types/services/config/types.d.ts +171 -10
  114. package/dist/types/services/core/Err.d.ts +4 -0
  115. package/dist/types/services/core/Utils.d.ts +33 -13
  116. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  117. package/dist/types/services/core/websocket/types.d.ts +1 -1
  118. package/dist/types/services/index.d.ts +1 -1
  119. package/dist/types/services/task/Task.d.ts +157 -0
  120. package/dist/types/services/task/TaskFactory.d.ts +12 -0
  121. package/dist/types/services/task/TaskUtils.d.ts +46 -2
  122. package/dist/types/services/task/constants.d.ts +7 -0
  123. package/dist/types/services/task/dialer.d.ts +30 -0
  124. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  125. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
  126. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  127. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  128. package/dist/types/services/task/state-machine/guards.d.ts +90 -0
  129. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  130. package/dist/types/services/task/state-machine/types.d.ts +267 -0
  131. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  132. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  133. package/dist/types/services/task/types.d.ts +603 -66
  134. package/dist/types/services/task/voice/Voice.d.ts +184 -0
  135. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  136. package/dist/types/types.d.ts +135 -0
  137. package/dist/types/webex.d.ts +1 -0
  138. package/dist/types.js +118 -2
  139. package/dist/types.js.map +1 -1
  140. package/dist/webex.js +14 -2
  141. package/dist/webex.js.map +1 -1
  142. package/package.json +15 -12
  143. package/src/cc.ts +329 -30
  144. package/src/config.ts +6 -0
  145. package/src/constants.ts +17 -1
  146. package/src/index.ts +23 -5
  147. package/src/metrics/ai-docs/AGENTS.md +350 -0
  148. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  149. package/src/metrics/ai-docs/metrics-spec.md +854 -0
  150. package/src/metrics/behavioral-events.ts +106 -0
  151. package/src/metrics/constants.ts +27 -4
  152. package/src/services/ApiAiAssistant.ts +203 -8
  153. package/src/services/UserPreference.ts +509 -0
  154. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  155. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  156. package/src/services/agent/ai-docs/agent-spec.md +504 -0
  157. package/src/services/ai-docs/AGENTS.md +386 -0
  158. package/src/services/ai-docs/services-spec.md +492 -0
  159. package/src/services/config/Util.ts +3 -3
  160. package/src/services/config/ai-docs/AGENTS.md +255 -0
  161. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  162. package/src/services/config/ai-docs/config-spec.md +669 -0
  163. package/src/services/config/constants.ts +25 -1
  164. package/src/services/config/types.ts +174 -11
  165. package/src/services/core/Err.ts +2 -0
  166. package/src/services/core/Utils.ts +123 -37
  167. package/src/services/core/ai-docs/AGENTS.md +381 -0
  168. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  169. package/src/services/core/ai-docs/core-spec.md +783 -0
  170. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  171. package/src/services/core/websocket/types.ts +1 -1
  172. package/src/services/index.ts +1 -1
  173. package/src/services/task/Task.ts +837 -0
  174. package/src/services/task/TaskFactory.ts +55 -0
  175. package/src/services/task/TaskManager.ts +739 -614
  176. package/src/services/task/TaskUtils.ts +205 -25
  177. package/src/services/task/ai-docs/AGENTS.md +457 -0
  178. package/src/services/task/ai-docs/ARCHITECTURE.md +594 -0
  179. package/src/services/task/ai-docs/task-spec.md +1319 -0
  180. package/src/services/task/constants.ts +7 -0
  181. package/src/services/task/dialer.ts +80 -0
  182. package/src/services/task/digital/Digital.ts +95 -0
  183. package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
  184. package/src/services/task/state-machine/actions.ts +685 -0
  185. package/src/services/task/state-machine/ai-docs/AGENTS.md +458 -0
  186. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1137 -0
  187. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2115 -0
  188. package/src/services/task/state-machine/constants.ts +172 -0
  189. package/src/services/task/state-machine/guards.ts +406 -0
  190. package/src/services/task/state-machine/index.ts +28 -0
  191. package/src/services/task/state-machine/types.ts +241 -0
  192. package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
  193. package/src/services/task/taskDataNormalizer.ts +137 -0
  194. package/src/services/task/types.ts +710 -71
  195. package/src/services/task/voice/Voice.ts +1267 -0
  196. package/src/services/task/voice/WebRTC.ts +187 -0
  197. package/src/types.ts +166 -2
  198. package/src/utils/AGENTS.md +278 -0
  199. package/src/utils/ai-docs/utils-spec.md +381 -0
  200. package/src/webex.js +2 -0
  201. package/test/unit/spec/cc.ts +343 -23
  202. package/test/unit/spec/logger-proxy.ts +70 -0
  203. package/test/unit/spec/services/ApiAiAssistant.ts +178 -20
  204. package/test/unit/spec/services/UserPreference.ts +401 -0
  205. package/test/unit/spec/services/WebCallingService.ts +7 -1
  206. package/test/unit/spec/services/config/index.ts +30 -30
  207. package/test/unit/spec/services/core/Utils.ts +425 -8
  208. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  209. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  210. package/test/unit/spec/services/task/Task.ts +477 -0
  211. package/test/unit/spec/services/task/TaskFactory.ts +62 -0
  212. package/test/unit/spec/services/task/TaskManager.ts +834 -1704
  213. package/test/unit/spec/services/task/TaskUtils.ts +206 -0
  214. package/test/unit/spec/services/task/dialer.ts +190 -0
  215. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  216. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
  217. package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
  218. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  219. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
  220. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  221. package/test/unit/spec/services/task/voice/Voice.ts +631 -0
  222. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  223. package/umd/contact-center.min.js +2 -2
  224. package/umd/contact-center.min.js.map +1 -1
  225. package/dist/services/task/index.js +0 -1525
  226. package/dist/services/task/index.js.map +0 -1
  227. package/dist/types/services/task/index.d.ts +0 -650
  228. package/src/services/task/index.ts +0 -1801
  229. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","_types2","_constants","_types3","isPrimary","task","agentId","data","interaction","owner","exports","isParticipantInMainInteraction","media","Object","values","some","mediaObj","mType","participants","includes","checkParticipantNotInInteraction","hasLeft","getIsConferenceInProgress","mediaMainCall","interactionId","participantsInMainCall","Set","agentParticipants","size","forEach","participantId","participant","pType","add","isSecondaryAgent","callProcessingDetails","relationshipType","parentInteractionId","isSecondaryEpDnAgent","mediaType","isAutoAnswerEnabled","autoAnswerEnabled","isWebRTCCall","loginOption","webRtcEnabled","LoginOption","BROWSER","OUTDIAL_MEDIA_TYPE","isDigitalOutbound","contactDirection","type","OUTDIAL_DIRECTION","outboundType","OUTBOUND_TYPE","mediaChannel","MEDIA_CHANNEL","EMAIL","SMS","hasAgentInitiatedOutdial","outdialAgentId","BLIND_TRANSFER_IN_PROGRESS","shouldAutoAnswerTask","taskData","agentInitiatedOutdial","hasPreviousVteams","previousVTeams","length","isCampaignPreviewReservation","CC_EVENTS","AGENT_OFFER_CAMPAIGN_RESERVATION"],"sources":["TaskUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport {Interaction, ITask, TaskData, MEDIA_CHANNEL} from './types';\nimport {CC_EVENTS} from '../config/types';\nimport {OUTDIAL_DIRECTION, OUTDIAL_MEDIA_TYPE, OUTBOUND_TYPE} from '../../constants';\nimport {LoginOption} from '../../types';\n\n/**\n * Determines if the given agent is the primary agent (owner) of the task\n * @param task - The task to check\n * @param agentId - The agent ID to check for primary status\n * @returns true if the agent is the primary agent, false otherwise\n */\nexport const isPrimary = (task: ITask, agentId: string): boolean => {\n if (!task.data?.interaction?.owner) {\n // Fall back to checking data.agentId when owner is not set\n return task.data.agentId === agentId;\n }\n\n return task.data.interaction.owner === agentId;\n};\n\n/**\n * Checks if the given agent is a participant in the main interaction (mainCall)\n * @param task - The task to check\n * @param agentId - The agent ID to check for participation\n * @returns true if the agent is a participant in the main interaction, false otherwise\n */\nexport const isParticipantInMainInteraction = (task: ITask, agentId: string): boolean => {\n if (!task?.data?.interaction?.media) {\n return false;\n }\n\n return Object.values(task.data.interaction.media).some(\n (mediaObj) =>\n mediaObj && mediaObj.mType === 'mainCall' && mediaObj.participants?.includes(agentId)\n );\n};\n\n/**\n * Checks if the given agent is not in the interaction or has left the interaction\n * @param task - The task to check\n * @param agentId - The agent ID to check\n * @returns true if the agent is not in the interaction or has left, false otherwise\n */\nexport const checkParticipantNotInInteraction = (task: ITask, agentId: string): boolean => {\n if (!task?.data?.interaction?.participants) {\n return true;\n }\n const {data} = task;\n\n return (\n !(agentId in data.interaction.participants) ||\n (agentId in data.interaction.participants && data.interaction.participants[agentId].hasLeft)\n );\n};\n\n/**\n * Determines if a conference is currently in progress based on the number of active agent participants\n * @param TaskData - The payLoad data to check for conference status\n * @returns true if there are 2 or more active agent participants in the main call, false otherwise\n */\nexport const getIsConferenceInProgress = (data: TaskData): boolean => {\n const mediaMainCall = data.interaction.media?.[data?.interactionId];\n const participantsInMainCall = new Set(mediaMainCall?.participants);\n const participants = data.interaction.participants;\n\n const agentParticipants = new Set();\n if (participantsInMainCall.size > 0) {\n participantsInMainCall.forEach((participantId: string) => {\n const participant = participants?.[participantId];\n if (\n participant &&\n participant.pType !== 'Customer' &&\n participant.pType !== 'Supervisor' &&\n !participant.hasLeft &&\n participant.pType !== 'VVA'\n ) {\n agentParticipants.add(participantId);\n }\n });\n }\n\n return agentParticipants.size >= 2;\n};\n\n/**\n * Checks if the current agent is a secondary agent in a consultation scenario.\n * Secondary agents are those who were consulted (not the original call owner).\n * @param task - The task object containing interaction details\n * @returns true if this is a secondary agent (consulted party), false otherwise\n */\nexport const isSecondaryAgent = (interaction: Interaction): boolean => {\n if (!interaction.callProcessingDetails) {\n return false;\n }\n\n return (\n interaction.callProcessingDetails.relationshipType === 'consult' &&\n !!interaction.callProcessingDetails.parentInteractionId &&\n interaction.callProcessingDetails.parentInteractionId !== interaction.interactionId\n );\n};\n\n/**\n * Checks if the current agent is a secondary EP-DN (Entry Point Dial Number) agent.\n * This is specifically for telephony consultations to external numbers/entry points.\n * @param task - The task object containing interaction details\n * @returns true if this is a secondary EP-DN agent in telephony consultation, false otherwise\n */\nexport const isSecondaryEpDnAgent = (interaction: Interaction): boolean => {\n if (!interaction) {\n return false;\n }\n\n return interaction.mediaType === 'telephony' && isSecondaryAgent(interaction);\n};\n\n/**\n * Checks if auto-answer is enabled for the agent participant\n * @param interaction - The interaction object\n * @param agentId - Current agent ID\n * @returns true if auto-answer is enabled, false otherwise\n */\nexport const isAutoAnswerEnabled = (interaction: Interaction, agentId: string): boolean => {\n return interaction.participants?.[agentId]?.autoAnswerEnabled === true;\n};\n\n/**\n * Checks if the interaction is a WebRTC call eligible for auto-answer\n * @param interaction - The interaction object\n * @param loginOption - The agent's login option (BROWSER, AGENT_DN, etc.)\n * @param webRtcEnabled - Whether WebRTC is enabled for the agent\n * @returns true if this is a WebRTC call, false otherwise\n */\nexport const isWebRTCCall = (\n interaction: Interaction,\n loginOption: string,\n webRtcEnabled: boolean\n): boolean => {\n return (\n webRtcEnabled &&\n loginOption === LoginOption.BROWSER &&\n interaction.mediaType === OUTDIAL_MEDIA_TYPE\n );\n};\n\n/**\n * Checks if the interaction is a digital outbound (Email/SMS)\n * @param interaction - The interaction object\n * @returns true if this is a digital outbound, false otherwise\n */\nexport const isDigitalOutbound = (interaction: Interaction): boolean => {\n return (\n interaction.contactDirection?.type === OUTDIAL_DIRECTION &&\n interaction.outboundType === OUTBOUND_TYPE &&\n (interaction.mediaChannel === MEDIA_CHANNEL.EMAIL ||\n interaction.mediaChannel === MEDIA_CHANNEL.SMS)\n );\n};\n\n/**\n * Checks if the outdial was initiated by the current agent\n * @param interaction - The interaction object\n * @param agentId - Current agent ID\n * @returns true if agent initiated the outdial, false otherwise\n */\nexport const hasAgentInitiatedOutdial = (interaction: Interaction, agentId: string): boolean => {\n return (\n interaction.contactDirection?.type === OUTDIAL_DIRECTION &&\n interaction.outboundType === OUTBOUND_TYPE &&\n interaction.callProcessingDetails?.outdialAgentId === agentId &&\n interaction.owner === agentId &&\n !interaction.callProcessingDetails?.BLIND_TRANSFER_IN_PROGRESS\n );\n};\n\n/**\n * Determines if a task should be auto-answered based on interaction data\n * Auto-answer logic handles:\n * 1. WebRTC calls with auto-answer enabled in agent profile\n * 2. Agent-initiated WebRTC outdial calls\n * 3. Agent-initiated digital outbound (Email/SMS) without previous transfers\n *\n * @param taskData - The task data\n * @param agentId - Current agent ID\n * @param loginOption - Agent's login option\n * @param webRtcEnabled - Whether WebRTC is enabled for the agent\n * @returns true if task should be auto-answered, false otherwise\n */\nexport const shouldAutoAnswerTask = (\n taskData: TaskData,\n agentId: string,\n loginOption: string,\n webRtcEnabled: boolean\n): boolean => {\n const {interaction} = taskData;\n\n if (!interaction || !agentId) {\n return false;\n }\n\n // Check if auto-answer is enabled for this agent\n const autoAnswerEnabled = isAutoAnswerEnabled(interaction, agentId);\n\n // Check if this is an agent-initiated outdial\n const agentInitiatedOutdial = hasAgentInitiatedOutdial(interaction, agentId);\n\n // WebRTC telephony calls\n if (isWebRTCCall(interaction, loginOption, webRtcEnabled)) {\n return autoAnswerEnabled || agentInitiatedOutdial;\n }\n\n // Digital outbound (Email/SMS)\n if (isDigitalOutbound(interaction) && agentInitiatedOutdial) {\n // Don't auto-answer if task has been transferred (has previous vteams)\n const hasPreviousVteams = interaction.previousVTeams && interaction.previousVTeams.length > 0;\n\n return !hasPreviousVteams;\n }\n\n return false;\n};\n\n/**\n * Checks if a task is a campaign preview reservation that has not yet been accepted.\n * Campaign preview tasks should not trigger incoming call handling until the agent\n * explicitly accepts the preview contact.\n * @param task - The task to check\n * @returns true if the task is a pending campaign preview reservation, false otherwise\n */\nexport const isCampaignPreviewReservation = (task: ITask): boolean => {\n return task?.data?.type === CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","_types2","_constants","_types3","_constants2","CAMPAIGN_PREVIEW_OUTBOUND_TYPES","CAMPAIGN_PREVIEW_CAMPAIGN_TYPES","getIsCustomerInCall","interaction","interactionId","mainCallMedia","media","participants","some","participantId","participant","pType","PARTICIPANT_TYPE","CUSTOMER","hasLeft","exports","getConferenceParticipantsCount","count","SUPERVISOR","VVA","getIsConsultInProgressForConferenceControls","mainCallId","selfAgentId","mainParticipants","Array","isArray","length","mainSet","Set","Object","values","m","mType","p","consultState","isRonaPendingConsultee","hasJoined","consultLegActive","currentState","isConsulted","has","getIsConsultedAgentForControls","taskData","context","isConsultingState","Boolean","consultInitiator","getServerHoldStateForControls","fallbackTaskData","undefined","isHold","mediaId","mediaResourceId","isPrimary","task","agentId","data","owner","isParticipantInMainInteraction","mediaObj","MEDIA_TYPE_MAIN_CALL","includes","checkParticipantNotInInteraction","getIsConferenceInProgress","mainInteractionId","mediaMainCall","participantsInMainCall","agentParticipants","forEach","add","size","isSecondaryAgent","callProcessingDetails","relationshipType","parentInteractionId","isSecondaryEpDnAgent","mediaType","isCampaignPreviewTask","outboundType","cpd","campaignType","isAutoAnswerEnabled","autoAnswerEnabled","isWebRTCCall","loginOption","webRtcEnabled","LoginOption","BROWSER","OUTDIAL_MEDIA_TYPE","isDigitalOutbound","contactDirection","type","OUTDIAL_DIRECTION","OUTBOUND_TYPE","mediaChannel","MEDIA_CHANNEL","EMAIL","SMS","hasAgentInitiatedOutdial","outdialAgentId","BLIND_TRANSFER_IN_PROGRESS","shouldAutoAnswerTask","agentInitiatedOutdial","hasPreviousVteams","previousVTeams","getConsultMediaResourceId","consultMediaResourceId","entries","isCampaignPreviewReservation","CC_EVENTS","AGENT_OFFER_CAMPAIGN_RESERVATION"],"sources":["TaskUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport {Interaction, ITask, TaskData, MEDIA_CHANNEL} from './types';\nimport {LoginOption} from '../../types';\nimport {PARTICIPANT_TYPE, MEDIA_TYPE_MAIN_CALL} from './state-machine/constants';\nimport {TaskContext} from './state-machine/types';\nimport {CC_EVENTS} from '../config/types';\nimport {OUTBOUND_TYPE, OUTDIAL_DIRECTION, OUTDIAL_MEDIA_TYPE} from '../../constants';\n\nconst CAMPAIGN_PREVIEW_OUTBOUND_TYPES = ['STANDARD_PREVIEW_CAMPAIGN', 'DIRECT_PREVIEW_CAMPAIGN'];\nconst CAMPAIGN_PREVIEW_CAMPAIGN_TYPES = ['preview_standard', 'preview_direct'];\n\n/**\n * Checks if the customer is still in the call (not left)\n *\n * @param interaction - The interaction object\n * @param interactionId - The main interaction ID\n * @returns true if customer is in the call\n */\nexport const getIsCustomerInCall = (interaction: Interaction, interactionId: string): boolean => {\n const mainCallMedia = interaction.media?.[interactionId];\n const participants = interaction.participants;\n if (!mainCallMedia?.participants || !participants) {\n return false;\n }\n\n return mainCallMedia.participants.some((participantId: string) => {\n const participant = participants[participantId];\n\n return participant?.pType === PARTICIPANT_TYPE.CUSTOMER && !participant.hasLeft;\n });\n};\n\n/**\n * Gets the count of active agent participants in the conference\n * Excludes Customer, Supervisor, and VVA participant types\n *\n * @param interaction - The interaction object\n * @param interactionId - The main interaction ID\n * @returns Number of active agent participants\n */\nexport const getConferenceParticipantsCount = (\n interaction: Interaction,\n interactionId: string\n): number => {\n const mainCallMedia = interaction.media?.[interactionId];\n const participants = interaction.participants;\n if (!mainCallMedia?.participants || !participants) {\n return 0;\n }\n\n let count = 0;\n for (const participantId of mainCallMedia.participants) {\n const participant = participants[participantId];\n if (\n participant &&\n participant.pType !== PARTICIPANT_TYPE.CUSTOMER &&\n participant.pType !== PARTICIPANT_TYPE.SUPERVISOR &&\n participant.pType !== PARTICIPANT_TYPE.VVA &&\n !participant.hasLeft\n ) {\n count += 1;\n }\n }\n\n return count;\n};\n\n/**\n * Determines if a consult is actively in-progress for conference control gating.\n * This is used to disable conference controls (End/Consult) only when a consult leg\n * still exists outside the main call participants.\n */\nexport const getIsConsultInProgressForConferenceControls = (\n interaction: Interaction | undefined,\n mainCallId: string | undefined,\n selfAgentId: string | undefined\n): boolean => {\n if (!interaction || !mainCallId) return false;\n\n const mainParticipants = interaction.media?.[mainCallId]?.participants;\n if (!Array.isArray(mainParticipants) || mainParticipants.length === 0) return false;\n\n const mainSet = new Set(mainParticipants);\n const media = interaction.media;\n if (!media) return false;\n\n return Object.values(media).some((m: any) => {\n if (!m || m.mType !== 'consult') return false;\n if (!Array.isArray(m.participants) || m.participants.length === 0) return false;\n\n return m.participants.some((participantId: string) => {\n const p: any = interaction.participants?.[participantId];\n if (!p || p.hasLeft) return false;\n if (selfAgentId && participantId === selfAgentId) return false;\n\n const consultState = p.consultState as string | undefined;\n const isRonaPendingConsultee = consultState === 'consultReserved' && p.hasJoined === false;\n const consultLegActive =\n consultState === 'consulting' ||\n p.currentState === 'consulting' ||\n (p.isConsulted === true && consultState !== 'consultCompleted' && !isRonaPendingConsultee);\n\n return consultLegActive && !mainSet.has(participantId);\n });\n });\n};\n\nexport const getIsConsultedAgentForControls = (\n taskData: TaskData | null,\n context: TaskContext,\n isConsultingState: boolean\n): boolean => {\n return Boolean(taskData?.isConsulted) || (isConsultingState && !context.consultInitiator);\n};\n\nexport const getServerHoldStateForControls = (\n context: TaskContext,\n mainCallId?: string,\n fallbackTaskData?: TaskData | null\n): boolean | undefined => {\n const media = context.taskData?.interaction?.media ?? fallbackTaskData?.interaction?.media;\n if (!media) return undefined;\n\n if (mainCallId && media[mainCallId]) {\n return media[mainCallId].isHold ?? false;\n }\n\n const mediaId = context.taskData?.mediaResourceId ?? fallbackTaskData?.mediaResourceId;\n if (!mediaId) return undefined;\n\n return media[mediaId]?.isHold;\n};\n\n/**\n * Determines if the given agent is the primary agent (owner) of the task\n * @param task - The task to check\n * @param agentId - The agent ID to check for primary status\n * @returns true if the agent is the primary agent, false otherwise\n */\nexport const isPrimary = (task: ITask, agentId: string): boolean => {\n if (!task.data?.interaction?.owner) {\n // Fall back to checking data.agentId when owner is not set\n return task.data.agentId === agentId;\n }\n\n return task.data.interaction.owner === agentId;\n};\n\n/**\n * Checks if the given agent is a participant in the main interaction (mainCall)\n * @param task - The task to check\n * @param agentId - The agent ID to check for participation\n * @returns true if the agent is a participant in the main interaction, false otherwise\n */\nexport const isParticipantInMainInteraction = (task: ITask, agentId: string): boolean => {\n if (!task?.data?.interaction?.media) {\n return false;\n }\n\n return Object.values(task.data.interaction.media).some(\n (mediaObj) =>\n mediaObj &&\n mediaObj.mType === MEDIA_TYPE_MAIN_CALL &&\n mediaObj.participants?.includes(agentId)\n );\n};\n\n/**\n * Checks if the given agent is not in the interaction or has left the interaction\n * @param task - The task to check\n * @param agentId - The agent ID to check\n * @returns true if the agent is not in the interaction or has left, false otherwise\n */\nexport const checkParticipantNotInInteraction = (task: ITask, agentId: string): boolean => {\n if (!task?.data?.interaction?.participants) {\n return true;\n }\n const {data} = task;\n\n return (\n !(agentId in data.interaction.participants) ||\n (agentId in data.interaction.participants && data.interaction.participants[agentId].hasLeft)\n );\n};\n\n/**\n * Determines if a conference is currently in progress based on the number of active agent participants\n * @param data - The task data to check for conference status\n * @returns true if there are 2 or more active agent participants in the main call, false otherwise\n *\n * For Agent B (consulted agent), their task's interactionId may be different from the main call.\n * We use mainInteractionId from the interaction if available, otherwise fallback to interactionId.\n */\nexport const getIsConferenceInProgress = (data: TaskData): boolean => {\n if (!data.interaction) return false;\n\n const mainCallId = data.interaction.mainInteractionId || data.interactionId;\n const mediaMainCall = data.interaction.media?.[mainCallId];\n const participantsInMainCall = new Set(mediaMainCall?.participants);\n const {participants} = data.interaction;\n\n const agentParticipants = new Set();\n participantsInMainCall.forEach((participantId: string) => {\n const participant = participants[participantId];\n if (\n participant &&\n participant.pType !== PARTICIPANT_TYPE.CUSTOMER &&\n participant.pType !== PARTICIPANT_TYPE.SUPERVISOR &&\n participant.pType !== PARTICIPANT_TYPE.VVA &&\n !participant.hasLeft\n ) {\n agentParticipants.add(participantId);\n }\n });\n\n return agentParticipants.size >= 2;\n};\n\n/**\n * Checks if the current agent is a secondary agent in a consultation scenario.\n * Secondary agents are those who were consulted (not the original call owner).\n * @param task - The task object containing interaction details\n * @returns true if this is a secondary agent (consulted party), false otherwise\n */\nexport const isSecondaryAgent = (interaction: Interaction): boolean => {\n if (!interaction.callProcessingDetails) {\n return false;\n }\n\n return (\n interaction.callProcessingDetails.relationshipType === 'consult' &&\n !!interaction.callProcessingDetails.parentInteractionId &&\n interaction.callProcessingDetails.parentInteractionId !== interaction.interactionId\n );\n};\n\n/**\n * Checks if the current agent is a secondary EP-DN (Entry Point Dial Number) agent.\n * This is specifically for telephony consultations to external numbers/entry points.\n * @param interaction - The interaction object\n * @returns true if this is a secondary EP-DN agent in telephony consultation, false otherwise\n */\nexport const isSecondaryEpDnAgent = (interaction: Interaction): boolean => {\n return interaction.mediaType === 'telephony' && isSecondaryAgent(interaction);\n};\n\n/**\n * Checks if the task belongs to a campaign preview interaction.\n * Campaign preview ContactEnded events are terminal cleanup events and should not trigger wrapup.\n */\nexport const isCampaignPreviewTask = (taskData?: TaskData | null): boolean => {\n const outboundType = taskData?.interaction?.outboundType ?? '';\n const cpd = taskData?.interaction?.callProcessingDetails as unknown as\n | Record<string, string | undefined>\n | undefined;\n const campaignType = cpd?.campaignType ?? '';\n\n return (\n CAMPAIGN_PREVIEW_OUTBOUND_TYPES.includes(outboundType) ||\n CAMPAIGN_PREVIEW_CAMPAIGN_TYPES.includes(campaignType)\n );\n};\n\n/**\n * Checks if auto-answer is enabled for the agent participant\n * @param interaction - The interaction object\n * @param agentId - Current agent ID\n * @returns true if auto-answer is enabled, false otherwise\n */\nexport const isAutoAnswerEnabled = (interaction: Interaction, agentId: string): boolean => {\n return interaction.participants?.[agentId]?.autoAnswerEnabled === true;\n};\n\n/**\n * Checks if the interaction is a WebRTC call eligible for auto-answer\n * @param interaction - The interaction object\n * @param loginOption - The agent's login option (BROWSER, AGENT_DN, etc.)\n * @param webRtcEnabled - Whether WebRTC is enabled for the agent\n * @returns true if this is a WebRTC call, false otherwise\n */\nexport const isWebRTCCall = (\n interaction: Interaction,\n loginOption: string,\n webRtcEnabled: boolean\n): boolean => {\n return (\n webRtcEnabled &&\n loginOption === LoginOption.BROWSER &&\n interaction.mediaType === OUTDIAL_MEDIA_TYPE\n );\n};\n\n/**\n * Checks if the interaction is a digital outbound (Email/SMS)\n * @param interaction - The interaction object\n * @returns true if this is a digital outbound, false otherwise\n */\nexport const isDigitalOutbound = (interaction: Interaction): boolean => {\n return (\n interaction.contactDirection?.type === OUTDIAL_DIRECTION &&\n interaction.outboundType === OUTBOUND_TYPE &&\n (interaction.mediaChannel === MEDIA_CHANNEL.EMAIL ||\n interaction.mediaChannel === MEDIA_CHANNEL.SMS)\n );\n};\n\n/**\n * Checks if the outdial was initiated by the current agent\n * @param interaction - The interaction object\n * @param agentId - Current agent ID\n * @returns true if agent initiated the outdial, false otherwise\n */\nexport const hasAgentInitiatedOutdial = (interaction: Interaction, agentId: string): boolean => {\n return (\n interaction.contactDirection?.type === OUTDIAL_DIRECTION &&\n interaction.outboundType === OUTBOUND_TYPE &&\n interaction.callProcessingDetails?.outdialAgentId === agentId &&\n interaction.owner === agentId &&\n !interaction.callProcessingDetails?.BLIND_TRANSFER_IN_PROGRESS\n );\n};\n\n/**\n * Determines if a task should be auto-answered based on interaction data\n * Auto-answer logic handles:\n * 1. WebRTC calls with auto-answer enabled in agent profile\n * 2. Agent-initiated WebRTC outdial calls\n * 3. Agent-initiated digital outbound (Email/SMS) without previous transfers\n *\n * @param taskData - The task data\n * @param agentId - Current agent ID\n * @param loginOption - Agent's login option\n * @param webRtcEnabled - Whether WebRTC is enabled for the agent\n * @returns true if task should be auto-answered, false otherwise\n */\nexport const shouldAutoAnswerTask = (\n taskData: TaskData,\n agentId: string,\n loginOption: string,\n webRtcEnabled: boolean\n): boolean => {\n const {interaction} = taskData;\n\n if (!interaction || !agentId) {\n return false;\n }\n\n // Check if auto-answer is enabled for this agent\n const autoAnswerEnabled = isAutoAnswerEnabled(interaction, agentId);\n\n // Check if this is an agent-initiated outdial\n const agentInitiatedOutdial = hasAgentInitiatedOutdial(interaction, agentId);\n\n // WebRTC telephony calls\n if (isWebRTCCall(interaction, loginOption, webRtcEnabled)) {\n return autoAnswerEnabled || agentInitiatedOutdial;\n }\n\n // Digital outbound (Email/SMS)\n if (isDigitalOutbound(interaction) && agentInitiatedOutdial) {\n // Don't auto-answer if task has been transferred (has previous vteams)\n const hasPreviousVteams = interaction.previousVTeams && interaction.previousVTeams.length > 0;\n\n return !hasPreviousVteams;\n }\n\n return false;\n};\n\n/**\n * Gets the consult media resource ID for switch-call operations.\n * Searches for the consult media leg in the interaction.\n *\n * @param interaction - The interaction object\n * @param consultMediaResourceId - The consult media resource ID from task data\n * @param agentId - Current agent ID\n * @returns The consult media resource ID or undefined\n */\nexport const getConsultMediaResourceId = (\n interaction: Interaction | undefined,\n consultMediaResourceId: string | undefined,\n agentId: string | undefined\n): string | undefined => {\n // First priority: use consultMediaResourceId from task data if available\n if (consultMediaResourceId) {\n return consultMediaResourceId;\n }\n\n // Second priority: search for consult media leg in interaction.media\n if (!interaction?.media || !agentId) {\n return undefined;\n }\n\n // Find the consult media leg where this agent is a participant\n for (const [mediaId, media] of Object.entries(interaction.media)) {\n if (media.mType === 'consult' && media.participants?.includes(agentId)) {\n return mediaId;\n }\n }\n\n return undefined;\n};\n\n/**\n * Checks if a task is a campaign preview reservation that has not yet been accepted.\n * Campaign preview tasks should not trigger incoming call handling until the agent\n * explicitly accepts the preview contact.\n * @param task - The task to check\n * @returns true if the task is a pending campaign preview reservation, false otherwise\n */\nexport const isCampaignPreviewReservation = (task: ITask): boolean => {\n return task?.data?.type === CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WRAPUP = exports.UNHOLD = exports.TRANSFER = exports.TRANSCRIPT_EVENT_MAP = exports.TIMEOUT_PREVIEW_ACCEPT = exports.TASK_MESSAGE_TYPE = exports.TASK_MANAGER_FILE = exports.TASK_FILE = exports.TASK_API = exports.RESUME = exports.PRESERVED_TASK_DATA_FIELDS = exports.PAUSE = exports.METHODS = exports.KEYS_TO_NOT_DELETE = exports.HOLD = exports.END = exports.DIALER_API = exports.CONSULT_TRANSFER = exports.CONSULT_END = exports.CONSULT_CONFERENCE = exports.CONSULT_ACCEPT = exports.CONSULT = exports.CONFERENCE_TRANSFER = exports.CONFERENCE_EXIT = exports.CAMPAIGN_PREVIEW_ACCEPT = void 0;
6
+ exports.WRAPUP = exports.UNHOLD = exports.TRANSFER = exports.TRANSCRIPT_EVENT_MAP = exports.TIMEOUT_PREVIEW_ACCEPT = exports.TASK_MESSAGE_TYPE = exports.TASK_MANAGER_FILE = exports.TASK_FILE = exports.TASK_API = exports.RESUME = exports.PRESERVED_TASK_DATA_FIELDS = exports.PAUSE = exports.METHODS = exports.KEYS_TO_NOT_DELETE = exports.HOLD = exports.END = exports.DIALER_API = exports.CONSULT_TRANSFER = exports.CONSULT_END = exports.CONSULT_CONFERENCE = exports.CONSULT_ACCEPT = exports.CONSULT = exports.CONFERENCE_TRANSFER = exports.CONFERENCE_EXIT = exports.CAMPAIGN_PREVIEW_SKIP = exports.CAMPAIGN_PREVIEW_REMOVE = exports.CAMPAIGN_PREVIEW_ACCEPT = void 0;
7
7
  var _types = require("../config/types");
8
8
  /**
9
9
  * Constants for Task Service
@@ -29,6 +29,8 @@ const CONFERENCE_EXIT = exports.CONFERENCE_EXIT = '/conference/exit';
29
29
  const CONFERENCE_TRANSFER = exports.CONFERENCE_TRANSFER = '/conference/transfer';
30
30
  const DIALER_API = exports.DIALER_API = '/v1/dialer';
31
31
  const CAMPAIGN_PREVIEW_ACCEPT = exports.CAMPAIGN_PREVIEW_ACCEPT = '/accept';
32
+ const CAMPAIGN_PREVIEW_SKIP = exports.CAMPAIGN_PREVIEW_SKIP = '/skip';
33
+ const CAMPAIGN_PREVIEW_REMOVE = exports.CAMPAIGN_PREVIEW_REMOVE = '/remove';
32
34
  /** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */
33
35
  const TIMEOUT_PREVIEW_ACCEPT = exports.TIMEOUT_PREVIEW_ACCEPT = 80000;
34
36
  const TASK_MANAGER_FILE = exports.TASK_MANAGER_FILE = 'taskManager';
@@ -55,6 +57,10 @@ const PRESERVED_TASK_DATA_FIELDS = exports.PRESERVED_TASK_DATA_FIELDS = {
55
57
  */
56
58
  const KEYS_TO_NOT_DELETE = exports.KEYS_TO_NOT_DELETE = Object.values(PRESERVED_TASK_DATA_FIELDS);
57
59
 
60
+ /**
61
+ * Consultation status constants derived from state machine
62
+ * These values are computed and available in task.data.consultStatus
63
+ */
58
64
  // METHOD NAMES
59
65
  const METHODS = exports.METHODS = {
60
66
  // Task class methods
@@ -86,7 +92,8 @@ const METHODS = exports.METHODS = {
86
92
  GET_ALL_TASKS: 'getAllTasks',
87
93
  GET_TASK_MANAGER: 'getTaskManager',
88
94
  SETUP_AUTO_WRAPUP_TIMER: 'setupAutoWrapupTimer',
89
- CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer'
95
+ CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer',
96
+ REQUEST_REAL_TIME_TRANSCRIPTS: 'requestRealTimeTranscripts'
90
97
  };
91
98
  const TRANSCRIPT_EVENT_MAP = exports.TRANSCRIPT_EVENT_MAP = {
92
99
  [_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED]: 'START',
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","TASK_MESSAGE_TYPE","exports","TASK_API","HOLD","UNHOLD","CONSULT","CONSULT_ACCEPT","CONSULT_END","TRANSFER","CONSULT_TRANSFER","PAUSE","RESUME","WRAPUP","END","CONSULT_CONFERENCE","CONFERENCE_EXIT","CONFERENCE_TRANSFER","DIALER_API","CAMPAIGN_PREVIEW_ACCEPT","TIMEOUT_PREVIEW_ACCEPT","TASK_MANAGER_FILE","TASK_FILE","PRESERVED_TASK_DATA_FIELDS","IS_CONSULTED","WRAP_UP_REQUIRED","IS_CONFERENCE_IN_PROGRESS","IS_AUTO_ANSWERING","KEYS_TO_NOT_DELETE","Object","values","METHODS","ACCEPT","TOGGLE_MUTE","DECLINE","PAUSE_RECORDING","RESUME_RECORDING","END_CONSULT","EXIT_CONFERENCE","TRANSFER_CONFERENCE","UPDATE_TASK_DATA","RECONCILE_DATA","HANDLE_INCOMING_WEB_CALL","REGISTER_TASK_LISTENERS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","REMOVE_TASK_FROM_COLLECTION","HANDLE_TASK_CLEANUP","GET_TASK","GET_ALL_TASKS","GET_TASK_MANAGER","SETUP_AUTO_WRAPUP_TIMER","CANCEL_AUTO_WRAPUP_TIMER","TRANSCRIPT_EVENT_MAP","CC_EVENTS","AGENT_CONTACT_ASSIGNED","AGENT_CONSULTING","AGENT_CONSULT_CONFERENCED","AGENT_WRAPUP","AGENT_CONSULT_ENDED","PARTICIPANT_LEFT_CONFERENCE"],"sources":["constants.ts"],"sourcesContent":["/**\n * Constants for Task Service\n * @module @webex/contact-center/services/task/constants\n * @ignore\n */\n\nimport {CC_EVENTS} from '../config/types';\n\nexport const TASK_MESSAGE_TYPE = 'RoutingMessage';\nexport const TASK_API = '/v1/tasks/';\nexport const HOLD = '/hold';\nexport const UNHOLD = '/unhold';\nexport const CONSULT = '/consult';\nexport const CONSULT_ACCEPT = '/consult/accept';\nexport const CONSULT_END = '/consult/end';\nexport const TRANSFER = '/transfer';\nexport const CONSULT_TRANSFER = '/consult/transfer';\nexport const PAUSE = '/record/pause';\nexport const RESUME = '/record/resume';\nexport const WRAPUP = '/wrapup';\nexport const END = '/end';\nexport const CONSULT_CONFERENCE = '/consult/conference';\nexport const CONFERENCE_EXIT = '/conference/exit';\nexport const CONFERENCE_TRANSFER = '/conference/transfer';\nexport const DIALER_API = '/v1/dialer';\nexport const CAMPAIGN_PREVIEW_ACCEPT = '/accept';\n/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */\nexport const TIMEOUT_PREVIEW_ACCEPT = 80000;\nexport const TASK_MANAGER_FILE = 'taskManager';\nexport const TASK_FILE = 'task';\n\n/**\n * Task data field names that should be preserved during reconciliation\n * These fields are retained even if not present in new data during updates\n */\nexport const PRESERVED_TASK_DATA_FIELDS = {\n /** Indicates if the task is in consultation state */\n IS_CONSULTED: 'isConsulted',\n /** Indicates if wrap-up is required for this task */\n WRAP_UP_REQUIRED: 'wrapUpRequired',\n /** Indicates if a conference is currently in progress (2+ active agents) */\n IS_CONFERENCE_IN_PROGRESS: 'isConferenceInProgress',\n /** Indicates if auto-answer is in progress for this task */\n IS_AUTO_ANSWERING: 'isAutoAnswering',\n};\n\n/**\n * Array of task data field names that should not be deleted during reconciliation\n * Used by reconcileData method to preserve important task state fields\n */\nexport const KEYS_TO_NOT_DELETE: string[] = Object.values(PRESERVED_TASK_DATA_FIELDS);\n\n// METHOD NAMES\nexport const METHODS = {\n // Task class methods\n ACCEPT: 'accept',\n TOGGLE_MUTE: 'toggleMute',\n DECLINE: 'decline',\n HOLD: 'hold',\n RESUME: 'resume',\n END: 'end',\n WRAPUP: 'wrapup',\n PAUSE_RECORDING: 'pauseRecording',\n RESUME_RECORDING: 'resumeRecording',\n CONSULT: 'consult',\n END_CONSULT: 'endConsult',\n TRANSFER: 'transfer',\n CONSULT_TRANSFER: 'consultTransfer',\n CONSULT_CONFERENCE: 'consultConference',\n EXIT_CONFERENCE: 'exitConference',\n TRANSFER_CONFERENCE: 'transferConference',\n UPDATE_TASK_DATA: 'updateTaskData',\n RECONCILE_DATA: 'reconcileData',\n\n // TaskManager class methods\n HANDLE_INCOMING_WEB_CALL: 'handleIncomingWebCall',\n REGISTER_TASK_LISTENERS: 'registerTaskListeners',\n HANDLE_REAL_TIME_WEBSOCKET_EVENT: 'handleRealtimeWebsocketEvent',\n REMOVE_TASK_FROM_COLLECTION: 'removeTaskFromCollection',\n HANDLE_TASK_CLEANUP: 'handleTaskCleanup',\n GET_TASK: 'getTask',\n GET_ALL_TASKS: 'getAllTasks',\n GET_TASK_MANAGER: 'getTaskManager',\n SETUP_AUTO_WRAPUP_TIMER: 'setupAutoWrapupTimer',\n CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer',\n};\n\nexport const TRANSCRIPT_EVENT_MAP = {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: 'START',\n [CC_EVENTS.AGENT_CONSULTING]: 'START',\n [CC_EVENTS.AGENT_CONSULT_CONFERENCED]: 'START',\n [CC_EVENTS.AGENT_WRAPUP]: 'STOP',\n [CC_EVENTS.AGENT_CONSULT_ENDED]: 'STOP',\n [CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE]: 'STOP',\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","TASK_MESSAGE_TYPE","exports","TASK_API","HOLD","UNHOLD","CONSULT","CONSULT_ACCEPT","CONSULT_END","TRANSFER","CONSULT_TRANSFER","PAUSE","RESUME","WRAPUP","END","CONSULT_CONFERENCE","CONFERENCE_EXIT","CONFERENCE_TRANSFER","DIALER_API","CAMPAIGN_PREVIEW_ACCEPT","CAMPAIGN_PREVIEW_SKIP","CAMPAIGN_PREVIEW_REMOVE","TIMEOUT_PREVIEW_ACCEPT","TASK_MANAGER_FILE","TASK_FILE","PRESERVED_TASK_DATA_FIELDS","IS_CONSULTED","WRAP_UP_REQUIRED","IS_CONFERENCE_IN_PROGRESS","IS_AUTO_ANSWERING","KEYS_TO_NOT_DELETE","Object","values","METHODS","ACCEPT","TOGGLE_MUTE","DECLINE","PAUSE_RECORDING","RESUME_RECORDING","END_CONSULT","EXIT_CONFERENCE","TRANSFER_CONFERENCE","UPDATE_TASK_DATA","RECONCILE_DATA","HANDLE_INCOMING_WEB_CALL","REGISTER_TASK_LISTENERS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","REMOVE_TASK_FROM_COLLECTION","HANDLE_TASK_CLEANUP","GET_TASK","GET_ALL_TASKS","GET_TASK_MANAGER","SETUP_AUTO_WRAPUP_TIMER","CANCEL_AUTO_WRAPUP_TIMER","REQUEST_REAL_TIME_TRANSCRIPTS","TRANSCRIPT_EVENT_MAP","CC_EVENTS","AGENT_CONTACT_ASSIGNED","AGENT_CONSULTING","AGENT_CONSULT_CONFERENCED","AGENT_WRAPUP","AGENT_CONSULT_ENDED","PARTICIPANT_LEFT_CONFERENCE"],"sources":["constants.ts"],"sourcesContent":["/**\n * Constants for Task Service\n * @module @webex/contact-center/services/task/constants\n * @ignore\n */\n\nimport {CC_EVENTS} from '../config/types';\n\nexport const TASK_MESSAGE_TYPE = 'RoutingMessage';\nexport const TASK_API = '/v1/tasks/';\nexport const HOLD = '/hold';\nexport const UNHOLD = '/unhold';\nexport const CONSULT = '/consult';\nexport const CONSULT_ACCEPT = '/consult/accept';\nexport const CONSULT_END = '/consult/end';\nexport const TRANSFER = '/transfer';\nexport const CONSULT_TRANSFER = '/consult/transfer';\nexport const PAUSE = '/record/pause';\nexport const RESUME = '/record/resume';\nexport const WRAPUP = '/wrapup';\nexport const END = '/end';\nexport const CONSULT_CONFERENCE = '/consult/conference';\nexport const CONFERENCE_EXIT = '/conference/exit';\nexport const CONFERENCE_TRANSFER = '/conference/transfer';\nexport const DIALER_API = '/v1/dialer';\nexport const CAMPAIGN_PREVIEW_ACCEPT = '/accept';\nexport const CAMPAIGN_PREVIEW_SKIP = '/skip';\nexport const CAMPAIGN_PREVIEW_REMOVE = '/remove';\n/** 80-second timeout for accepting preview contact (outbound call setup takes longer than default 20s) */\nexport const TIMEOUT_PREVIEW_ACCEPT = 80000;\nexport const TASK_MANAGER_FILE = 'taskManager';\nexport const TASK_FILE = 'task';\n\n/**\n * Task data field names that should be preserved during reconciliation\n * These fields are retained even if not present in new data during updates\n */\nexport const PRESERVED_TASK_DATA_FIELDS = {\n /** Indicates if the task is in consultation state */\n IS_CONSULTED: 'isConsulted',\n /** Indicates if wrap-up is required for this task */\n WRAP_UP_REQUIRED: 'wrapUpRequired',\n /** Indicates if a conference is currently in progress (2+ active agents) */\n IS_CONFERENCE_IN_PROGRESS: 'isConferenceInProgress',\n /** Indicates if auto-answer is in progress for this task */\n IS_AUTO_ANSWERING: 'isAutoAnswering',\n};\n\n/**\n * Array of task data field names that should not be deleted during reconciliation\n * Used by reconcileData method to preserve important task state fields\n */\nexport const KEYS_TO_NOT_DELETE: string[] = Object.values(PRESERVED_TASK_DATA_FIELDS);\n\n/**\n * Consultation status constants derived from state machine\n * These values are computed and available in task.data.consultStatus\n */\n// METHOD NAMES\nexport const METHODS = {\n // Task class methods\n ACCEPT: 'accept',\n TOGGLE_MUTE: 'toggleMute',\n DECLINE: 'decline',\n HOLD: 'hold',\n RESUME: 'resume',\n END: 'end',\n WRAPUP: 'wrapup',\n PAUSE_RECORDING: 'pauseRecording',\n RESUME_RECORDING: 'resumeRecording',\n CONSULT: 'consult',\n END_CONSULT: 'endConsult',\n TRANSFER: 'transfer',\n CONSULT_TRANSFER: 'consultTransfer',\n CONSULT_CONFERENCE: 'consultConference',\n EXIT_CONFERENCE: 'exitConference',\n TRANSFER_CONFERENCE: 'transferConference',\n UPDATE_TASK_DATA: 'updateTaskData',\n RECONCILE_DATA: 'reconcileData',\n\n // TaskManager class methods\n HANDLE_INCOMING_WEB_CALL: 'handleIncomingWebCall',\n REGISTER_TASK_LISTENERS: 'registerTaskListeners',\n HANDLE_REAL_TIME_WEBSOCKET_EVENT: 'handleRealtimeWebsocketEvent',\n REMOVE_TASK_FROM_COLLECTION: 'removeTaskFromCollection',\n HANDLE_TASK_CLEANUP: 'handleTaskCleanup',\n GET_TASK: 'getTask',\n GET_ALL_TASKS: 'getAllTasks',\n GET_TASK_MANAGER: 'getTaskManager',\n SETUP_AUTO_WRAPUP_TIMER: 'setupAutoWrapupTimer',\n CANCEL_AUTO_WRAPUP_TIMER: 'cancelAutoWrapupTimer',\n REQUEST_REAL_TIME_TRANSCRIPTS: 'requestRealTimeTranscripts',\n};\n\nexport const TRANSCRIPT_EVENT_MAP = {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: 'START',\n [CC_EVENTS.AGENT_CONSULTING]: 'START',\n [CC_EVENTS.AGENT_CONSULT_CONFERENCED]: 'START',\n [CC_EVENTS.AGENT_WRAPUP]: 'STOP',\n [CC_EVENTS.AGENT_CONSULT_ENDED]: 'STOP',\n [CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE]: 'STOP',\n};\n"],"mappings":"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","ignoreList":[]}
@@ -105,6 +105,84 @@ function aqmDialer(aqm) {
105
105
  },
106
106
  errId: 'Service.aqm.dialer.acceptPreviewContact'
107
107
  }
108
+ })),
109
+ /**
110
+ * Skips a campaign preview contact, requesting the next contact from the campaign.
111
+ *
112
+ * @param {Object} p - Parameters object.
113
+ * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
114
+ * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
115
+ *
116
+ * Emits:
117
+ * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
118
+ * - `CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED` on failure
119
+ * @ignore
120
+ */
121
+ skipPreviewContact: aqm.req(p => ({
122
+ url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_SKIP}`,
123
+ host: _constants.WCC_API_GATEWAY,
124
+ data: {},
125
+ method: _types2.HTTP_METHODS.POST,
126
+ err: _Utils.createErrDetailsObject,
127
+ notifSuccess: {
128
+ bind: {
129
+ type: _constants2.TASK_MESSAGE_TYPE,
130
+ data: {
131
+ type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
132
+ interactionId: p.data.interactionId
133
+ }
134
+ },
135
+ msg: {}
136
+ },
137
+ notifFail: {
138
+ bind: {
139
+ type: _constants2.TASK_MESSAGE_TYPE,
140
+ data: {
141
+ type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED,
142
+ campaignId: p.data.campaignId
143
+ }
144
+ },
145
+ errId: 'Service.aqm.dialer.skipPreviewContact'
146
+ }
147
+ })),
148
+ /**
149
+ * Removes a campaign preview contact from the campaign list entirely.
150
+ *
151
+ * @param {Object} p - Parameters object.
152
+ * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
153
+ * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
154
+ *
155
+ * Emits:
156
+ * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
157
+ * - `CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED` on failure
158
+ * @ignore
159
+ */
160
+ removePreviewContact: aqm.req(p => ({
161
+ url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_REMOVE}`,
162
+ host: _constants.WCC_API_GATEWAY,
163
+ data: {},
164
+ method: _types2.HTTP_METHODS.POST,
165
+ err: _Utils.createErrDetailsObject,
166
+ notifSuccess: {
167
+ bind: {
168
+ type: _constants2.TASK_MESSAGE_TYPE,
169
+ data: {
170
+ type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
171
+ interactionId: p.data.interactionId
172
+ }
173
+ },
174
+ msg: {}
175
+ },
176
+ notifFail: {
177
+ bind: {
178
+ type: _constants2.TASK_MESSAGE_TYPE,
179
+ data: {
180
+ type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED,
181
+ campaignId: p.data.campaignId
182
+ }
183
+ },
184
+ errId: 'Service.aqm.dialer.removePreviewContact'
185
+ }
108
186
  }))
109
187
  };
110
188
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","_constants","_types2","_Utils","_constants2","aqmDialer","aqm","startOutdial","req","p","url","TASK_API","host","WCC_API_GATEWAY","data","err","notifSuccess","bind","type","TASK_MESSAGE_TYPE","CC_EVENTS","AGENT_OFFER_CONTACT","msg","notifFail","AGENT_OUTBOUND_FAILED","errId","acceptPreviewContact","DIALER_API","encodeURIComponent","campaignId","interactionId","CAMPAIGN_PREVIEW_ACCEPT","method","HTTP_METHODS","POST","timeout","TIMEOUT_PREVIEW_ACCEPT","AGENT_CONTACT_ASSIGNED","CONTACT_ENDED","__typeMap","typeField","conditions","reservationInteractionId","CAMPAIGN_PREVIEW_ACCEPT_FAILED"],"sources":["dialer.ts"],"sourcesContent":["import {CC_EVENTS} from '../config/types';\nimport {WCC_API_GATEWAY} from '../constants';\nimport {HTTP_METHODS} from '../../types';\nimport {createErrDetailsObject as err} from '../core/Utils';\nimport {\n TASK_MESSAGE_TYPE,\n TASK_API,\n DIALER_API,\n CAMPAIGN_PREVIEW_ACCEPT,\n TIMEOUT_PREVIEW_ACCEPT,\n} from './constants';\nimport * as Contact from './types';\nimport AqmReqs from '../core/aqm-reqs';\n\n/**\n * Returns an object with AQM dialer functions used for outbound contact handling.\n *\n * @param {AqmReqs} aqm - An instance of AQM request handler.\n * @returns {{\n * startOutdial: (params: {data: Contact.DialerPayload}) => Promise<any>\n * }} Object containing methods for outbound dialing.\n * @ignore\n */\nexport default function aqmDialer(aqm: AqmReqs) {\n return {\n /**\n * Initiates an outbound contact (outdial) request.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.DialerPayload} p.data - Payload for the outbound call.\n * @returns {Promise<any>} A promise that resolves or rejects based on the outbound call response.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_OFFER_CONTACT` on success\n * - `CC_EVENTS.AGENT_OUTBOUND_FAILED` on failure\n * @ignore\n */\n startOutdial: aqm.req((p: {data: Contact.DialerPayload}) => ({\n url: `${TASK_API}`,\n host: WCC_API_GATEWAY,\n data: p.data,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OFFER_CONTACT},\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OUTBOUND_FAILED},\n },\n errId: 'Service.aqm.dialer.startOutdial',\n },\n })),\n\n /**\n * Accepts a campaign preview contact, initiating the outbound call.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_CONTACT_ASSIGNED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED` on failure\n * @ignore\n */\n acceptPreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_ACCEPT}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n timeout: TIMEOUT_PREVIEW_ACCEPT,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.AGENT_CONTACT_ASSIGNED, CC_EVENTS.CONTACT_ENDED],\n __typeMap: {\n typeField: 'type',\n conditions: {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: {\n reservationInteractionId: p.data.interactionId,\n },\n [CC_EVENTS.CONTACT_ENDED]: {interactionId: p.data.interactionId},\n },\n },\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.acceptPreviewContact',\n },\n })),\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASK,SAASA,CAACC,GAAY,EAAE;EAC9C,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAED,GAAG,CAACE,GAAG,CAAEC,CAAgC,KAAM;MAC3DC,GAAG,EAAE,GAAGC,oBAAQ,EAAE;MAClBC,IAAI,EAAEC,0BAAe;MACrBC,IAAI,EAAEL,CAAC,CAACK,IAAI;MACZC,GAAG,EAAHA,6BAAG;MACHC,YAAY,EAAE;QACZC,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACC;UAAmB;QAC5C,CAAC;QACDC,GAAG,EAAE,CAAC;MACR,CAAC;MACDC,SAAS,EAAE;QACTN,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACI;UAAqB;QAC9C,CAAC;QACDC,KAAK,EAAE;MACT;IACF,CAAC,CAAC,CAAC;IAEH;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,oBAAoB,EAAEpB,GAAG,CAACE,GAAG,CAAEC,CAAwC,KAAM;MAC3EC,GAAG,EAAE,GAAGiB,sBAAU,aAAaC,kBAAkB,CAACnB,CAAC,CAACK,IAAI,CAACe,UAAU,CAAC,iBAClEpB,CAAC,CAACK,IAAI,CAACgB,aAAa,GACnBC,mCAAuB,EAAE;MAC5BnB,IAAI,EAAEC,0BAAe;MACrBC,IAAI,EAAE,CAAC,CAAC;MACRkB,MAAM,EAAEC,oBAAY,CAACC,IAAI;MACzBC,OAAO,EAAEC,kCAAsB;MAC/BrB,GAAG,EAAHA,6BAAG;MACHC,YAAY,EAAE;QACZC,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YACJI,IAAI,EAAE,CAACE,gBAAS,CAACiB,sBAAsB,EAAEjB,gBAAS,CAACkB,aAAa,CAAC;YACjEC,SAAS,EAAE;cACTC,SAAS,EAAE,MAAM;cACjBC,UAAU,EAAE;gBACV,CAACrB,gBAAS,CAACiB,sBAAsB,GAAG;kBAClCK,wBAAwB,EAAEjC,CAAC,CAACK,IAAI,CAACgB;gBACnC,CAAC;gBACD,CAACV,gBAAS,CAACkB,aAAa,GAAG;kBAACR,aAAa,EAAErB,CAAC,CAACK,IAAI,CAACgB;gBAAa;cACjE;YACF;UACF;QACF,CAAC;QACDR,GAAG,EAAE,CAAC;MACR,CAAC;MACDC,SAAS,EAAE;QACTN,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACuB,8BAA8B;YAAEd,UAAU,EAAEpB,CAAC,CAACK,IAAI,CAACe;UAAU;QACtF,CAAC;QACDJ,KAAK,EAAE;MACT;IACF,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","_constants","_types2","_Utils","_constants2","aqmDialer","aqm","startOutdial","req","p","url","TASK_API","host","WCC_API_GATEWAY","data","err","notifSuccess","bind","type","TASK_MESSAGE_TYPE","CC_EVENTS","AGENT_OFFER_CONTACT","msg","notifFail","AGENT_OUTBOUND_FAILED","errId","acceptPreviewContact","DIALER_API","encodeURIComponent","campaignId","interactionId","CAMPAIGN_PREVIEW_ACCEPT","method","HTTP_METHODS","POST","timeout","TIMEOUT_PREVIEW_ACCEPT","AGENT_CONTACT_ASSIGNED","CONTACT_ENDED","__typeMap","typeField","conditions","reservationInteractionId","CAMPAIGN_PREVIEW_ACCEPT_FAILED","skipPreviewContact","CAMPAIGN_PREVIEW_SKIP","CAMPAIGN_CONTACT_UPDATED","CAMPAIGN_PREVIEW_SKIP_FAILED","removePreviewContact","CAMPAIGN_PREVIEW_REMOVE","CAMPAIGN_PREVIEW_REMOVE_FAILED"],"sources":["dialer.ts"],"sourcesContent":["import {CC_EVENTS} from '../config/types';\nimport {WCC_API_GATEWAY} from '../constants';\nimport {HTTP_METHODS} from '../../types';\nimport {createErrDetailsObject as err} from '../core/Utils';\nimport {\n TASK_MESSAGE_TYPE,\n TASK_API,\n DIALER_API,\n CAMPAIGN_PREVIEW_ACCEPT,\n CAMPAIGN_PREVIEW_SKIP,\n CAMPAIGN_PREVIEW_REMOVE,\n TIMEOUT_PREVIEW_ACCEPT,\n} from './constants';\nimport * as Contact from './types';\nimport AqmReqs from '../core/aqm-reqs';\n\n/**\n * Returns an object with AQM dialer functions used for outbound contact handling.\n *\n * @param {AqmReqs} aqm - An instance of AQM request handler.\n * @returns {{\n * startOutdial: (params: {data: Contact.DialerPayload}) => Promise<any>\n * }} Object containing methods for outbound dialing.\n * @ignore\n */\nexport default function aqmDialer(aqm: AqmReqs) {\n return {\n /**\n * Initiates an outbound contact (outdial) request.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.DialerPayload} p.data - Payload for the outbound call.\n * @returns {Promise<any>} A promise that resolves or rejects based on the outbound call response.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_OFFER_CONTACT` on success\n * - `CC_EVENTS.AGENT_OUTBOUND_FAILED` on failure\n * @ignore\n */\n startOutdial: aqm.req((p: {data: Contact.DialerPayload}) => ({\n url: `${TASK_API}`,\n host: WCC_API_GATEWAY,\n data: p.data,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OFFER_CONTACT},\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OUTBOUND_FAILED},\n },\n errId: 'Service.aqm.dialer.startOutdial',\n },\n })),\n\n /**\n * Accepts a campaign preview contact, initiating the outbound call.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_CONTACT_ASSIGNED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED` on failure\n * @ignore\n */\n acceptPreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_ACCEPT}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n timeout: TIMEOUT_PREVIEW_ACCEPT,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.AGENT_CONTACT_ASSIGNED, CC_EVENTS.CONTACT_ENDED],\n __typeMap: {\n typeField: 'type',\n conditions: {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: {\n reservationInteractionId: p.data.interactionId,\n },\n [CC_EVENTS.CONTACT_ENDED]: {interactionId: p.data.interactionId},\n },\n },\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.acceptPreviewContact',\n },\n })),\n\n /**\n * Skips a campaign preview contact, requesting the next contact from the campaign.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED` on failure\n * @ignore\n */\n skipPreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_SKIP}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, CC_EVENTS.CONTACT_ENDED],\n interactionId: p.data.interactionId,\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.skipPreviewContact',\n },\n })),\n\n /**\n * Removes a campaign preview contact from the campaign list entirely.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED` on failure\n * @ignore\n */\n removePreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_REMOVE}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, CC_EVENTS.CONTACT_ENDED],\n interactionId: p.data.interactionId,\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.removePreviewContact',\n },\n })),\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _constants = require("../../../constants");
8
+ var _Utils = require("../../core/Utils");
9
+ var _Task = _interopRequireDefault(require("../Task"));
10
+ var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
11
+ var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
12
+ var _constants2 = require("../../../metrics/constants");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ class Digital extends _Task.default {
15
+ constructor(contact, data, wrapupData, agentId) {
16
+ super(contact, data, {
17
+ isEndTaskEnabled: true,
18
+ isEndConsultEnabled: false,
19
+ isRecordingEnabled: false
20
+ }, wrapupData, agentId);
21
+ }
22
+
23
+ /**
24
+ * Refresh the digital task with the latest backend payload and recompute UI controls.
25
+ */
26
+ updateTaskData(newData, shouldOverwrite = false) {
27
+ super.updateTaskData(newData, shouldOverwrite);
28
+ return this;
29
+ }
30
+
31
+ /**
32
+ * This is used for incoming digital task accept by agent.
33
+ *
34
+ * @returns Promise<TaskResponse>
35
+ * @throws Error
36
+ * @example
37
+ * ```typescript
38
+ * task.accept().then(()=>{}).catch(()=>{})
39
+ * ```
40
+ */
41
+ async accept() {
42
+ try {
43
+ _loggerProxy.default.info(`Accepting task`, {
44
+ module: _constants.CC_FILE,
45
+ method: _constants.METHODS.ACCEPT,
46
+ interactionId: this.data.interactionId
47
+ });
48
+ this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED]);
49
+ const response = await this.contact.accept({
50
+ interactionId: this.data.interactionId
51
+ });
52
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, {
53
+ taskId: this.data.interactionId,
54
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponse(response)
55
+ }, ['operational', 'behavioral', 'business']);
56
+ _loggerProxy.default.log(`Task accepted successfully`, {
57
+ module: _constants.CC_FILE,
58
+ method: _constants.METHODS.ACCEPT,
59
+ trackingId: response.trackingId,
60
+ interactionId: this.data.interactionId
61
+ });
62
+ return response;
63
+ } catch (error) {
64
+ const {
65
+ error: detailedError
66
+ } = (0, _Utils.getErrorDetails)(error, _constants.METHODS.ACCEPT, _constants.CC_FILE);
67
+ this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED, {
68
+ taskId: this.data.interactionId,
69
+ error: error.toString(),
70
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
71
+ }, ['operational', 'behavioral', 'business']);
72
+ throw detailedError;
73
+ }
74
+ }
75
+ }
76
+ exports.default = Digital;
77
+ //# sourceMappingURL=Digital.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_Utils","_Task","_interopRequireDefault","_loggerProxy","_MetricsManager","_constants2","e","__esModule","default","Digital","Task","constructor","contact","data","wrapupData","agentId","isEndTaskEnabled","isEndConsultEnabled","isRecordingEnabled","updateTaskData","newData","shouldOverwrite","accept","LoggerProxy","info","module","CC_FILE","method","METHODS","ACCEPT","interactionId","metricsManager","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","response","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","log","trackingId","error","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","exports"],"sources":["Digital.ts"],"sourcesContent":["import {CC_FILE, METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {IDigital, TaskResponse, TaskData} from '../types';\nimport {WrapupData} from '../../config/types';\nimport Task from '../Task';\nimport routingContact from '../contact';\nimport LoggerProxy from '../../../logger-proxy';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\n\nexport default class Digital extends Task implements IDigital {\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n super(\n contact,\n data,\n {\n isEndTaskEnabled: true,\n isEndConsultEnabled: false,\n isRecordingEnabled: false,\n },\n wrapupData,\n agentId\n );\n }\n\n /**\n * Refresh the digital task with the latest backend payload and recompute UI controls.\n */\n public updateTaskData(newData: TaskData, shouldOverwrite = false): IDigital {\n super.updateTaskData(newData, shouldOverwrite);\n\n return this;\n }\n\n /**\n * This is used for incoming digital task accept by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.accept().then(()=>{}).catch(()=>{})\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Accepting task`, {\n module: CC_FILE,\n method: METHODS.ACCEPT,\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n const response = await this.contact.accept({interactionId: this.data.interactionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Task accepted successfully`, {\n module: CC_FILE,\n method: METHODS.ACCEPT,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, METHODS.ACCEPT, CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}