@webex/contact-center 3.12.0-next.86 → 3.12.0-next.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/metrics/constants.js +4 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +96 -22
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/task/TaskManager.js +3 -1
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/metrics/constants.d.ts +4 -2
- package/dist/types/services/ApiAiAssistant.d.ts +16 -6
- package/dist/types/types.d.ts +48 -7
- package/dist/types.js +36 -5
- package/dist/types.js.map +1 -1
- package/dist/webex.js +1 -1
- package/package.json +8 -8
- package/src/constants.ts +2 -1
- package/src/metrics/constants.ts +6 -2
- package/src/services/ApiAiAssistant.ts +119 -25
- package/src/services/task/TaskManager.ts +1 -1
- package/src/types.ts +51 -7
- package/test/unit/spec/cc.ts +1 -1
- package/test/unit/spec/services/ApiAiAssistant.ts +73 -20
- package/test/unit/spec/services/task/TaskManager.ts +2 -2
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_types","_constants","_constants2","_types2","_types3","_loggerProxy","_TaskUtils","_TaskFactory","_WebRTC","_stateMachine","_taskDataNormalizer","e","__esModule","default","CC_EVENT_SET","Set","Object","values","CC_EVENTS","isCcEvent","value","has","TaskManager","EventEmitter","constructor","apiAIAssistant","contact","webCallingService","webSocketManager","rtdWebSocketManager","taskCollection","webRtcEnabled","registerTaskListeners","registerIncomingCallEvent","handleRealtimeWebsocketEvent","event","payload","JSON","parse","interactionId","data","conversationId","task","LoggerProxy","info","module","TASK_MANAGER_FILE","method","METHODS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","type","REAL_TIME_TRANSCRIPTION","SUGGESTED_RESPONSE","emit","error","setConfigFlags","configFlags","setWrapupData","wrapupData","setAgentId","agentId","getAgentId","setWebRtcEnabled","handleIncomingWebCall","call","currentTask","find","interaction","mediaType","isCampaignPreviewReservation","mapCallToTask","getCallId","log","HANDLE_INCOMING_WEB_CALL","eventPayload","mapEventToTaskStateMachineEvent","AGENT_CONTACT_RESERVED","sendStateMachineEvent","on","LINE_EVENTS","INCOMING_CALL","unregisterIncomingCallEvent","off","ccEvent","mediaResourceId","media","isCampaignPreviewTask","TaskEvent","TASK_INCOMING","taskData","isCampaignReservationAccept","AGENT_OFFER_CAMPAIGN_RESERVATION","AGENT_OFFER_CONTACT","TASK_OFFERED","AGENT_CONTACT","HYDRATE","CONTACT_UPDATED","CONTACT_OWNER_CHANGED","AGENT_OFFER_CONSULT","OFFER_CONSULT","isConsulted","AGENT_CONTACT_ASSIGNED","ASSIGN","AGENT_CONTACT_HELD","HOLD_SUCCESS","AGENT_CONTACT_UNHELD","UNHOLD_SUCCESS","AGENT_CONSULT_CREATED","CONSULT_CREATED","AGENT_CONSULTING","CONSULTING_ACTIVE","consultDestinationAgentJoined","AGENT_CONSULT_ENDED","CONSULT_END","AGENT_CONSULT_FAILED","AGENT_CTQ_FAILED","CONSULT_FAILED","reason","AGENT_CTQ_CANCELLED","CTQ_CANCEL","AGENT_CTQ_CANCEL_FAILED","CTQ_CANCEL_FAILED","AGENT_BLIND_TRANSFERRED","AGENT_CONSULT_TRANSFERRED","AGENT_VTEAM_TRANSFERRED","TRANSFER_SUCCESS","AGENT_WRAPUP","TASK_WRAPUP","wrapUpRequired","AGENT_CONTACT_UNASSIGNED","AGENT_BLIND_TRANSFER_FAILED","AGENT_VTEAM_TRANSFER_FAILED","AGENT_CONSULT_TRANSFER_FAILED","AGENT_CONFERENCE_TRANSFER_FAILED","TRANSFER_FAILED","CONTACT_ENDED","agentsPendingWrapUp","includes","AGENT_INVITE_FAILED","INVITE_FAILED","AGENT_CONTACT_ASSIGN_FAILED","ASSIGN_FAILED","AGENT_CONTACT_OFFER_RONA","RONA","AGENT_OUTBOUND_FAILED","OUTBOUND_FAILED","CAMPAIGN_PREVIEW_ACCEPT_FAILED","CAMPAIGN_PREVIEW_SKIP_FAILED","CAMPAIGN_PREVIEW_REMOVE_FAILED","CONTACT_RECORDING_STARTED","RECORDING_STARTED","CONTACT_RECORDING_PAUSED","PAUSE_RECORDING","CONTACT_RECORDING_RESUMED","RESUME_RECORDING","AGENT_WRAPPEDUP","WRAPUP_COMPLETE","AGENT_CONSULT_CONFERENCED","AGENT_CONSULT_CONFERENCING","PARTICIPANT_JOINED_CONFERENCE","CONFERENCE_START","AGENT_CONSULT_CONFERENCE_FAILED","CONFERENCE_FAILED","AGENT_CONSULT_CONFERENCE_ENDED","CONFERENCE_END","PARTICIPANT_LEFT_CONFERENCE","PARTICIPANT_LEAVE","participantId","AGENT_CONFERENCE_TRANSFERRED","TRANSFER_CONFERENCE_SUCCESS","message","parseWebSocketMessage","eventContext","prepareEventContext","actions","handleTaskLifecycleEvent","stateMachineEvent","updateTaskData","eventType","PARTICIPANT_POST_CALL_ACTIVITY","TASK_EVENTS","TASK_POST_CALL_ACTIVITY","requestRealTimeTranscripts","keepalive","normalizeTaskData","reservationInteractionId","wasConsultedTask","Boolean","computeWrapUpRequired","undefined","adjustedPayload","context","handleContactReserved","handleAgentContact","CONTACT_MERGED","handleContactMergedEvent","handleCampaignPreviewReservation","CAMPAIGN_CONTACT_UPDATED","handleCampaignContactUpdated","existingCpd","callProcessingDetails","updatedData","campaignFields","campaignPreviewAutoAction","campaignPreviewOfferTimeout","campaignPreviewSkipDisabled","campaignPreviewRemoveDisabled","REGISTER_TASK_LISTENERS","hasCpd","autoAction","skipDisabled","removeDisabled","TASK_CAMPAIGN_CONTACT_UPDATED","TaskFactory","createTask","isConferenceInProgress","isAutoAnswering","setupTaskListeners","isConsultedTask","isSecondaryEpDnAgent","shouldAutoAnswer","shouldAutoAnswerTask","loginOption","participants","isWrapUp","getIsConferenceInProgress","Error","snapshot","stateMachineService","getSnapshot","isConsultingFlow","state","destAgentId","consultDestinationAgentId","destinationType","consultDestinationType","t","TASK_CAMPAIGN_PREVIEW_RESERVATION","TASK_HYDRATE","TASK_MULTI_LOGIN_HYDRATE","TASK_CLEANUP","options","handleTaskCleanup","removeFromCollection","removeTaskFromCollection","cancelAutoWrapupTimer","REMOVE_TASK_FROM_COLLECTION","childInteractionId","TASK_MERGED","LoginOption","BROWSER","MEDIA_CHANNEL","TELEPHONY","WebRTC","unregisterWebCallListeners","cleanUpCall","isOutdial","outboundType","isNew","needsWrapUp","action","TRANSCRIPT_EVENT_MAP","aiFeature","realtimeTranscripts","enable","sendEvent","AIAssistantEventType","CUSTOM_EVENT","AIAssistantEventName","GET_TRANSCRIPTS","catch","REQUEST_REAL_TIME_TRANSCRIPTS","getTask","taskId","getAllTasks","getTaskManager","taskManager","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {ICall, LINE_EVENTS} from '@webex/calling';\nimport {WebSocketManager} from '../core/websocket/WebSocketManager';\nimport routingContact from './contact';\nimport WebCallingService from '../WebCallingService';\nimport {\n MEDIA_CHANNEL,\n TASK_EVENTS,\n TaskData,\n TaskId,\n ITask,\n WebSocketPayload,\n WebSocketMessage,\n TaskEventActions,\n EventContext,\n} from './types';\nimport {TASK_MANAGER_FILE} from '../../constants';\nimport {METHODS, TRANSCRIPT_EVENT_MAP} from './constants';\nimport {CC_EVENTS, WrapupData} from '../config/types';\nimport {ConfigFlags, LoginOption, AIAssistantEventType, AIAssistantEventName} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport {\n getIsConferenceInProgress,\n isCampaignPreviewTask,\n isCampaignPreviewReservation,\n isSecondaryEpDnAgent,\n shouldAutoAnswerTask,\n} from './TaskUtils';\nimport TaskFactory from './TaskFactory';\nimport WebRTC from './voice/WebRTC';\nimport {TaskEvent, type TaskEventPayload} from './state-machine';\nimport {normalizeTaskData} from './taskDataNormalizer';\nimport {ApiAIAssistant} from '../ApiAiAssistant';\n\nconst CC_EVENT_SET = new Set<CC_EVENTS>(Object.values(CC_EVENTS) as CC_EVENTS[]);\n\nconst isCcEvent = (value: string): value is CC_EVENTS => CC_EVENT_SET.has(value as CC_EVENTS);\n\n/** @internal */\nexport default class TaskManager extends EventEmitter {\n private call: ICall;\n private contact: ReturnType<typeof routingContact>;\n /**\n * Collection of tasks indexed by TaskId\n * @type {Record<TaskId, ITask>}\n * @private\n */\n private taskCollection: Record<TaskId, ITask>;\n private webCallingService: WebCallingService;\n private webSocketManager: WebSocketManager;\n private rtdWebSocketManager: WebSocketManager;\n // eslint-disable-next-line no-use-before-define\n private static taskManager: TaskManager;\n private configFlags?: ConfigFlags;\n private wrapupData: WrapupData;\n private agentId: string;\n private webRtcEnabled: boolean;\n private apiAIAssistant?: ApiAIAssistant;\n /**\n * @param contact - Routing Contact layer. Talks to AQMReq layer to convert events to promises\n * @param webCallingService - Webrtc Service Layer\n * @param webSocketManager - Websocket Manager to maintain websocket connection and keepalives\n */\n constructor(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager,\n rtdWebSocketManager: WebSocketManager\n ) {\n super();\n this.apiAIAssistant = apiAIAssistant;\n this.contact = contact;\n this.webCallingService = webCallingService;\n this.webSocketManager = webSocketManager;\n this.rtdWebSocketManager = rtdWebSocketManager;\n this.taskCollection = {};\n this.webRtcEnabled = false;\n\n this.registerTaskListeners();\n this.registerIncomingCallEvent();\n }\n\n public handleRealtimeWebsocketEvent(event: string) {\n try {\n const payload = JSON.parse(event);\n\n const interactionId = payload?.data?.data?.conversationId;\n if (!interactionId) return;\n\n const task = this.taskCollection[interactionId];\n if (!task) {\n LoggerProxy.info(`Realtime transcription task not found`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n interactionId,\n });\n\n return;\n }\n\n switch (payload.type) {\n case CC_EVENTS.REAL_TIME_TRANSCRIPTION:\n case CC_EVENTS.SUGGESTED_RESPONSE:\n task.emit(payload.type, payload.data);\n break;\n }\n } catch (error) {\n LoggerProxy.error('Failed to parse RTD WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n error,\n });\n }\n }\n\n /**\n * Set config flags for task creation\n */\n public setConfigFlags(configFlags: ConfigFlags) {\n this.configFlags = configFlags;\n }\n\n /**\n * Set wrapup configuration data\n */\n public setWrapupData(wrapupData: WrapupData) {\n this.wrapupData = wrapupData;\n }\n\n /**\n * Set agent ID for task operations\n */\n public setAgentId(agentId: string) {\n this.agentId = agentId;\n }\n\n /**\n * Gets the current agent ID\n * @returns {string} The agent ID set for this task manager instance\n * @public\n */\n public getAgentId(): string {\n return this.agentId;\n }\n\n public setWebRtcEnabled(webRtcEnabled: boolean) {\n this.webRtcEnabled = webRtcEnabled;\n }\n\n private handleIncomingWebCall = (call: ICall) => {\n const currentTask = Object.values(this.taskCollection).find(\n (task) =>\n task.data.interaction.mediaType === 'telephony' && !isCampaignPreviewReservation(task)\n );\n\n if (currentTask) {\n this.webCallingService.mapCallToTask(call.getCallId(), currentTask.data.interactionId);\n LoggerProxy.log(`Call mapped to task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_INCOMING_WEB_CALL,\n interactionId: currentTask.data.interactionId,\n });\n\n // Send TASK_INCOMING to state machine - it will emit on the task object\n const eventPayload = TaskManager.mapEventToTaskStateMachineEvent(\n CC_EVENTS.AGENT_CONTACT_RESERVED,\n currentTask.data\n );\n if (eventPayload && currentTask) {\n currentTask.sendStateMachineEvent(eventPayload);\n }\n }\n this.call = call;\n };\n\n public registerIncomingCallEvent() {\n this.webCallingService.on(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n public unregisterIncomingCallEvent() {\n this.webCallingService.off(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n /**\n * Map WebSocket CC_EVENTS to state machine TaskEvent\n * @param ccEvent - The CC_EVENT type from WebSocket\n * @param payload - The event payload\n * @param agentId - Optional agent ID for state detection (needed for HYDRATE)\n * @returns TaskEventPayload for state machine or null if no mapping\n */\n private static mapEventToTaskStateMachineEvent(\n ccEvent: CC_EVENTS,\n payload: WebSocketPayload,\n agentId?: string\n ): TaskEventPayload | null {\n const mediaResourceId =\n payload.mediaResourceId ||\n payload.interaction?.media?.[payload.interactionId]?.mediaResourceId;\n\n switch (ccEvent) {\n // CC -> TaskEvent mappings (see TaskStateMachine comment for quick reference)\n case CC_EVENTS.AGENT_CONTACT_RESERVED: // AgentContactReserved -> TASK_INCOMING\n if (isCampaignPreviewTask(payload)) {\n return {\n type: TaskEvent.TASK_INCOMING,\n taskData: payload,\n isCampaignReservationAccept: true,\n };\n }\n\n return {type: TaskEvent.TASK_INCOMING, taskData: payload};\n\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION: // -> TASK_INCOMING (campaign branch via guard)\n return {\n type: TaskEvent.TASK_INCOMING,\n taskData: payload,\n isCampaignReservationAccept: true,\n };\n\n case CC_EVENTS.AGENT_OFFER_CONTACT: // AgentOfferContact -> TASK_OFFERED\n return {type: TaskEvent.TASK_OFFERED, taskData: payload};\n\n case CC_EVENTS.AGENT_CONTACT: // AgentContact -> HYDRATE\n // Include agentId for state detection (e.g., checking isWrapUp in participant data)\n return {type: TaskEvent.HYDRATE, taskData: payload, agentId};\n\n case CC_EVENTS.CONTACT_UPDATED:\n return {type: TaskEvent.CONTACT_UPDATED, taskData: payload};\n case CC_EVENTS.CONTACT_OWNER_CHANGED:\n return {type: TaskEvent.CONTACT_OWNER_CHANGED, taskData: payload};\n\n case CC_EVENTS.AGENT_OFFER_CONSULT: // AgentOfferConsult -> OFFER_CONSULT\n return {\n type: TaskEvent.OFFER_CONSULT,\n taskData: {...payload, isConsulted: true},\n };\n\n case CC_EVENTS.AGENT_CONTACT_ASSIGNED: // AgentContactAssigned -> ASSIGN\n return {type: TaskEvent.ASSIGN, taskData: payload};\n\n case CC_EVENTS.AGENT_CONTACT_HELD:\n return {\n type: TaskEvent.HOLD_SUCCESS,\n mediaResourceId: mediaResourceId || '',\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONTACT_UNHELD:\n return {\n type: TaskEvent.UNHOLD_SUCCESS,\n mediaResourceId: mediaResourceId || '',\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONSULT_CREATED:\n return {\n type: TaskEvent.CONSULT_CREATED,\n taskData: {...payload, isConsulted: false},\n };\n\n case CC_EVENTS.AGENT_CONSULTING: // AgentConsulting -> CONSULTING_ACTIVE\n // use context to figure out if it's the initiator or receiver using consultInitiator from context\n return {\n type: TaskEvent.CONSULTING_ACTIVE,\n consultDestinationAgentJoined: true,\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONSULT_ENDED: // AgentConsultEnded -> CONSULT_END\n return {type: TaskEvent.CONSULT_END, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_FAILED:\n case CC_EVENTS.AGENT_CTQ_FAILED:\n return {type: TaskEvent.CONSULT_FAILED, reason: payload.reason, taskData: payload};\n\n case CC_EVENTS.AGENT_CTQ_CANCELLED:\n return {type: TaskEvent.CTQ_CANCEL, taskData: payload};\n\n case CC_EVENTS.AGENT_CTQ_CANCEL_FAILED:\n return {type: TaskEvent.CTQ_CANCEL_FAILED, taskData: payload};\n\n case CC_EVENTS.AGENT_BLIND_TRANSFERRED: // AgentBlindTransferred -> TRANSFER_SUCCESS\n case CC_EVENTS.AGENT_CONSULT_TRANSFERRED: // AgentConsultTransferred -> TRANSFER_SUCCESS\n case CC_EVENTS.AGENT_VTEAM_TRANSFERRED: // AgentVTeamTransferred -> TRANSFER_SUCCESS\n return {\n type: TaskEvent.TRANSFER_SUCCESS,\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_WRAPUP:\n return {type: TaskEvent.TASK_WRAPUP, taskData: {...payload, wrapUpRequired: true}};\n case CC_EVENTS.AGENT_CONTACT_UNASSIGNED:\n return null; // Add WRAPUP if needed\n\n case CC_EVENTS.AGENT_BLIND_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_VTEAM_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_CONSULT_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFER_FAILED:\n return {type: TaskEvent.TRANSFER_FAILED, taskData: payload};\n\n case CC_EVENTS.CONTACT_ENDED:\n return {\n type: TaskEvent.CONTACT_ENDED,\n taskData: {\n ...payload,\n wrapUpRequired: isCampaignPreviewTask(payload)\n ? false\n : payload.agentsPendingWrapUp?.includes(agentId || '') || false,\n },\n };\n\n case CC_EVENTS.AGENT_INVITE_FAILED:\n return {type: TaskEvent.INVITE_FAILED, reason: payload.reason};\n\n case CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:\n return {type: TaskEvent.ASSIGN_FAILED, reason: payload.reason};\n\n case CC_EVENTS.AGENT_CONTACT_OFFER_RONA:\n return {type: TaskEvent.RONA, taskData: payload, reason: payload.reason};\n\n case CC_EVENTS.AGENT_OUTBOUND_FAILED:\n return {type: TaskEvent.OUTBOUND_FAILED, taskData: payload, reason: payload.reason};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_ACCEPT_FAILED, taskData: payload};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_SKIP_FAILED, taskData: payload};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_REMOVE_FAILED, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_STARTED:\n return {type: TaskEvent.RECORDING_STARTED, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_PAUSED:\n return {type: TaskEvent.PAUSE_RECORDING, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_RESUMED:\n return {type: TaskEvent.RESUME_RECORDING, taskData: payload};\n\n case CC_EVENTS.AGENT_WRAPPEDUP:\n return {type: TaskEvent.WRAPUP_COMPLETE, taskData: payload};\n\n // Conference events - these trigger state machine transition to CONFERENCING\n case CC_EVENTS.AGENT_CONSULT_CONFERENCED:\n case CC_EVENTS.AGENT_CONSULT_CONFERENCING:\n case CC_EVENTS.PARTICIPANT_JOINED_CONFERENCE:\n return {type: TaskEvent.CONFERENCE_START, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_FAILED:\n return {type: TaskEvent.CONFERENCE_FAILED, reason: payload.reason, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_ENDED:\n return {type: TaskEvent.CONFERENCE_END, taskData: payload};\n\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE:\n return {\n type: TaskEvent.PARTICIPANT_LEAVE,\n taskData: payload,\n participantId: payload?.participantId,\n };\n\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFERRED:\n return {type: TaskEvent.TRANSFER_CONFERENCE_SUCCESS, taskData: payload};\n\n default:\n // Not all events need state machine mapping\n return null;\n }\n }\n\n /**\n * Register WebSocket message listeners for task events\n *\n * Main entry point that orchestrates event processing through a clear pipeline:\n * 1. Parse and validate incoming WebSocket messages\n * 2. Prepare event context with task and state machine mappings\n * 3. Handle task lifecycle (creation, updates, collection management)\n * 4. Send events to state machine (task-level transitions/emissions)\n * 5. Cleanup is triggered via task events emitted by the state machine\n *\n * This architecture separates concerns:\n * - TaskManager: Manages task collection lifecycle and operational concerns\n * - State Machine: Manages individual task state and event emissions\n */\n private registerTaskListeners() {\n this.webSocketManager.on('message', (event) => {\n // Step 1: Parse and validate the message\n const message = TaskManager.parseWebSocketMessage(event);\n if (!message) return;\n\n // Step 2: Prepare event context\n const eventContext = this.prepareEventContext(message);\n if (!eventContext) return;\n\n const actions = this.handleTaskLifecycleEvent(eventContext);\n\n const {task} = actions;\n if (!task) return;\n\n const {payload, stateMachineEvent} = eventContext;\n\n // Always keep task.data updated (even for mapped events) so consumers relying\n // on TaskManager-managed task instances see the latest payload.\n if (payload) {\n this.updateTaskData(task, payload);\n }\n\n // Send event to state machine - this will trigger all TASK_EVENTS emissions\n // including TASK_INCOMING which is now handled via the state machine callbacks\n if (stateMachineEvent) {\n task.sendStateMachineEvent(stateMachineEvent);\n }\n\n // Emit TASK_POST_CALL_ACTIVITY for ParticipantPostCallActivity events so\n // consumers (Widgets) can detect the interaction state change to post_call.\n if (eventContext.eventType === CC_EVENTS.PARTICIPANT_POST_CALL_ACTIVITY) {\n task.emit(TASK_EVENTS.TASK_POST_CALL_ACTIVITY, task);\n }\n\n // Send transcript start/stop events for relevant CC events\n this.requestRealTimeTranscripts(eventContext.eventType, payload.interactionId);\n });\n }\n\n /**\n * Parse and validate WebSocket message\n * @returns Parsed message or null if invalid/keepalive\n */\n private static parseWebSocketMessage(event: string): WebSocketMessage | null {\n try {\n const payload = JSON.parse(event) as WebSocketMessage;\n\n // Filter out keepalive messages\n if (payload?.keepalive === 'true' || payload?.keepalive === true) {\n return null;\n }\n\n // Normalize task data if present\n if (payload?.data?.interaction) {\n payload.data = normalizeTaskData(payload.data);\n }\n\n return payload;\n } catch (error) {\n LoggerProxy.error('Failed to parse WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: 'parseWebSocketMessage',\n error,\n });\n\n return null;\n }\n }\n\n /**\n * Prepare context for event processing\n * @returns Event context or null if event type is invalid\n */\n private prepareEventContext(message: WebSocketMessage): EventContext | null {\n const eventType = message.data?.type || message.type;\n\n if (!eventType || !isCcEvent(eventType)) {\n return null;\n }\n\n const interactionId = message.data.interactionId;\n const reservationInteractionId = message.data.reservationInteractionId;\n let task = this.taskCollection[interactionId];\n\n // When a campaign preview contact is accepted, the assigned event may arrive\n // with a new interactionId while the task is stored under the original\n // reservationInteractionId. Fall back to that key so the task is found.\n if (!task && reservationInteractionId) {\n task = this.taskCollection[reservationInteractionId];\n if (task) {\n // Re-key the task under the new interaction ID and remove the old entry\n delete this.taskCollection[reservationInteractionId];\n this.taskCollection[interactionId] = task;\n }\n }\n\n const wasConsultedTask = Boolean(task?.data?.isConsulted);\n const computeWrapUpRequired = () => {\n if (message.data.wrapUpRequired !== undefined) {\n return message.data.wrapUpRequired;\n }\n if (message.data.isConsulted !== undefined) {\n return !message.data.isConsulted;\n }\n\n return !wasConsultedTask;\n };\n\n const adjustedPayload =\n eventType === CC_EVENTS.AGENT_CONSULT_TRANSFERRED ||\n eventType === CC_EVENTS.AGENT_BLIND_TRANSFERRED ||\n eventType === CC_EVENTS.AGENT_VTEAM_TRANSFERRED\n ? {\n ...message.data,\n wrapUpRequired: computeWrapUpRequired(),\n }\n : message.data;\n\n const stateMachineEvent = TaskManager.mapEventToTaskStateMachineEvent(\n eventType,\n adjustedPayload,\n this.agentId\n );\n\n LoggerProxy.info(`Handling task event ${eventType}`, {\n module: TASK_MANAGER_FILE,\n method: 'prepareEventContext',\n interactionId,\n });\n\n return {\n eventType,\n payload: adjustedPayload,\n task,\n stateMachineEvent,\n };\n }\n\n /**\n * Handle task lifecycle events and determine required actions\n *\n * Delegates to specific event handlers based on event type. Each handler\n * is responsible for TaskManager-level concerns:\n * - Task creation and collection management\n * - Metrics tracking\n * - Resource cleanup decisions\n *\n * Note: Task-level state transitions and event emissions are handled by\n * the task state machine via sendStateMachineEvent()\n */\n private handleTaskLifecycleEvent(context: EventContext): TaskEventActions {\n const {eventType} = context;\n\n switch (eventType) {\n case CC_EVENTS.AGENT_CONTACT_RESERVED:\n return this.handleContactReserved(context);\n\n case CC_EVENTS.AGENT_CONTACT:\n return this.handleAgentContact(context);\n\n case CC_EVENTS.CONTACT_MERGED:\n return this.handleContactMergedEvent(context);\n\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION:\n return this.handleCampaignPreviewReservation(context);\n\n case CC_EVENTS.CAMPAIGN_CONTACT_UPDATED:\n return this.handleCampaignContactUpdated(context);\n\n default:\n return {task: context.task};\n }\n }\n\n private handleCampaignContactUpdated(context: EventContext) {\n const {payload} = context;\n let {task} = context;\n // CampaignContactUpdated is a non-terminal event (e.g., next contact after skip/remove).\n // Update the task data and emit an event so consumers can react to the updated contact.\n // Do NOT remove the task or emit TASK_END — cleanup is handled by CONTACT_ENDED.\n if (task) {\n // Carry forward campaign preview fields from existing task data since the updated\n // contact payload may not include them, and reconcileData would delete them.\n const existingCpd = task.data?.interaction?.callProcessingDetails;\n const updatedData: TaskData = {...payload};\n\n if (existingCpd) {\n const campaignFields = {\n ...(existingCpd.campaignPreviewAutoAction && {\n campaignPreviewAutoAction: existingCpd.campaignPreviewAutoAction,\n }),\n ...(existingCpd.campaignPreviewOfferTimeout && {\n campaignPreviewOfferTimeout: existingCpd.campaignPreviewOfferTimeout,\n }),\n ...(existingCpd.campaignPreviewSkipDisabled && {\n campaignPreviewSkipDisabled: existingCpd.campaignPreviewSkipDisabled,\n }),\n ...(existingCpd.campaignPreviewRemoveDisabled && {\n campaignPreviewRemoveDisabled: existingCpd.campaignPreviewRemoveDisabled,\n }),\n };\n\n if (!updatedData.interaction) {\n updatedData.interaction = {} as typeof updatedData.interaction;\n }\n\n updatedData.interaction = {\n ...updatedData.interaction,\n callProcessingDetails: {\n ...campaignFields,\n ...(updatedData.interaction.callProcessingDetails || {}),\n } as typeof existingCpd,\n };\n }\n\n LoggerProxy.log('Campaign contact updated - carrying forward preview fields', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n data: {\n hasCpd: !!updatedData.interaction?.callProcessingDetails,\n autoAction: updatedData.interaction?.callProcessingDetails?.campaignPreviewAutoAction,\n skipDisabled: updatedData.interaction?.callProcessingDetails?.campaignPreviewSkipDisabled,\n removeDisabled:\n updatedData.interaction?.callProcessingDetails?.campaignPreviewRemoveDisabled,\n },\n });\n\n task = this.updateTaskData(task, updatedData);\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_CONTACT_UPDATED, task);\n }\n\n return {task};\n }\n\n /**\n * Creates or updates a task for campaign preview reservation.\n * TASK_CAMPAIGN_PREVIEW_RESERVATION is emitted by the state machine (campaign TASK_INCOMING branch).\n */\n private handleCampaignPreviewReservation(context: EventContext): TaskEventActions {\n const {payload} = context;\n let {task} = context;\n\n LoggerProxy.log('Campaign preview reservation received', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n\n if (!task) {\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n {\n ...payload,\n wrapUpRequired: false,\n isConferenceInProgress: false,\n isAutoAnswering: false,\n },\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n } else {\n task = this.updateTaskData(task, payload);\n }\n\n return {task};\n }\n\n /**\n * Handle AGENT_CONTACT_RESERVED event\n * Creates a new task; state machine event is sent during processing\n */\n private handleContactReserved(context: EventContext): TaskEventActions {\n const {payload} = context;\n const isConsultedTask =\n payload.isConsulted === true || isSecondaryEpDnAgent(payload.interaction);\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n const taskData: TaskData = {\n ...payload,\n isConsulted: isConsultedTask,\n isAutoAnswering: shouldAutoAnswer,\n };\n\n const task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n\n return {task};\n }\n\n /**\n * Handle AGENT_CONTACT event\n * Re-creates task if missing (multi-session scenario)\n */\n private handleAgentContact(context: EventContext): TaskEventActions {\n let {task} = context;\n const {payload} = context;\n\n if (!task) {\n const isConsultedTask =\n payload.isConsulted === true || isSecondaryEpDnAgent(payload.interaction);\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n const taskData: TaskData = {\n ...payload,\n isConsulted: isConsultedTask,\n wrapUpRequired: payload.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload),\n isAutoAnswering: shouldAutoAnswer,\n };\n\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n }\n\n return {task};\n }\n\n private updateTaskData(task: ITask, taskData: TaskData): ITask {\n if (!task) {\n throw new Error('Task not found for update');\n }\n\n const snapshot = task.stateMachineService?.getSnapshot?.();\n const isConsultingFlow =\n snapshot?.value === 'CONSULTING' || taskData.interaction?.state === 'consulting';\n\n const updateTaskData = isConsultingFlow\n ? {\n ...taskData,\n destAgentId: taskData.destAgentId ?? snapshot?.context?.consultDestinationAgentId ?? null,\n destinationType:\n taskData.destinationType ?? snapshot?.context?.consultDestinationType ?? null,\n }\n : taskData;\n\n task.updateTaskData(updateTaskData);\n this.taskCollection[taskData.interactionId] = task;\n\n return task;\n }\n\n /**\n * Setup listeners for task events that need to be bubbled up to TaskManager\n * This replaces the previous callback injection pattern\n */\n private setupTaskListeners(task: ITask): void {\n // Listen for TASK_INCOMING and re-emit so webex.cc can notify consumers\n task.on(TASK_EVENTS.TASK_INCOMING, (t: ITask) => {\n LoggerProxy.log(`Task incoming event received`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: t.data?.interactionId,\n });\n\n this.emit(TASK_EVENTS.TASK_INCOMING, t);\n });\n\n task.on(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, (t: ITask) => {\n LoggerProxy.log(`Campaign preview reservation event received`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: t.data?.interactionId,\n });\n\n this.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, t);\n });\n\n // Listen for TASK_HYDRATE on the task and re-emit on TaskManager\n task.on(TASK_EVENTS.TASK_HYDRATE, (t: ITask) => {\n // Task data is already updated by the task itself before emitting\n this.emit(TASK_EVENTS.TASK_HYDRATE, t);\n });\n\n task.on(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, (t: ITask) => {\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, t);\n });\n\n // Listen for internal cleanup signal emitted by the state machine\n task.on(TASK_EVENTS.TASK_CLEANUP, (t: ITask, options?: {removeFromCollection?: boolean}) => {\n this.handleTaskCleanup(t);\n if (options?.removeFromCollection) {\n const interactionId = t?.data?.interactionId;\n if (interactionId && this.taskCollection[interactionId]) {\n this.removeTaskFromCollection(t);\n }\n }\n });\n }\n\n private removeTaskFromCollection(task: ITask) {\n if (typeof task.cancelAutoWrapupTimer === 'function') {\n task.cancelAutoWrapupTimer();\n }\n if (task?.data?.interactionId) {\n delete this.taskCollection[task.data.interactionId];\n LoggerProxy.info(`Task removed from collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REMOVE_TASK_FROM_COLLECTION,\n interactionId: task.data.interactionId,\n });\n }\n }\n\n /**\n * Handles CONTACT_MERGED event logic\n * @param task - The task to process\n * @param taskData - The task data from the event payload\n * @returns Updated or newly created task\n * @private\n */\n private handleContactMergedEvent(context: EventContext): TaskEventActions {\n const {payload} = context;\n let task = context.task;\n\n if (payload.childInteractionId && this.taskCollection[payload.childInteractionId]) {\n this.removeTaskFromCollection(this.taskCollection[payload.childInteractionId]);\n }\n\n if (task) {\n LoggerProxy.log(`Got CONTACT_MERGED: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n // update the task data\n this.updateTaskData(task, payload);\n } else {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got CONTACT_MERGED : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n\n const taskData: TaskData = {\n ...payload,\n wrapUpRequired: payload.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload),\n isConsulted: false,\n };\n\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.interactionId] = task;\n\n // Transition the new task out of IDLE immediately so UI controls are\n // computed before TASK_MERGED is emitted. This handles the race where\n // AgentContactAssigned arrives before ContactMerged and gets dropped.\n // Send HYDRATE before setupTaskListeners so the emitTaskHydrate action\n // doesn't bubble up to the Widget (avoids duplicate listener registration).\n task.sendStateMachineEvent({\n type: TaskEvent.HYDRATE,\n taskData,\n agentId: this.agentId,\n } as TaskEventPayload);\n\n this.setupTaskListeners(task);\n }\n\n if (task) {\n this.emit(TASK_EVENTS.TASK_MERGED, task);\n }\n\n return {task};\n }\n\n /**\n * Handles cleanup of task resources including Desktop/WebRTC call cleanup and task removal\n * @param task - The task to clean up\n * @private\n */\n private handleTaskCleanup(task: ITask) {\n // Clean up Desktop/WebRTC calling resources for browser-based telephony tasks\n if (\n this.webCallingService.loginOption === LoginOption.BROWSER &&\n task.data.interaction.mediaType === MEDIA_CHANNEL.TELEPHONY &&\n task instanceof WebRTC\n ) {\n task.unregisterWebCallListeners();\n this.webCallingService.cleanUpCall();\n }\n\n const isOutdial = task.data.interaction.outboundType === 'OUTDIAL';\n const isNew = task.data.interaction.state === 'new';\n const needsWrapUp = task.data.agentsPendingWrapUp?.includes(this.agentId) ?? false;\n\n // For OUTDIAL: only remove if NOT terminated (user-declined, no wrap-up follows)\n // For non-OUTDIAL: remove if state is 'new'\n // Always remove if secondary EpDn agent\n if (\n (isNew && !(isOutdial && needsWrapUp)) ||\n isSecondaryEpDnAgent(task.data.interaction) ||\n (!needsWrapUp && isOutdial) // For outdial tasks, needs wrap-up is false and state is \"WRAPUP\". We need to just remove the task.\n ) {\n this.removeTaskFromCollection(task);\n }\n }\n\n /**\n * Sends transcript start/stop event based on the CC event type.\n * Fire-and-forget; errors are logged but do not interrupt event processing.\n */\n private requestRealTimeTranscripts(eventType: string, interactionId: string): void {\n const action = TRANSCRIPT_EVENT_MAP[eventType];\n if (!action || !this.apiAIAssistant) return;\n if (this.configFlags?.aiFeature?.realtimeTranscripts?.enable !== true) return;\n\n this.apiAIAssistant\n .sendEvent(\n this.agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.GET_TRANSCRIPTS,\n action\n )\n .catch((error) => {\n LoggerProxy.error(`Failed to send transcript ${action} event`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REQUEST_REAL_TIME_TRANSCRIPTS,\n interactionId,\n error,\n });\n });\n }\n\n public getTask(taskId: TaskId): ITask {\n return this.taskCollection[taskId];\n }\n\n public getAllTasks(): Record<TaskId, ITask> {\n return {...this.taskCollection};\n }\n\n public static getTaskManager(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager,\n rtdWebSocketManager?: WebSocketManager\n ): TaskManager {\n if (!TaskManager.taskManager) {\n TaskManager.taskManager = new TaskManager(\n apiAIAssistant,\n contact,\n webCallingService,\n webSocketManager,\n rtdWebSocketManager\n );\n }\n\n return TaskManager.taskManager;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_types","_constants","_constants2","_types2","_types3","_loggerProxy","_TaskUtils","_TaskFactory","_WebRTC","_stateMachine","_taskDataNormalizer","e","__esModule","default","CC_EVENT_SET","Set","Object","values","CC_EVENTS","isCcEvent","value","has","TaskManager","EventEmitter","constructor","apiAIAssistant","contact","webCallingService","webSocketManager","rtdWebSocketManager","taskCollection","webRtcEnabled","registerTaskListeners","registerIncomingCallEvent","handleRealtimeWebsocketEvent","event","payload","JSON","parse","interactionId","data","conversationId","task","LoggerProxy","info","module","TASK_MANAGER_FILE","method","METHODS","HANDLE_REAL_TIME_WEBSOCKET_EVENT","type","REAL_TIME_TRANSCRIPTION","SUGGESTED_RESPONSE","emit","error","setConfigFlags","configFlags","setWrapupData","wrapupData","setAgentId","agentId","getAgentId","setWebRtcEnabled","handleIncomingWebCall","call","currentTask","find","interaction","mediaType","isCampaignPreviewReservation","mapCallToTask","getCallId","log","HANDLE_INCOMING_WEB_CALL","eventPayload","mapEventToTaskStateMachineEvent","AGENT_CONTACT_RESERVED","sendStateMachineEvent","on","LINE_EVENTS","INCOMING_CALL","unregisterIncomingCallEvent","off","ccEvent","mediaResourceId","media","isCampaignPreviewTask","TaskEvent","TASK_INCOMING","taskData","isCampaignReservationAccept","AGENT_OFFER_CAMPAIGN_RESERVATION","AGENT_OFFER_CONTACT","TASK_OFFERED","AGENT_CONTACT","HYDRATE","CONTACT_UPDATED","CONTACT_OWNER_CHANGED","AGENT_OFFER_CONSULT","OFFER_CONSULT","isConsulted","AGENT_CONTACT_ASSIGNED","ASSIGN","AGENT_CONTACT_HELD","HOLD_SUCCESS","AGENT_CONTACT_UNHELD","UNHOLD_SUCCESS","AGENT_CONSULT_CREATED","CONSULT_CREATED","AGENT_CONSULTING","CONSULTING_ACTIVE","consultDestinationAgentJoined","AGENT_CONSULT_ENDED","CONSULT_END","AGENT_CONSULT_FAILED","AGENT_CTQ_FAILED","CONSULT_FAILED","reason","AGENT_CTQ_CANCELLED","CTQ_CANCEL","AGENT_CTQ_CANCEL_FAILED","CTQ_CANCEL_FAILED","AGENT_BLIND_TRANSFERRED","AGENT_CONSULT_TRANSFERRED","AGENT_VTEAM_TRANSFERRED","TRANSFER_SUCCESS","AGENT_WRAPUP","TASK_WRAPUP","wrapUpRequired","AGENT_CONTACT_UNASSIGNED","AGENT_BLIND_TRANSFER_FAILED","AGENT_VTEAM_TRANSFER_FAILED","AGENT_CONSULT_TRANSFER_FAILED","AGENT_CONFERENCE_TRANSFER_FAILED","TRANSFER_FAILED","CONTACT_ENDED","agentsPendingWrapUp","includes","AGENT_INVITE_FAILED","INVITE_FAILED","AGENT_CONTACT_ASSIGN_FAILED","ASSIGN_FAILED","AGENT_CONTACT_OFFER_RONA","RONA","AGENT_OUTBOUND_FAILED","OUTBOUND_FAILED","CAMPAIGN_PREVIEW_ACCEPT_FAILED","CAMPAIGN_PREVIEW_SKIP_FAILED","CAMPAIGN_PREVIEW_REMOVE_FAILED","CONTACT_RECORDING_STARTED","RECORDING_STARTED","CONTACT_RECORDING_PAUSED","PAUSE_RECORDING","CONTACT_RECORDING_RESUMED","RESUME_RECORDING","AGENT_WRAPPEDUP","WRAPUP_COMPLETE","AGENT_CONSULT_CONFERENCED","AGENT_CONSULT_CONFERENCING","PARTICIPANT_JOINED_CONFERENCE","CONFERENCE_START","AGENT_CONSULT_CONFERENCE_FAILED","CONFERENCE_FAILED","AGENT_CONSULT_CONFERENCE_ENDED","CONFERENCE_END","PARTICIPANT_LEFT_CONFERENCE","PARTICIPANT_LEAVE","participantId","AGENT_CONFERENCE_TRANSFERRED","TRANSFER_CONFERENCE_SUCCESS","message","parseWebSocketMessage","eventContext","prepareEventContext","actions","handleTaskLifecycleEvent","stateMachineEvent","updateTaskData","eventType","PARTICIPANT_POST_CALL_ACTIVITY","TASK_EVENTS","TASK_POST_CALL_ACTIVITY","requestRealTimeTranscripts","keepalive","normalizeTaskData","reservationInteractionId","wasConsultedTask","Boolean","computeWrapUpRequired","undefined","adjustedPayload","context","handleContactReserved","handleAgentContact","CONTACT_MERGED","handleContactMergedEvent","handleCampaignPreviewReservation","CAMPAIGN_CONTACT_UPDATED","handleCampaignContactUpdated","existingCpd","callProcessingDetails","updatedData","campaignFields","campaignPreviewAutoAction","campaignPreviewOfferTimeout","campaignPreviewSkipDisabled","campaignPreviewRemoveDisabled","REGISTER_TASK_LISTENERS","hasCpd","autoAction","skipDisabled","removeDisabled","TASK_CAMPAIGN_CONTACT_UPDATED","TaskFactory","createTask","isConferenceInProgress","isAutoAnswering","setupTaskListeners","isConsultedTask","isSecondaryEpDnAgent","shouldAutoAnswer","shouldAutoAnswerTask","loginOption","participants","isWrapUp","getIsConferenceInProgress","Error","snapshot","stateMachineService","getSnapshot","isConsultingFlow","state","destAgentId","consultDestinationAgentId","destinationType","consultDestinationType","t","TASK_CAMPAIGN_PREVIEW_RESERVATION","TASK_HYDRATE","TASK_MULTI_LOGIN_HYDRATE","TASK_CLEANUP","options","handleTaskCleanup","removeFromCollection","removeTaskFromCollection","cancelAutoWrapupTimer","REMOVE_TASK_FROM_COLLECTION","childInteractionId","TASK_MERGED","LoginOption","BROWSER","MEDIA_CHANNEL","TELEPHONY","WebRTC","unregisterWebCallListeners","cleanUpCall","isOutdial","outboundType","isNew","needsWrapUp","action","TRANSCRIPT_EVENT_MAP","aiFeature","realtimeTranscripts","enable","sendEvent","AIAssistantEventType","CUSTOM_EVENT","AIAssistantEventName","GET_TRANSCRIPTS","catch","REQUEST_REAL_TIME_TRANSCRIPTS","getTask","taskId","getAllTasks","getTaskManager","taskManager","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {ICall, LINE_EVENTS} from '@webex/calling';\nimport {WebSocketManager} from '../core/websocket/WebSocketManager';\nimport routingContact from './contact';\nimport WebCallingService from '../WebCallingService';\nimport {\n MEDIA_CHANNEL,\n TASK_EVENTS,\n TaskData,\n TaskId,\n ITask,\n WebSocketPayload,\n WebSocketMessage,\n TaskEventActions,\n EventContext,\n} from './types';\nimport {TASK_MANAGER_FILE} from '../../constants';\nimport {METHODS, TRANSCRIPT_EVENT_MAP} from './constants';\nimport {CC_EVENTS, WrapupData} from '../config/types';\nimport {ConfigFlags, LoginOption, AIAssistantEventType, AIAssistantEventName} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport {\n getIsConferenceInProgress,\n isCampaignPreviewTask,\n isCampaignPreviewReservation,\n isSecondaryEpDnAgent,\n shouldAutoAnswerTask,\n} from './TaskUtils';\nimport TaskFactory from './TaskFactory';\nimport WebRTC from './voice/WebRTC';\nimport {TaskEvent, type TaskEventPayload} from './state-machine';\nimport {normalizeTaskData} from './taskDataNormalizer';\nimport {ApiAIAssistant} from '../ApiAiAssistant';\n\nconst CC_EVENT_SET = new Set<CC_EVENTS>(Object.values(CC_EVENTS) as CC_EVENTS[]);\n\nconst isCcEvent = (value: string): value is CC_EVENTS => CC_EVENT_SET.has(value as CC_EVENTS);\n\n/** @internal */\nexport default class TaskManager extends EventEmitter {\n private call: ICall;\n private contact: ReturnType<typeof routingContact>;\n /**\n * Collection of tasks indexed by TaskId\n * @type {Record<TaskId, ITask>}\n * @private\n */\n private taskCollection: Record<TaskId, ITask>;\n private webCallingService: WebCallingService;\n private webSocketManager: WebSocketManager;\n private rtdWebSocketManager: WebSocketManager;\n // eslint-disable-next-line no-use-before-define\n private static taskManager: TaskManager;\n private configFlags?: ConfigFlags;\n private wrapupData: WrapupData;\n private agentId: string;\n private webRtcEnabled: boolean;\n private apiAIAssistant?: ApiAIAssistant;\n /**\n * @param contact - Routing Contact layer. Talks to AQMReq layer to convert events to promises\n * @param webCallingService - Webrtc Service Layer\n * @param webSocketManager - Websocket Manager to maintain websocket connection and keepalives\n */\n constructor(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager,\n rtdWebSocketManager: WebSocketManager\n ) {\n super();\n this.apiAIAssistant = apiAIAssistant;\n this.contact = contact;\n this.webCallingService = webCallingService;\n this.webSocketManager = webSocketManager;\n this.rtdWebSocketManager = rtdWebSocketManager;\n this.taskCollection = {};\n this.webRtcEnabled = false;\n\n this.registerTaskListeners();\n this.registerIncomingCallEvent();\n }\n\n public handleRealtimeWebsocketEvent(event: string) {\n try {\n const payload = JSON.parse(event);\n\n const interactionId = payload?.data?.data?.conversationId;\n if (!interactionId) return;\n\n const task = this.taskCollection[interactionId];\n if (!task) {\n LoggerProxy.info(`Realtime transcription task not found`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n interactionId,\n });\n\n return;\n }\n\n switch (payload.type) {\n case CC_EVENTS.REAL_TIME_TRANSCRIPTION:\n case CC_EVENTS.SUGGESTED_RESPONSE:\n task.emit(payload.type, payload.data);\n break;\n }\n } catch (error) {\n LoggerProxy.error('Failed to parse RTD WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_REAL_TIME_WEBSOCKET_EVENT,\n error,\n });\n }\n }\n\n /**\n * Set config flags for task creation\n */\n public setConfigFlags(configFlags: ConfigFlags) {\n this.configFlags = configFlags;\n }\n\n /**\n * Set wrapup configuration data\n */\n public setWrapupData(wrapupData: WrapupData) {\n this.wrapupData = wrapupData;\n }\n\n /**\n * Set agent ID for task operations\n */\n public setAgentId(agentId: string) {\n this.agentId = agentId;\n }\n\n /**\n * Gets the current agent ID\n * @returns {string} The agent ID set for this task manager instance\n * @public\n */\n public getAgentId(): string {\n return this.agentId;\n }\n\n public setWebRtcEnabled(webRtcEnabled: boolean) {\n this.webRtcEnabled = webRtcEnabled;\n }\n\n private handleIncomingWebCall = (call: ICall) => {\n const currentTask = Object.values(this.taskCollection).find(\n (task) =>\n task.data.interaction.mediaType === 'telephony' && !isCampaignPreviewReservation(task)\n );\n\n if (currentTask) {\n this.webCallingService.mapCallToTask(call.getCallId(), currentTask.data.interactionId);\n LoggerProxy.log(`Call mapped to task`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.HANDLE_INCOMING_WEB_CALL,\n interactionId: currentTask.data.interactionId,\n });\n\n // Send TASK_INCOMING to state machine - it will emit on the task object\n const eventPayload = TaskManager.mapEventToTaskStateMachineEvent(\n CC_EVENTS.AGENT_CONTACT_RESERVED,\n currentTask.data\n );\n if (eventPayload && currentTask) {\n currentTask.sendStateMachineEvent(eventPayload);\n }\n }\n this.call = call;\n };\n\n public registerIncomingCallEvent() {\n this.webCallingService.on(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n public unregisterIncomingCallEvent() {\n this.webCallingService.off(LINE_EVENTS.INCOMING_CALL, this.handleIncomingWebCall);\n }\n\n /**\n * Map WebSocket CC_EVENTS to state machine TaskEvent\n * @param ccEvent - The CC_EVENT type from WebSocket\n * @param payload - The event payload\n * @param agentId - Optional agent ID for state detection (needed for HYDRATE)\n * @returns TaskEventPayload for state machine or null if no mapping\n */\n private static mapEventToTaskStateMachineEvent(\n ccEvent: CC_EVENTS,\n payload: WebSocketPayload,\n agentId?: string\n ): TaskEventPayload | null {\n const mediaResourceId =\n payload.mediaResourceId ||\n payload.interaction?.media?.[payload.interactionId]?.mediaResourceId;\n\n switch (ccEvent) {\n // CC -> TaskEvent mappings (see TaskStateMachine comment for quick reference)\n case CC_EVENTS.AGENT_CONTACT_RESERVED: // AgentContactReserved -> TASK_INCOMING\n if (isCampaignPreviewTask(payload)) {\n return {\n type: TaskEvent.TASK_INCOMING,\n taskData: payload,\n isCampaignReservationAccept: true,\n };\n }\n\n return {type: TaskEvent.TASK_INCOMING, taskData: payload};\n\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION: // -> TASK_INCOMING (campaign branch via guard)\n return {\n type: TaskEvent.TASK_INCOMING,\n taskData: payload,\n isCampaignReservationAccept: true,\n };\n\n case CC_EVENTS.AGENT_OFFER_CONTACT: // AgentOfferContact -> TASK_OFFERED\n return {type: TaskEvent.TASK_OFFERED, taskData: payload};\n\n case CC_EVENTS.AGENT_CONTACT: // AgentContact -> HYDRATE\n // Include agentId for state detection (e.g., checking isWrapUp in participant data)\n return {type: TaskEvent.HYDRATE, taskData: payload, agentId};\n\n case CC_EVENTS.CONTACT_UPDATED:\n return {type: TaskEvent.CONTACT_UPDATED, taskData: payload};\n case CC_EVENTS.CONTACT_OWNER_CHANGED:\n return {type: TaskEvent.CONTACT_OWNER_CHANGED, taskData: payload};\n\n case CC_EVENTS.AGENT_OFFER_CONSULT: // AgentOfferConsult -> OFFER_CONSULT\n return {\n type: TaskEvent.OFFER_CONSULT,\n taskData: {...payload, isConsulted: true},\n };\n\n case CC_EVENTS.AGENT_CONTACT_ASSIGNED: // AgentContactAssigned -> ASSIGN\n return {type: TaskEvent.ASSIGN, taskData: payload};\n\n case CC_EVENTS.AGENT_CONTACT_HELD:\n return {\n type: TaskEvent.HOLD_SUCCESS,\n mediaResourceId: mediaResourceId || '',\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONTACT_UNHELD:\n return {\n type: TaskEvent.UNHOLD_SUCCESS,\n mediaResourceId: mediaResourceId || '',\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONSULT_CREATED:\n return {\n type: TaskEvent.CONSULT_CREATED,\n taskData: {...payload, isConsulted: false},\n };\n\n case CC_EVENTS.AGENT_CONSULTING: // AgentConsulting -> CONSULTING_ACTIVE\n // use context to figure out if it's the initiator or receiver using consultInitiator from context\n return {\n type: TaskEvent.CONSULTING_ACTIVE,\n consultDestinationAgentJoined: true,\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_CONSULT_ENDED: // AgentConsultEnded -> CONSULT_END\n return {type: TaskEvent.CONSULT_END, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_FAILED:\n case CC_EVENTS.AGENT_CTQ_FAILED:\n return {type: TaskEvent.CONSULT_FAILED, reason: payload.reason, taskData: payload};\n\n case CC_EVENTS.AGENT_CTQ_CANCELLED:\n return {type: TaskEvent.CTQ_CANCEL, taskData: payload};\n\n case CC_EVENTS.AGENT_CTQ_CANCEL_FAILED:\n return {type: TaskEvent.CTQ_CANCEL_FAILED, taskData: payload};\n\n case CC_EVENTS.AGENT_BLIND_TRANSFERRED: // AgentBlindTransferred -> TRANSFER_SUCCESS\n case CC_EVENTS.AGENT_CONSULT_TRANSFERRED: // AgentConsultTransferred -> TRANSFER_SUCCESS\n case CC_EVENTS.AGENT_VTEAM_TRANSFERRED: // AgentVTeamTransferred -> TRANSFER_SUCCESS\n return {\n type: TaskEvent.TRANSFER_SUCCESS,\n taskData: payload,\n };\n\n case CC_EVENTS.AGENT_WRAPUP:\n return {type: TaskEvent.TASK_WRAPUP, taskData: {...payload, wrapUpRequired: true}};\n case CC_EVENTS.AGENT_CONTACT_UNASSIGNED:\n return null; // Add WRAPUP if needed\n\n case CC_EVENTS.AGENT_BLIND_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_VTEAM_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_CONSULT_TRANSFER_FAILED:\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFER_FAILED:\n return {type: TaskEvent.TRANSFER_FAILED, taskData: payload};\n\n case CC_EVENTS.CONTACT_ENDED:\n return {\n type: TaskEvent.CONTACT_ENDED,\n taskData: {\n ...payload,\n wrapUpRequired: isCampaignPreviewTask(payload)\n ? false\n : payload.agentsPendingWrapUp?.includes(agentId || '') || false,\n },\n };\n\n case CC_EVENTS.AGENT_INVITE_FAILED:\n return {type: TaskEvent.INVITE_FAILED, reason: payload.reason};\n\n case CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:\n return {type: TaskEvent.ASSIGN_FAILED, reason: payload.reason};\n\n case CC_EVENTS.AGENT_CONTACT_OFFER_RONA:\n return {type: TaskEvent.RONA, taskData: payload, reason: payload.reason};\n\n case CC_EVENTS.AGENT_OUTBOUND_FAILED:\n return {type: TaskEvent.OUTBOUND_FAILED, taskData: payload, reason: payload.reason};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_ACCEPT_FAILED, taskData: payload};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_SKIP_FAILED, taskData: payload};\n\n case CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED:\n return {type: TaskEvent.CAMPAIGN_PREVIEW_REMOVE_FAILED, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_STARTED:\n return {type: TaskEvent.RECORDING_STARTED, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_PAUSED:\n return {type: TaskEvent.PAUSE_RECORDING, taskData: payload};\n\n case CC_EVENTS.CONTACT_RECORDING_RESUMED:\n return {type: TaskEvent.RESUME_RECORDING, taskData: payload};\n\n case CC_EVENTS.AGENT_WRAPPEDUP:\n return {type: TaskEvent.WRAPUP_COMPLETE, taskData: payload};\n\n // Conference events - these trigger state machine transition to CONFERENCING\n case CC_EVENTS.AGENT_CONSULT_CONFERENCED:\n case CC_EVENTS.AGENT_CONSULT_CONFERENCING:\n case CC_EVENTS.PARTICIPANT_JOINED_CONFERENCE:\n return {type: TaskEvent.CONFERENCE_START, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_FAILED:\n return {type: TaskEvent.CONFERENCE_FAILED, reason: payload.reason, taskData: payload};\n\n case CC_EVENTS.AGENT_CONSULT_CONFERENCE_ENDED:\n return {type: TaskEvent.CONFERENCE_END, taskData: payload};\n\n case CC_EVENTS.PARTICIPANT_LEFT_CONFERENCE:\n return {\n type: TaskEvent.PARTICIPANT_LEAVE,\n taskData: payload,\n participantId: payload?.participantId,\n };\n\n case CC_EVENTS.AGENT_CONFERENCE_TRANSFERRED:\n return {type: TaskEvent.TRANSFER_CONFERENCE_SUCCESS, taskData: payload};\n\n default:\n // Not all events need state machine mapping\n return null;\n }\n }\n\n /**\n * Register WebSocket message listeners for task events\n *\n * Main entry point that orchestrates event processing through a clear pipeline:\n * 1. Parse and validate incoming WebSocket messages\n * 2. Prepare event context with task and state machine mappings\n * 3. Handle task lifecycle (creation, updates, collection management)\n * 4. Send events to state machine (task-level transitions/emissions)\n * 5. Cleanup is triggered via task events emitted by the state machine\n *\n * This architecture separates concerns:\n * - TaskManager: Manages task collection lifecycle and operational concerns\n * - State Machine: Manages individual task state and event emissions\n */\n private registerTaskListeners() {\n this.webSocketManager.on('message', (event) => {\n // Step 1: Parse and validate the message\n const message = TaskManager.parseWebSocketMessage(event);\n if (!message) return;\n\n // Step 2: Prepare event context\n const eventContext = this.prepareEventContext(message);\n if (!eventContext) return;\n\n const actions = this.handleTaskLifecycleEvent(eventContext);\n\n const {task} = actions;\n if (!task) return;\n\n const {payload, stateMachineEvent} = eventContext;\n\n // Always keep task.data updated (even for mapped events) so consumers relying\n // on TaskManager-managed task instances see the latest payload.\n if (payload) {\n this.updateTaskData(task, payload);\n }\n\n // Send event to state machine - this will trigger all TASK_EVENTS emissions\n // including TASK_INCOMING which is now handled via the state machine callbacks\n if (stateMachineEvent) {\n task.sendStateMachineEvent(stateMachineEvent);\n }\n\n // Emit TASK_POST_CALL_ACTIVITY for ParticipantPostCallActivity events so\n // consumers (Widgets) can detect the interaction state change to post_call.\n if (eventContext.eventType === CC_EVENTS.PARTICIPANT_POST_CALL_ACTIVITY) {\n task.emit(TASK_EVENTS.TASK_POST_CALL_ACTIVITY, task);\n }\n\n // Send transcript start/stop events for relevant CC events\n this.requestRealTimeTranscripts(eventContext.eventType, payload.interactionId);\n });\n }\n\n /**\n * Parse and validate WebSocket message\n * @returns Parsed message or null if invalid/keepalive\n */\n private static parseWebSocketMessage(event: string): WebSocketMessage | null {\n try {\n const payload = JSON.parse(event) as WebSocketMessage;\n\n // Filter out keepalive messages\n if (payload?.keepalive === 'true' || payload?.keepalive === true) {\n return null;\n }\n\n // Normalize task data if present\n if (payload?.data?.interaction) {\n payload.data = normalizeTaskData(payload.data);\n }\n\n return payload;\n } catch (error) {\n LoggerProxy.error('Failed to parse WebSocket message', {\n module: TASK_MANAGER_FILE,\n method: 'parseWebSocketMessage',\n error,\n });\n\n return null;\n }\n }\n\n /**\n * Prepare context for event processing\n * @returns Event context or null if event type is invalid\n */\n private prepareEventContext(message: WebSocketMessage): EventContext | null {\n const eventType = message.data?.type || message.type;\n\n if (!eventType || !isCcEvent(eventType)) {\n return null;\n }\n\n const interactionId = message.data.interactionId;\n const reservationInteractionId = message.data.reservationInteractionId;\n let task = this.taskCollection[interactionId];\n\n // When a campaign preview contact is accepted, the assigned event may arrive\n // with a new interactionId while the task is stored under the original\n // reservationInteractionId. Fall back to that key so the task is found.\n if (!task && reservationInteractionId) {\n task = this.taskCollection[reservationInteractionId];\n if (task) {\n // Re-key the task under the new interaction ID and remove the old entry\n delete this.taskCollection[reservationInteractionId];\n this.taskCollection[interactionId] = task;\n }\n }\n\n const wasConsultedTask = Boolean(task?.data?.isConsulted);\n const computeWrapUpRequired = () => {\n if (message.data.wrapUpRequired !== undefined) {\n return message.data.wrapUpRequired;\n }\n if (message.data.isConsulted !== undefined) {\n return !message.data.isConsulted;\n }\n\n return !wasConsultedTask;\n };\n\n const adjustedPayload =\n eventType === CC_EVENTS.AGENT_CONSULT_TRANSFERRED ||\n eventType === CC_EVENTS.AGENT_BLIND_TRANSFERRED ||\n eventType === CC_EVENTS.AGENT_VTEAM_TRANSFERRED\n ? {\n ...message.data,\n wrapUpRequired: computeWrapUpRequired(),\n }\n : message.data;\n\n const stateMachineEvent = TaskManager.mapEventToTaskStateMachineEvent(\n eventType,\n adjustedPayload,\n this.agentId\n );\n\n LoggerProxy.info(`Handling task event ${eventType}`, {\n module: TASK_MANAGER_FILE,\n method: 'prepareEventContext',\n interactionId,\n });\n\n return {\n eventType,\n payload: adjustedPayload,\n task,\n stateMachineEvent,\n };\n }\n\n /**\n * Handle task lifecycle events and determine required actions\n *\n * Delegates to specific event handlers based on event type. Each handler\n * is responsible for TaskManager-level concerns:\n * - Task creation and collection management\n * - Metrics tracking\n * - Resource cleanup decisions\n *\n * Note: Task-level state transitions and event emissions are handled by\n * the task state machine via sendStateMachineEvent()\n */\n private handleTaskLifecycleEvent(context: EventContext): TaskEventActions {\n const {eventType} = context;\n\n switch (eventType) {\n case CC_EVENTS.AGENT_CONTACT_RESERVED:\n return this.handleContactReserved(context);\n\n case CC_EVENTS.AGENT_CONTACT:\n return this.handleAgentContact(context);\n\n case CC_EVENTS.CONTACT_MERGED:\n return this.handleContactMergedEvent(context);\n\n case CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION:\n return this.handleCampaignPreviewReservation(context);\n\n case CC_EVENTS.CAMPAIGN_CONTACT_UPDATED:\n return this.handleCampaignContactUpdated(context);\n\n default:\n return {task: context.task};\n }\n }\n\n private handleCampaignContactUpdated(context: EventContext) {\n const {payload} = context;\n let {task} = context;\n // CampaignContactUpdated is a non-terminal event (e.g., next contact after skip/remove).\n // Update the task data and emit an event so consumers can react to the updated contact.\n // Do NOT remove the task or emit TASK_END — cleanup is handled by CONTACT_ENDED.\n if (task) {\n // Carry forward campaign preview fields from existing task data since the updated\n // contact payload may not include them, and reconcileData would delete them.\n const existingCpd = task.data?.interaction?.callProcessingDetails;\n const updatedData: TaskData = {...payload};\n\n if (existingCpd) {\n const campaignFields = {\n ...(existingCpd.campaignPreviewAutoAction && {\n campaignPreviewAutoAction: existingCpd.campaignPreviewAutoAction,\n }),\n ...(existingCpd.campaignPreviewOfferTimeout && {\n campaignPreviewOfferTimeout: existingCpd.campaignPreviewOfferTimeout,\n }),\n ...(existingCpd.campaignPreviewSkipDisabled && {\n campaignPreviewSkipDisabled: existingCpd.campaignPreviewSkipDisabled,\n }),\n ...(existingCpd.campaignPreviewRemoveDisabled && {\n campaignPreviewRemoveDisabled: existingCpd.campaignPreviewRemoveDisabled,\n }),\n };\n\n if (!updatedData.interaction) {\n updatedData.interaction = {} as typeof updatedData.interaction;\n }\n\n updatedData.interaction = {\n ...updatedData.interaction,\n callProcessingDetails: {\n ...campaignFields,\n ...(updatedData.interaction.callProcessingDetails || {}),\n } as typeof existingCpd,\n };\n }\n\n LoggerProxy.log('Campaign contact updated - carrying forward preview fields', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n data: {\n hasCpd: !!updatedData.interaction?.callProcessingDetails,\n autoAction: updatedData.interaction?.callProcessingDetails?.campaignPreviewAutoAction,\n skipDisabled: updatedData.interaction?.callProcessingDetails?.campaignPreviewSkipDisabled,\n removeDisabled:\n updatedData.interaction?.callProcessingDetails?.campaignPreviewRemoveDisabled,\n },\n });\n\n task = this.updateTaskData(task, updatedData);\n task.emit(TASK_EVENTS.TASK_CAMPAIGN_CONTACT_UPDATED, task);\n }\n\n return {task};\n }\n\n /**\n * Creates or updates a task for campaign preview reservation.\n * TASK_CAMPAIGN_PREVIEW_RESERVATION is emitted by the state machine (campaign TASK_INCOMING branch).\n */\n private handleCampaignPreviewReservation(context: EventContext): TaskEventActions {\n const {payload} = context;\n let {task} = context;\n\n LoggerProxy.log('Campaign preview reservation received', {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n\n if (!task) {\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n {\n ...payload,\n wrapUpRequired: false,\n isConferenceInProgress: false,\n isAutoAnswering: false,\n },\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n } else {\n task = this.updateTaskData(task, payload);\n }\n\n return {task};\n }\n\n /**\n * Handle AGENT_CONTACT_RESERVED event\n * Creates a new task; state machine event is sent during processing\n */\n private handleContactReserved(context: EventContext): TaskEventActions {\n const {payload} = context;\n const isConsultedTask =\n payload.isConsulted === true || isSecondaryEpDnAgent(payload.interaction);\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n\n const taskData: TaskData = {\n ...payload,\n isConsulted: isConsultedTask,\n isAutoAnswering: shouldAutoAnswer,\n };\n\n const task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n\n return {task};\n }\n\n /**\n * Handle AGENT_CONTACT event\n * Re-creates task if missing (multi-session scenario)\n */\n private handleAgentContact(context: EventContext): TaskEventActions {\n let {task} = context;\n const {payload} = context;\n\n if (!task) {\n const isConsultedTask =\n payload.isConsulted === true || isSecondaryEpDnAgent(payload.interaction);\n const shouldAutoAnswer = shouldAutoAnswerTask(\n payload,\n this.agentId,\n this.webCallingService.loginOption,\n this.webRtcEnabled\n );\n const taskData: TaskData = {\n ...payload,\n isConsulted: isConsultedTask,\n wrapUpRequired: payload.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload),\n isAutoAnswering: shouldAutoAnswer,\n };\n\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.setupTaskListeners(task);\n this.taskCollection[payload.interactionId] = task;\n }\n\n return {task};\n }\n\n private updateTaskData(task: ITask, taskData: TaskData): ITask {\n if (!task) {\n throw new Error('Task not found for update');\n }\n\n const snapshot = task.stateMachineService?.getSnapshot?.();\n const isConsultingFlow =\n snapshot?.value === 'CONSULTING' || taskData.interaction?.state === 'consulting';\n\n const updateTaskData = isConsultingFlow\n ? {\n ...taskData,\n destAgentId: taskData.destAgentId ?? snapshot?.context?.consultDestinationAgentId ?? null,\n destinationType:\n taskData.destinationType ?? snapshot?.context?.consultDestinationType ?? null,\n }\n : taskData;\n\n task.updateTaskData(updateTaskData);\n this.taskCollection[taskData.interactionId] = task;\n\n return task;\n }\n\n /**\n * Setup listeners for task events that need to be bubbled up to TaskManager\n * This replaces the previous callback injection pattern\n */\n private setupTaskListeners(task: ITask): void {\n // Listen for TASK_INCOMING and re-emit so webex.cc can notify consumers\n task.on(TASK_EVENTS.TASK_INCOMING, (t: ITask) => {\n LoggerProxy.log(`Task incoming event received`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: t.data?.interactionId,\n });\n\n this.emit(TASK_EVENTS.TASK_INCOMING, t);\n });\n\n task.on(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, (t: ITask) => {\n LoggerProxy.log(`Campaign preview reservation event received`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: t.data?.interactionId,\n });\n\n this.emit(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, t);\n });\n\n // Listen for TASK_HYDRATE on the task and re-emit on TaskManager\n task.on(TASK_EVENTS.TASK_HYDRATE, (t: ITask) => {\n // Task data is already updated by the task itself before emitting\n this.emit(TASK_EVENTS.TASK_HYDRATE, t);\n });\n\n task.on(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, (t: ITask) => {\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, t);\n });\n\n // Listen for internal cleanup signal emitted by the state machine\n task.on(TASK_EVENTS.TASK_CLEANUP, (t: ITask, options?: {removeFromCollection?: boolean}) => {\n this.handleTaskCleanup(t);\n if (options?.removeFromCollection) {\n const interactionId = t?.data?.interactionId;\n if (interactionId && this.taskCollection[interactionId]) {\n this.removeTaskFromCollection(t);\n }\n }\n });\n }\n\n private removeTaskFromCollection(task: ITask) {\n if (typeof task.cancelAutoWrapupTimer === 'function') {\n task.cancelAutoWrapupTimer();\n }\n if (task?.data?.interactionId) {\n delete this.taskCollection[task.data.interactionId];\n LoggerProxy.info(`Task removed from collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REMOVE_TASK_FROM_COLLECTION,\n interactionId: task.data.interactionId,\n });\n }\n }\n\n /**\n * Handles CONTACT_MERGED event logic\n * @param task - The task to process\n * @param taskData - The task data from the event payload\n * @returns Updated or newly created task\n * @private\n */\n private handleContactMergedEvent(context: EventContext): TaskEventActions {\n const {payload} = context;\n let task = context.task;\n\n if (payload.childInteractionId && this.taskCollection[payload.childInteractionId]) {\n this.removeTaskFromCollection(this.taskCollection[payload.childInteractionId]);\n }\n\n if (task) {\n LoggerProxy.log(`Got CONTACT_MERGED: Task already exists in collection`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n // update the task data\n this.updateTaskData(task, payload);\n } else {\n // Case2 : Task is not present in taskCollection\n LoggerProxy.log(`Got CONTACT_MERGED : Creating new task in taskManager`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REGISTER_TASK_LISTENERS,\n interactionId: payload.interactionId,\n });\n\n const taskData: TaskData = {\n ...payload,\n wrapUpRequired: payload.interaction?.participants?.[this.agentId]?.isWrapUp || false,\n isConferenceInProgress: getIsConferenceInProgress(payload),\n isConsulted: false,\n };\n\n task = TaskFactory.createTask(\n this.contact,\n this.webCallingService,\n taskData,\n this.configFlags,\n this.wrapupData,\n this.agentId\n );\n this.taskCollection[payload.interactionId] = task;\n\n // Transition the new task out of IDLE immediately so UI controls are\n // computed before TASK_MERGED is emitted. This handles the race where\n // AgentContactAssigned arrives before ContactMerged and gets dropped.\n // Send HYDRATE before setupTaskListeners so the emitTaskHydrate action\n // doesn't bubble up to the Widget (avoids duplicate listener registration).\n task.sendStateMachineEvent({\n type: TaskEvent.HYDRATE,\n taskData,\n agentId: this.agentId,\n } as TaskEventPayload);\n\n this.setupTaskListeners(task);\n }\n\n if (task) {\n this.emit(TASK_EVENTS.TASK_MERGED, task);\n }\n\n return {task};\n }\n\n /**\n * Handles cleanup of task resources including Desktop/WebRTC call cleanup and task removal\n * @param task - The task to clean up\n * @private\n */\n private handleTaskCleanup(task: ITask) {\n // Clean up Desktop/WebRTC calling resources for browser-based telephony tasks\n if (\n this.webCallingService.loginOption === LoginOption.BROWSER &&\n task.data.interaction.mediaType === MEDIA_CHANNEL.TELEPHONY &&\n task instanceof WebRTC\n ) {\n task.unregisterWebCallListeners();\n this.webCallingService.cleanUpCall();\n }\n\n const isOutdial = task.data.interaction.outboundType === 'OUTDIAL';\n const isNew = task.data.interaction.state === 'new';\n const needsWrapUp = task.data.agentsPendingWrapUp?.includes(this.agentId) ?? false;\n\n // For OUTDIAL: only remove if NOT terminated (user-declined, no wrap-up follows)\n // For non-OUTDIAL: remove if state is 'new'\n // Always remove if secondary EpDn agent\n if (\n (isNew && !(isOutdial && needsWrapUp)) ||\n isSecondaryEpDnAgent(task.data.interaction) ||\n (!needsWrapUp && isOutdial) // For outdial tasks, needs wrap-up is false and state is \"WRAPUP\". We need to just remove the task.\n ) {\n this.removeTaskFromCollection(task);\n }\n }\n\n /**\n * Sends transcript start/stop event based on the CC event type.\n * Fire-and-forget; errors are logged but do not interrupt event processing.\n */\n private requestRealTimeTranscripts(eventType: string, interactionId: string): void {\n const action = TRANSCRIPT_EVENT_MAP[eventType];\n if (!action || !this.apiAIAssistant) return;\n if (this.configFlags?.aiFeature?.realtimeTranscripts?.enable !== true) return;\n\n this.apiAIAssistant\n .sendEvent(\n this.agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.GET_TRANSCRIPTS,\n {action}\n )\n .catch((error) => {\n LoggerProxy.error(`Failed to send transcript ${action} event`, {\n module: TASK_MANAGER_FILE,\n method: METHODS.REQUEST_REAL_TIME_TRANSCRIPTS,\n interactionId,\n error,\n });\n });\n }\n\n public getTask(taskId: TaskId): ITask {\n return this.taskCollection[taskId];\n }\n\n public getAllTasks(): Record<TaskId, ITask> {\n return {...this.taskCollection};\n }\n\n public static getTaskManager(\n apiAIAssistant: ApiAIAssistant,\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n webSocketManager: WebSocketManager,\n rtdWebSocketManager?: WebSocketManager\n ): TaskManager {\n if (!TaskManager.taskManager) {\n TaskManager.taskManager = new TaskManager(\n apiAIAssistant,\n contact,\n webCallingService,\n webSocketManager,\n rtdWebSocketManager\n );\n }\n\n return TaskManager.taskManager;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAWA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,UAAA,GAAAR,OAAA;AAOA,IAAAS,YAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,OAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,aAAA,GAAAX,OAAA;AACA,IAAAY,mBAAA,GAAAZ,OAAA;AAAuD,SAAAD,uBAAAc,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGvD,MAAMG,YAAY,GAAG,IAAIC,GAAG,CAAYC,MAAM,CAACC,MAAM,CAACC,iBAAS,CAAgB,CAAC;AAEhF,MAAMC,SAAS,GAAIC,KAAa,IAAyBN,YAAY,CAACO,GAAG,CAACD,KAAkB,CAAC;;AAE7F;AACe,MAAME,WAAW,SAASC,eAAY,CAAC;EAGpD;AACF;AACA;AACA;AACA;;EAKE;;EAOA;AACF;AACA;AACA;AACA;EACEC,WAAWA,CACTC,cAA8B,EAC9BC,OAA0C,EAC1CC,iBAAoC,EACpCC,gBAAkC,EAClCC,mBAAqC,EACrC;IACA,KAAK,CAAC,CAAC;IACP,IAAI,CAACJ,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACC,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;IACxB,IAAI,CAACC,aAAa,GAAG,KAAK;IAE1B,IAAI,CAACC,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACC,yBAAyB,CAAC,CAAC;EAClC;EAEOC,4BAA4BA,CAACC,KAAa,EAAE;IACjD,IAAI;MACF,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC;MAEjC,MAAMI,aAAa,GAAGH,OAAO,EAAEI,IAAI,EAAEA,IAAI,EAAEC,cAAc;MACzD,IAAI,CAACF,aAAa,EAAE;MAEpB,MAAMG,IAAI,GAAG,IAAI,CAACZ,cAAc,CAACS,aAAa,CAAC;MAC/C,IAAI,CAACG,IAAI,EAAE;QACTC,oBAAW,CAACC,IAAI,CAAC,uCAAuC,EAAE;UACxDC,MAAM,EAAEC,4BAAiB;UACzBC,MAAM,EAAEC,mBAAO,CAACC,gCAAgC;UAChDV;QACF,CAAC,CAAC;QAEF;MACF;MAEA,QAAQH,OAAO,CAACc,IAAI;QAClB,KAAKhC,iBAAS,CAACiC,uBAAuB;QACtC,KAAKjC,iBAAS,CAACkC,kBAAkB;UAC/BV,IAAI,CAACW,IAAI,CAACjB,OAAO,CAACc,IAAI,EAAEd,OAAO,CAACI,IAAI,CAAC;UACrC;MACJ;IACF,CAAC,CAAC,OAAOc,KAAK,EAAE;MACdX,oBAAW,CAACW,KAAK,CAAC,uCAAuC,EAAE;QACzDT,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAACC,gCAAgC;QAChDK;MACF,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;EACSC,cAAcA,CAACC,WAAwB,EAAE;IAC9C,IAAI,CAACA,WAAW,GAAGA,WAAW;EAChC;;EAEA;AACF;AACA;EACSC,aAAaA,CAACC,UAAsB,EAAE;IAC3C,IAAI,CAACA,UAAU,GAAGA,UAAU;EAC9B;;EAEA;AACF;AACA;EACSC,UAAUA,CAACC,OAAe,EAAE;IACjC,IAAI,CAACA,OAAO,GAAGA,OAAO;EACxB;;EAEA;AACF;AACA;AACA;AACA;EACSC,UAAUA,CAAA,EAAW;IAC1B,OAAO,IAAI,CAACD,OAAO;EACrB;EAEOE,gBAAgBA,CAAC/B,aAAsB,EAAE;IAC9C,IAAI,CAACA,aAAa,GAAGA,aAAa;EACpC;EAEQgC,qBAAqB,GAAIC,IAAW,IAAK;IAC/C,MAAMC,WAAW,GAAGjD,MAAM,CAACC,MAAM,CAAC,IAAI,CAACa,cAAc,CAAC,CAACoC,IAAI,CACxDxB,IAAI,IACHA,IAAI,CAACF,IAAI,CAAC2B,WAAW,CAACC,SAAS,KAAK,WAAW,IAAI,CAAC,IAAAC,uCAA4B,EAAC3B,IAAI,CACzF,CAAC;IAED,IAAIuB,WAAW,EAAE;MACf,IAAI,CAACtC,iBAAiB,CAAC2C,aAAa,CAACN,IAAI,CAACO,SAAS,CAAC,CAAC,EAAEN,WAAW,CAACzB,IAAI,CAACD,aAAa,CAAC;MACtFI,oBAAW,CAAC6B,GAAG,CAAC,qBAAqB,EAAE;QACrC3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAACyB,wBAAwB;QACxClC,aAAa,EAAE0B,WAAW,CAACzB,IAAI,CAACD;MAClC,CAAC,CAAC;;MAEF;MACA,MAAMmC,YAAY,GAAGpD,WAAW,CAACqD,+BAA+B,CAC9DzD,iBAAS,CAAC0D,sBAAsB,EAChCX,WAAW,CAACzB,IACd,CAAC;MACD,IAAIkC,YAAY,IAAIT,WAAW,EAAE;QAC/BA,WAAW,CAACY,qBAAqB,CAACH,YAAY,CAAC;MACjD;IACF;IACA,IAAI,CAACV,IAAI,GAAGA,IAAI;EAClB,CAAC;EAEM/B,yBAAyBA,CAAA,EAAG;IACjC,IAAI,CAACN,iBAAiB,CAACmD,EAAE,CAACC,oBAAW,CAACC,aAAa,EAAE,IAAI,CAACjB,qBAAqB,CAAC;EAClF;EAEOkB,2BAA2BA,CAAA,EAAG;IACnC,IAAI,CAACtD,iBAAiB,CAACuD,GAAG,CAACH,oBAAW,CAACC,aAAa,EAAE,IAAI,CAACjB,qBAAqB,CAAC;EACnF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAeY,+BAA+BA,CAC5CQ,OAAkB,EAClB/C,OAAyB,EACzBwB,OAAgB,EACS;IACzB,MAAMwB,eAAe,GACnBhD,OAAO,CAACgD,eAAe,IACvBhD,OAAO,CAAC+B,WAAW,EAAEkB,KAAK,GAAGjD,OAAO,CAACG,aAAa,CAAC,EAAE6C,eAAe;IAEtE,QAAQD,OAAO;MACb;MACA,KAAKjE,iBAAS,CAAC0D,sBAAsB;QAAE;QACrC,IAAI,IAAAU,gCAAqB,EAAClD,OAAO,CAAC,EAAE;UAClC,OAAO;YACLc,IAAI,EAAEqC,uBAAS,CAACC,aAAa;YAC7BC,QAAQ,EAAErD,OAAO;YACjBsD,2BAA2B,EAAE;UAC/B,CAAC;QACH;QAEA,OAAO;UAACxC,IAAI,EAAEqC,uBAAS,CAACC,aAAa;UAAEC,QAAQ,EAAErD;QAAO,CAAC;MAE3D,KAAKlB,iBAAS,CAACyE,gCAAgC;QAAE;QAC/C,OAAO;UACLzC,IAAI,EAAEqC,uBAAS,CAACC,aAAa;UAC7BC,QAAQ,EAAErD,OAAO;UACjBsD,2BAA2B,EAAE;QAC/B,CAAC;MAEH,KAAKxE,iBAAS,CAAC0E,mBAAmB;QAAE;QAClC,OAAO;UAAC1C,IAAI,EAAEqC,uBAAS,CAACM,YAAY;UAAEJ,QAAQ,EAAErD;QAAO,CAAC;MAE1D,KAAKlB,iBAAS,CAAC4E,aAAa;QAAE;QAC5B;QACA,OAAO;UAAC5C,IAAI,EAAEqC,uBAAS,CAACQ,OAAO;UAAEN,QAAQ,EAAErD,OAAO;UAAEwB;QAAO,CAAC;MAE9D,KAAK1C,iBAAS,CAAC8E,eAAe;QAC5B,OAAO;UAAC9C,IAAI,EAAEqC,uBAAS,CAACS,eAAe;UAAEP,QAAQ,EAAErD;QAAO,CAAC;MAC7D,KAAKlB,iBAAS,CAAC+E,qBAAqB;QAClC,OAAO;UAAC/C,IAAI,EAAEqC,uBAAS,CAACU,qBAAqB;UAAER,QAAQ,EAAErD;QAAO,CAAC;MAEnE,KAAKlB,iBAAS,CAACgF,mBAAmB;QAAE;QAClC,OAAO;UACLhD,IAAI,EAAEqC,uBAAS,CAACY,aAAa;UAC7BV,QAAQ,EAAE;YAAC,GAAGrD,OAAO;YAAEgE,WAAW,EAAE;UAAI;QAC1C,CAAC;MAEH,KAAKlF,iBAAS,CAACmF,sBAAsB;QAAE;QACrC,OAAO;UAACnD,IAAI,EAAEqC,uBAAS,CAACe,MAAM;UAAEb,QAAQ,EAAErD;QAAO,CAAC;MAEpD,KAAKlB,iBAAS,CAACqF,kBAAkB;QAC/B,OAAO;UACLrD,IAAI,EAAEqC,uBAAS,CAACiB,YAAY;UAC5BpB,eAAe,EAAEA,eAAe,IAAI,EAAE;UACtCK,QAAQ,EAAErD;QACZ,CAAC;MAEH,KAAKlB,iBAAS,CAACuF,oBAAoB;QACjC,OAAO;UACLvD,IAAI,EAAEqC,uBAAS,CAACmB,cAAc;UAC9BtB,eAAe,EAAEA,eAAe,IAAI,EAAE;UACtCK,QAAQ,EAAErD;QACZ,CAAC;MAEH,KAAKlB,iBAAS,CAACyF,qBAAqB;QAClC,OAAO;UACLzD,IAAI,EAAEqC,uBAAS,CAACqB,eAAe;UAC/BnB,QAAQ,EAAE;YAAC,GAAGrD,OAAO;YAAEgE,WAAW,EAAE;UAAK;QAC3C,CAAC;MAEH,KAAKlF,iBAAS,CAAC2F,gBAAgB;QAAE;QAC/B;QACA,OAAO;UACL3D,IAAI,EAAEqC,uBAAS,CAACuB,iBAAiB;UACjCC,6BAA6B,EAAE,IAAI;UACnCtB,QAAQ,EAAErD;QACZ,CAAC;MAEH,KAAKlB,iBAAS,CAAC8F,mBAAmB;QAAE;QAClC,OAAO;UAAC9D,IAAI,EAAEqC,uBAAS,CAAC0B,WAAW;UAAExB,QAAQ,EAAErD;QAAO,CAAC;MAEzD,KAAKlB,iBAAS,CAACgG,oBAAoB;MACnC,KAAKhG,iBAAS,CAACiG,gBAAgB;QAC7B,OAAO;UAACjE,IAAI,EAAEqC,uBAAS,CAAC6B,cAAc;UAAEC,MAAM,EAAEjF,OAAO,CAACiF,MAAM;UAAE5B,QAAQ,EAAErD;QAAO,CAAC;MAEpF,KAAKlB,iBAAS,CAACoG,mBAAmB;QAChC,OAAO;UAACpE,IAAI,EAAEqC,uBAAS,CAACgC,UAAU;UAAE9B,QAAQ,EAAErD;QAAO,CAAC;MAExD,KAAKlB,iBAAS,CAACsG,uBAAuB;QACpC,OAAO;UAACtE,IAAI,EAAEqC,uBAAS,CAACkC,iBAAiB;UAAEhC,QAAQ,EAAErD;QAAO,CAAC;MAE/D,KAAKlB,iBAAS,CAACwG,uBAAuB,CAAC,CAAC;MACxC,KAAKxG,iBAAS,CAACyG,yBAAyB,CAAC,CAAC;MAC1C,KAAKzG,iBAAS,CAAC0G,uBAAuB;QAAE;QACtC,OAAO;UACL1E,IAAI,EAAEqC,uBAAS,CAACsC,gBAAgB;UAChCpC,QAAQ,EAAErD;QACZ,CAAC;MAEH,KAAKlB,iBAAS,CAAC4G,YAAY;QACzB,OAAO;UAAC5E,IAAI,EAAEqC,uBAAS,CAACwC,WAAW;UAAEtC,QAAQ,EAAE;YAAC,GAAGrD,OAAO;YAAE4F,cAAc,EAAE;UAAI;QAAC,CAAC;MACpF,KAAK9G,iBAAS,CAAC+G,wBAAwB;QACrC,OAAO,IAAI;MAAE;;MAEf,KAAK/G,iBAAS,CAACgH,2BAA2B;MAC1C,KAAKhH,iBAAS,CAACiH,2BAA2B;MAC1C,KAAKjH,iBAAS,CAACkH,6BAA6B;MAC5C,KAAKlH,iBAAS,CAACmH,gCAAgC;QAC7C,OAAO;UAACnF,IAAI,EAAEqC,uBAAS,CAAC+C,eAAe;UAAE7C,QAAQ,EAAErD;QAAO,CAAC;MAE7D,KAAKlB,iBAAS,CAACqH,aAAa;QAC1B,OAAO;UACLrF,IAAI,EAAEqC,uBAAS,CAACgD,aAAa;UAC7B9C,QAAQ,EAAE;YACR,GAAGrD,OAAO;YACV4F,cAAc,EAAE,IAAA1C,gCAAqB,EAAClD,OAAO,CAAC,GAC1C,KAAK,GACLA,OAAO,CAACoG,mBAAmB,EAAEC,QAAQ,CAAC7E,OAAO,IAAI,EAAE,CAAC,IAAI;UAC9D;QACF,CAAC;MAEH,KAAK1C,iBAAS,CAACwH,mBAAmB;QAChC,OAAO;UAACxF,IAAI,EAAEqC,uBAAS,CAACoD,aAAa;UAAEtB,MAAM,EAAEjF,OAAO,CAACiF;QAAM,CAAC;MAEhE,KAAKnG,iBAAS,CAAC0H,2BAA2B;QACxC,OAAO;UAAC1F,IAAI,EAAEqC,uBAAS,CAACsD,aAAa;UAAExB,MAAM,EAAEjF,OAAO,CAACiF;QAAM,CAAC;MAEhE,KAAKnG,iBAAS,CAAC4H,wBAAwB;QACrC,OAAO;UAAC5F,IAAI,EAAEqC,uBAAS,CAACwD,IAAI;UAAEtD,QAAQ,EAAErD,OAAO;UAAEiF,MAAM,EAAEjF,OAAO,CAACiF;QAAM,CAAC;MAE1E,KAAKnG,iBAAS,CAAC8H,qBAAqB;QAClC,OAAO;UAAC9F,IAAI,EAAEqC,uBAAS,CAAC0D,eAAe;UAAExD,QAAQ,EAAErD,OAAO;UAAEiF,MAAM,EAAEjF,OAAO,CAACiF;QAAM,CAAC;MAErF,KAAKnG,iBAAS,CAACgI,8BAA8B;QAC3C,OAAO;UAAChG,IAAI,EAAEqC,uBAAS,CAAC2D,8BAA8B;UAAEzD,QAAQ,EAAErD;QAAO,CAAC;MAE5E,KAAKlB,iBAAS,CAACiI,4BAA4B;QACzC,OAAO;UAACjG,IAAI,EAAEqC,uBAAS,CAAC4D,4BAA4B;UAAE1D,QAAQ,EAAErD;QAAO,CAAC;MAE1E,KAAKlB,iBAAS,CAACkI,8BAA8B;QAC3C,OAAO;UAAClG,IAAI,EAAEqC,uBAAS,CAAC6D,8BAA8B;UAAE3D,QAAQ,EAAErD;QAAO,CAAC;MAE5E,KAAKlB,iBAAS,CAACmI,yBAAyB;QACtC,OAAO;UAACnG,IAAI,EAAEqC,uBAAS,CAAC+D,iBAAiB;UAAE7D,QAAQ,EAAErD;QAAO,CAAC;MAE/D,KAAKlB,iBAAS,CAACqI,wBAAwB;QACrC,OAAO;UAACrG,IAAI,EAAEqC,uBAAS,CAACiE,eAAe;UAAE/D,QAAQ,EAAErD;QAAO,CAAC;MAE7D,KAAKlB,iBAAS,CAACuI,yBAAyB;QACtC,OAAO;UAACvG,IAAI,EAAEqC,uBAAS,CAACmE,gBAAgB;UAAEjE,QAAQ,EAAErD;QAAO,CAAC;MAE9D,KAAKlB,iBAAS,CAACyI,eAAe;QAC5B,OAAO;UAACzG,IAAI,EAAEqC,uBAAS,CAACqE,eAAe;UAAEnE,QAAQ,EAAErD;QAAO,CAAC;;MAE7D;MACA,KAAKlB,iBAAS,CAAC2I,yBAAyB;MACxC,KAAK3I,iBAAS,CAAC4I,0BAA0B;MACzC,KAAK5I,iBAAS,CAAC6I,6BAA6B;QAC1C,OAAO;UAAC7G,IAAI,EAAEqC,uBAAS,CAACyE,gBAAgB;UAAEvE,QAAQ,EAAErD;QAAO,CAAC;MAE9D,KAAKlB,iBAAS,CAAC+I,+BAA+B;QAC5C,OAAO;UAAC/G,IAAI,EAAEqC,uBAAS,CAAC2E,iBAAiB;UAAE7C,MAAM,EAAEjF,OAAO,CAACiF,MAAM;UAAE5B,QAAQ,EAAErD;QAAO,CAAC;MAEvF,KAAKlB,iBAAS,CAACiJ,8BAA8B;QAC3C,OAAO;UAACjH,IAAI,EAAEqC,uBAAS,CAAC6E,cAAc;UAAE3E,QAAQ,EAAErD;QAAO,CAAC;MAE5D,KAAKlB,iBAAS,CAACmJ,2BAA2B;QACxC,OAAO;UACLnH,IAAI,EAAEqC,uBAAS,CAAC+E,iBAAiB;UACjC7E,QAAQ,EAAErD,OAAO;UACjBmI,aAAa,EAAEnI,OAAO,EAAEmI;QAC1B,CAAC;MAEH,KAAKrJ,iBAAS,CAACsJ,4BAA4B;QACzC,OAAO;UAACtH,IAAI,EAAEqC,uBAAS,CAACkF,2BAA2B;UAAEhF,QAAQ,EAAErD;QAAO,CAAC;MAEzE;QACE;QACA,OAAO,IAAI;IACf;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACUJ,qBAAqBA,CAAA,EAAG;IAC9B,IAAI,CAACJ,gBAAgB,CAACkD,EAAE,CAAC,SAAS,EAAG3C,KAAK,IAAK;MAC7C;MACA,MAAMuI,OAAO,GAAGpJ,WAAW,CAACqJ,qBAAqB,CAACxI,KAAK,CAAC;MACxD,IAAI,CAACuI,OAAO,EAAE;;MAEd;MACA,MAAME,YAAY,GAAG,IAAI,CAACC,mBAAmB,CAACH,OAAO,CAAC;MACtD,IAAI,CAACE,YAAY,EAAE;MAEnB,MAAME,OAAO,GAAG,IAAI,CAACC,wBAAwB,CAACH,YAAY,CAAC;MAE3D,MAAM;QAAClI;MAAI,CAAC,GAAGoI,OAAO;MACtB,IAAI,CAACpI,IAAI,EAAE;MAEX,MAAM;QAACN,OAAO;QAAE4I;MAAiB,CAAC,GAAGJ,YAAY;;MAEjD;MACA;MACA,IAAIxI,OAAO,EAAE;QACX,IAAI,CAAC6I,cAAc,CAACvI,IAAI,EAAEN,OAAO,CAAC;MACpC;;MAEA;MACA;MACA,IAAI4I,iBAAiB,EAAE;QACrBtI,IAAI,CAACmC,qBAAqB,CAACmG,iBAAiB,CAAC;MAC/C;;MAEA;MACA;MACA,IAAIJ,YAAY,CAACM,SAAS,KAAKhK,iBAAS,CAACiK,8BAA8B,EAAE;QACvEzI,IAAI,CAACW,IAAI,CAAC+H,kBAAW,CAACC,uBAAuB,EAAE3I,IAAI,CAAC;MACtD;;MAEA;MACA,IAAI,CAAC4I,0BAA0B,CAACV,YAAY,CAACM,SAAS,EAAE9I,OAAO,CAACG,aAAa,CAAC;IAChF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACE,OAAeoI,qBAAqBA,CAACxI,KAAa,EAA2B;IAC3E,IAAI;MACF,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAqB;;MAErD;MACA,IAAIC,OAAO,EAAEmJ,SAAS,KAAK,MAAM,IAAInJ,OAAO,EAAEmJ,SAAS,KAAK,IAAI,EAAE;QAChE,OAAO,IAAI;MACb;;MAEA;MACA,IAAInJ,OAAO,EAAEI,IAAI,EAAE2B,WAAW,EAAE;QAC9B/B,OAAO,CAACI,IAAI,GAAG,IAAAgJ,qCAAiB,EAACpJ,OAAO,CAACI,IAAI,CAAC;MAChD;MAEA,OAAOJ,OAAO;IAChB,CAAC,CAAC,OAAOkB,KAAK,EAAE;MACdX,oBAAW,CAACW,KAAK,CAAC,mCAAmC,EAAE;QACrDT,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAE,uBAAuB;QAC/BO;MACF,CAAC,CAAC;MAEF,OAAO,IAAI;IACb;EACF;;EAEA;AACF;AACA;AACA;EACUuH,mBAAmBA,CAACH,OAAyB,EAAuB;IAC1E,MAAMQ,SAAS,GAAGR,OAAO,CAAClI,IAAI,EAAEU,IAAI,IAAIwH,OAAO,CAACxH,IAAI;IAEpD,IAAI,CAACgI,SAAS,IAAI,CAAC/J,SAAS,CAAC+J,SAAS,CAAC,EAAE;MACvC,OAAO,IAAI;IACb;IAEA,MAAM3I,aAAa,GAAGmI,OAAO,CAAClI,IAAI,CAACD,aAAa;IAChD,MAAMkJ,wBAAwB,GAAGf,OAAO,CAAClI,IAAI,CAACiJ,wBAAwB;IACtE,IAAI/I,IAAI,GAAG,IAAI,CAACZ,cAAc,CAACS,aAAa,CAAC;;IAE7C;IACA;IACA;IACA,IAAI,CAACG,IAAI,IAAI+I,wBAAwB,EAAE;MACrC/I,IAAI,GAAG,IAAI,CAACZ,cAAc,CAAC2J,wBAAwB,CAAC;MACpD,IAAI/I,IAAI,EAAE;QACR;QACA,OAAO,IAAI,CAACZ,cAAc,CAAC2J,wBAAwB,CAAC;QACpD,IAAI,CAAC3J,cAAc,CAACS,aAAa,CAAC,GAAGG,IAAI;MAC3C;IACF;IAEA,MAAMgJ,gBAAgB,GAAGC,OAAO,CAACjJ,IAAI,EAAEF,IAAI,EAAE4D,WAAW,CAAC;IACzD,MAAMwF,qBAAqB,GAAGA,CAAA,KAAM;MAClC,IAAIlB,OAAO,CAAClI,IAAI,CAACwF,cAAc,KAAK6D,SAAS,EAAE;QAC7C,OAAOnB,OAAO,CAAClI,IAAI,CAACwF,cAAc;MACpC;MACA,IAAI0C,OAAO,CAAClI,IAAI,CAAC4D,WAAW,KAAKyF,SAAS,EAAE;QAC1C,OAAO,CAACnB,OAAO,CAAClI,IAAI,CAAC4D,WAAW;MAClC;MAEA,OAAO,CAACsF,gBAAgB;IAC1B,CAAC;IAED,MAAMI,eAAe,GACnBZ,SAAS,KAAKhK,iBAAS,CAACyG,yBAAyB,IACjDuD,SAAS,KAAKhK,iBAAS,CAACwG,uBAAuB,IAC/CwD,SAAS,KAAKhK,iBAAS,CAAC0G,uBAAuB,GAC3C;MACE,GAAG8C,OAAO,CAAClI,IAAI;MACfwF,cAAc,EAAE4D,qBAAqB,CAAC;IACxC,CAAC,GACDlB,OAAO,CAAClI,IAAI;IAElB,MAAMwI,iBAAiB,GAAG1J,WAAW,CAACqD,+BAA+B,CACnEuG,SAAS,EACTY,eAAe,EACf,IAAI,CAAClI,OACP,CAAC;IAEDjB,oBAAW,CAACC,IAAI,CAAC,uBAAuBsI,SAAS,EAAE,EAAE;MACnDrI,MAAM,EAAEC,4BAAiB;MACzBC,MAAM,EAAE,qBAAqB;MAC7BR;IACF,CAAC,CAAC;IAEF,OAAO;MACL2I,SAAS;MACT9I,OAAO,EAAE0J,eAAe;MACxBpJ,IAAI;MACJsI;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACUD,wBAAwBA,CAACgB,OAAqB,EAAoB;IACxE,MAAM;MAACb;IAAS,CAAC,GAAGa,OAAO;IAE3B,QAAQb,SAAS;MACf,KAAKhK,iBAAS,CAAC0D,sBAAsB;QACnC,OAAO,IAAI,CAACoH,qBAAqB,CAACD,OAAO,CAAC;MAE5C,KAAK7K,iBAAS,CAAC4E,aAAa;QAC1B,OAAO,IAAI,CAACmG,kBAAkB,CAACF,OAAO,CAAC;MAEzC,KAAK7K,iBAAS,CAACgL,cAAc;QAC3B,OAAO,IAAI,CAACC,wBAAwB,CAACJ,OAAO,CAAC;MAE/C,KAAK7K,iBAAS,CAACyE,gCAAgC;QAC7C,OAAO,IAAI,CAACyG,gCAAgC,CAACL,OAAO,CAAC;MAEvD,KAAK7K,iBAAS,CAACmL,wBAAwB;QACrC,OAAO,IAAI,CAACC,4BAA4B,CAACP,OAAO,CAAC;MAEnD;QACE,OAAO;UAACrJ,IAAI,EAAEqJ,OAAO,CAACrJ;QAAI,CAAC;IAC/B;EACF;EAEQ4J,4BAA4BA,CAACP,OAAqB,EAAE;IAC1D,MAAM;MAAC3J;IAAO,CAAC,GAAG2J,OAAO;IACzB,IAAI;MAACrJ;IAAI,CAAC,GAAGqJ,OAAO;IACpB;IACA;IACA;IACA,IAAIrJ,IAAI,EAAE;MACR;MACA;MACA,MAAM6J,WAAW,GAAG7J,IAAI,CAACF,IAAI,EAAE2B,WAAW,EAAEqI,qBAAqB;MACjE,MAAMC,WAAqB,GAAG;QAAC,GAAGrK;MAAO,CAAC;MAE1C,IAAImK,WAAW,EAAE;QACf,MAAMG,cAAc,GAAG;UACrB,IAAIH,WAAW,CAACI,yBAAyB,IAAI;YAC3CA,yBAAyB,EAAEJ,WAAW,CAACI;UACzC,CAAC,CAAC;UACF,IAAIJ,WAAW,CAACK,2BAA2B,IAAI;YAC7CA,2BAA2B,EAAEL,WAAW,CAACK;UAC3C,CAAC,CAAC;UACF,IAAIL,WAAW,CAACM,2BAA2B,IAAI;YAC7CA,2BAA2B,EAAEN,WAAW,CAACM;UAC3C,CAAC,CAAC;UACF,IAAIN,WAAW,CAACO,6BAA6B,IAAI;YAC/CA,6BAA6B,EAAEP,WAAW,CAACO;UAC7C,CAAC;QACH,CAAC;QAED,IAAI,CAACL,WAAW,CAACtI,WAAW,EAAE;UAC5BsI,WAAW,CAACtI,WAAW,GAAG,CAAC,CAAmC;QAChE;QAEAsI,WAAW,CAACtI,WAAW,GAAG;UACxB,GAAGsI,WAAW,CAACtI,WAAW;UAC1BqI,qBAAqB,EAAE;YACrB,GAAGE,cAAc;YACjB,IAAID,WAAW,CAACtI,WAAW,CAACqI,qBAAqB,IAAI,CAAC,CAAC;UACzD;QACF,CAAC;MACH;MAEA7J,oBAAW,CAAC6B,GAAG,CAAC,4DAA4D,EAAE;QAC5E3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;QACvCxK,aAAa,EAAEH,OAAO,CAACG,aAAa;QACpCC,IAAI,EAAE;UACJwK,MAAM,EAAE,CAAC,CAACP,WAAW,CAACtI,WAAW,EAAEqI,qBAAqB;UACxDS,UAAU,EAAER,WAAW,CAACtI,WAAW,EAAEqI,qBAAqB,EAAEG,yBAAyB;UACrFO,YAAY,EAAET,WAAW,CAACtI,WAAW,EAAEqI,qBAAqB,EAAEK,2BAA2B;UACzFM,cAAc,EACZV,WAAW,CAACtI,WAAW,EAAEqI,qBAAqB,EAAEM;QACpD;MACF,CAAC,CAAC;MAEFpK,IAAI,GAAG,IAAI,CAACuI,cAAc,CAACvI,IAAI,EAAE+J,WAAW,CAAC;MAC7C/J,IAAI,CAACW,IAAI,CAAC+H,kBAAW,CAACgC,6BAA6B,EAAE1K,IAAI,CAAC;IAC5D;IAEA,OAAO;MAACA;IAAI,CAAC;EACf;;EAEA;AACF;AACA;AACA;EACU0J,gCAAgCA,CAACL,OAAqB,EAAoB;IAChF,MAAM;MAAC3J;IAAO,CAAC,GAAG2J,OAAO;IACzB,IAAI;MAACrJ;IAAI,CAAC,GAAGqJ,OAAO;IAEpBpJ,oBAAW,CAAC6B,GAAG,CAAC,uCAAuC,EAAE;MACvD3B,MAAM,EAAEC,4BAAiB;MACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;MACvCxK,aAAa,EAAEH,OAAO,CAACG;IACzB,CAAC,CAAC;IAEF,IAAI,CAACG,IAAI,EAAE;MACTA,IAAI,GAAG2K,oBAAW,CAACC,UAAU,CAC3B,IAAI,CAAC5L,OAAO,EACZ,IAAI,CAACC,iBAAiB,EACtB;QACE,GAAGS,OAAO;QACV4F,cAAc,EAAE,KAAK;QACrBuF,sBAAsB,EAAE,KAAK;QAC7BC,eAAe,EAAE;MACnB,CAAC,EACD,IAAI,CAAChK,WAAW,EAChB,IAAI,CAACE,UAAU,EACf,IAAI,CAACE,OACP,CAAC;MACD,IAAI,CAAC6J,kBAAkB,CAAC/K,IAAI,CAAC;MAC7B,IAAI,CAACZ,cAAc,CAACM,OAAO,CAACG,aAAa,CAAC,GAAGG,IAAI;IACnD,CAAC,MAAM;MACLA,IAAI,GAAG,IAAI,CAACuI,cAAc,CAACvI,IAAI,EAAEN,OAAO,CAAC;IAC3C;IAEA,OAAO;MAACM;IAAI,CAAC;EACf;;EAEA;AACF;AACA;AACA;EACUsJ,qBAAqBA,CAACD,OAAqB,EAAoB;IACrE,MAAM;MAAC3J;IAAO,CAAC,GAAG2J,OAAO;IACzB,MAAM2B,eAAe,GACnBtL,OAAO,CAACgE,WAAW,KAAK,IAAI,IAAI,IAAAuH,+BAAoB,EAACvL,OAAO,CAAC+B,WAAW,CAAC;IAC3E,MAAMyJ,gBAAgB,GAAG,IAAAC,+BAAoB,EAC3CzL,OAAO,EACP,IAAI,CAACwB,OAAO,EACZ,IAAI,CAACjC,iBAAiB,CAACmM,WAAW,EAClC,IAAI,CAAC/L,aACP,CAAC;IAED,MAAM0D,QAAkB,GAAG;MACzB,GAAGrD,OAAO;MACVgE,WAAW,EAAEsH,eAAe;MAC5BF,eAAe,EAAEI;IACnB,CAAC;IAED,MAAMlL,IAAI,GAAG2K,oBAAW,CAACC,UAAU,CACjC,IAAI,CAAC5L,OAAO,EACZ,IAAI,CAACC,iBAAiB,EACtB8D,QAAQ,EACR,IAAI,CAACjC,WAAW,EAChB,IAAI,CAACE,UAAU,EACf,IAAI,CAACE,OACP,CAAC;IAED,IAAI,CAAC6J,kBAAkB,CAAC/K,IAAI,CAAC;IAC7B,IAAI,CAACZ,cAAc,CAACM,OAAO,CAACG,aAAa,CAAC,GAAGG,IAAI;IAEjD,OAAO;MAACA;IAAI,CAAC;EACf;;EAEA;AACF;AACA;AACA;EACUuJ,kBAAkBA,CAACF,OAAqB,EAAoB;IAClE,IAAI;MAACrJ;IAAI,CAAC,GAAGqJ,OAAO;IACpB,MAAM;MAAC3J;IAAO,CAAC,GAAG2J,OAAO;IAEzB,IAAI,CAACrJ,IAAI,EAAE;MACT,MAAMgL,eAAe,GACnBtL,OAAO,CAACgE,WAAW,KAAK,IAAI,IAAI,IAAAuH,+BAAoB,EAACvL,OAAO,CAAC+B,WAAW,CAAC;MAC3E,MAAMyJ,gBAAgB,GAAG,IAAAC,+BAAoB,EAC3CzL,OAAO,EACP,IAAI,CAACwB,OAAO,EACZ,IAAI,CAACjC,iBAAiB,CAACmM,WAAW,EAClC,IAAI,CAAC/L,aACP,CAAC;MACD,MAAM0D,QAAkB,GAAG;QACzB,GAAGrD,OAAO;QACVgE,WAAW,EAAEsH,eAAe;QAC5B1F,cAAc,EAAE5F,OAAO,CAAC+B,WAAW,EAAE4J,YAAY,GAAG,IAAI,CAACnK,OAAO,CAAC,EAAEoK,QAAQ,IAAI,KAAK;QACpFT,sBAAsB,EAAE,IAAAU,oCAAyB,EAAC7L,OAAO,CAAC;QAC1DoL,eAAe,EAAEI;MACnB,CAAC;MAEDlL,IAAI,GAAG2K,oBAAW,CAACC,UAAU,CAC3B,IAAI,CAAC5L,OAAO,EACZ,IAAI,CAACC,iBAAiB,EACtB8D,QAAQ,EACR,IAAI,CAACjC,WAAW,EAChB,IAAI,CAACE,UAAU,EACf,IAAI,CAACE,OACP,CAAC;MACD,IAAI,CAAC6J,kBAAkB,CAAC/K,IAAI,CAAC;MAC7B,IAAI,CAACZ,cAAc,CAACM,OAAO,CAACG,aAAa,CAAC,GAAGG,IAAI;IACnD;IAEA,OAAO;MAACA;IAAI,CAAC;EACf;EAEQuI,cAAcA,CAACvI,IAAW,EAAE+C,QAAkB,EAAS;IAC7D,IAAI,CAAC/C,IAAI,EAAE;MACT,MAAM,IAAIwL,KAAK,CAAC,2BAA2B,CAAC;IAC9C;IAEA,MAAMC,QAAQ,GAAGzL,IAAI,CAAC0L,mBAAmB,EAAEC,WAAW,GAAG,CAAC;IAC1D,MAAMC,gBAAgB,GACpBH,QAAQ,EAAE/M,KAAK,KAAK,YAAY,IAAIqE,QAAQ,CAACtB,WAAW,EAAEoK,KAAK,KAAK,YAAY;IAElF,MAAMtD,cAAc,GAAGqD,gBAAgB,GACnC;MACE,GAAG7I,QAAQ;MACX+I,WAAW,EAAE/I,QAAQ,CAAC+I,WAAW,IAAIL,QAAQ,EAAEpC,OAAO,EAAE0C,yBAAyB,IAAI,IAAI;MACzFC,eAAe,EACbjJ,QAAQ,CAACiJ,eAAe,IAAIP,QAAQ,EAAEpC,OAAO,EAAE4C,sBAAsB,IAAI;IAC7E,CAAC,GACDlJ,QAAQ;IAEZ/C,IAAI,CAACuI,cAAc,CAACA,cAAc,CAAC;IACnC,IAAI,CAACnJ,cAAc,CAAC2D,QAAQ,CAAClD,aAAa,CAAC,GAAGG,IAAI;IAElD,OAAOA,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACU+K,kBAAkBA,CAAC/K,IAAW,EAAQ;IAC5C;IACAA,IAAI,CAACoC,EAAE,CAACsG,kBAAW,CAAC5F,aAAa,EAAGoJ,CAAQ,IAAK;MAC/CjM,oBAAW,CAAC6B,GAAG,CAAC,8BAA8B,EAAE;QAC9C3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;QACvCxK,aAAa,EAAEqM,CAAC,CAACpM,IAAI,EAAED;MACzB,CAAC,CAAC;MAEF,IAAI,CAACc,IAAI,CAAC+H,kBAAW,CAAC5F,aAAa,EAAEoJ,CAAC,CAAC;IACzC,CAAC,CAAC;IAEFlM,IAAI,CAACoC,EAAE,CAACsG,kBAAW,CAACyD,iCAAiC,EAAGD,CAAQ,IAAK;MACnEjM,oBAAW,CAAC6B,GAAG,CAAC,6CAA6C,EAAE;QAC7D3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;QACvCxK,aAAa,EAAEqM,CAAC,CAACpM,IAAI,EAAED;MACzB,CAAC,CAAC;MAEF,IAAI,CAACc,IAAI,CAAC+H,kBAAW,CAACyD,iCAAiC,EAAED,CAAC,CAAC;IAC7D,CAAC,CAAC;;IAEF;IACAlM,IAAI,CAACoC,EAAE,CAACsG,kBAAW,CAAC0D,YAAY,EAAGF,CAAQ,IAAK;MAC9C;MACA,IAAI,CAACvL,IAAI,CAAC+H,kBAAW,CAAC0D,YAAY,EAAEF,CAAC,CAAC;IACxC,CAAC,CAAC;IAEFlM,IAAI,CAACoC,EAAE,CAACsG,kBAAW,CAAC2D,wBAAwB,EAAGH,CAAQ,IAAK;MAC1D,IAAI,CAACvL,IAAI,CAAC+H,kBAAW,CAAC2D,wBAAwB,EAAEH,CAAC,CAAC;IACpD,CAAC,CAAC;;IAEF;IACAlM,IAAI,CAACoC,EAAE,CAACsG,kBAAW,CAAC4D,YAAY,EAAE,CAACJ,CAAQ,EAAEK,OAA0C,KAAK;MAC1F,IAAI,CAACC,iBAAiB,CAACN,CAAC,CAAC;MACzB,IAAIK,OAAO,EAAEE,oBAAoB,EAAE;QACjC,MAAM5M,aAAa,GAAGqM,CAAC,EAAEpM,IAAI,EAAED,aAAa;QAC5C,IAAIA,aAAa,IAAI,IAAI,CAACT,cAAc,CAACS,aAAa,CAAC,EAAE;UACvD,IAAI,CAAC6M,wBAAwB,CAACR,CAAC,CAAC;QAClC;MACF;IACF,CAAC,CAAC;EACJ;EAEQQ,wBAAwBA,CAAC1M,IAAW,EAAE;IAC5C,IAAI,OAAOA,IAAI,CAAC2M,qBAAqB,KAAK,UAAU,EAAE;MACpD3M,IAAI,CAAC2M,qBAAqB,CAAC,CAAC;IAC9B;IACA,IAAI3M,IAAI,EAAEF,IAAI,EAAED,aAAa,EAAE;MAC7B,OAAO,IAAI,CAACT,cAAc,CAACY,IAAI,CAACF,IAAI,CAACD,aAAa,CAAC;MACnDI,oBAAW,CAACC,IAAI,CAAC,8BAA8B,EAAE;QAC/CC,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAACsM,2BAA2B;QAC3C/M,aAAa,EAAEG,IAAI,CAACF,IAAI,CAACD;MAC3B,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACU4J,wBAAwBA,CAACJ,OAAqB,EAAoB;IACxE,MAAM;MAAC3J;IAAO,CAAC,GAAG2J,OAAO;IACzB,IAAIrJ,IAAI,GAAGqJ,OAAO,CAACrJ,IAAI;IAEvB,IAAIN,OAAO,CAACmN,kBAAkB,IAAI,IAAI,CAACzN,cAAc,CAACM,OAAO,CAACmN,kBAAkB,CAAC,EAAE;MACjF,IAAI,CAACH,wBAAwB,CAAC,IAAI,CAACtN,cAAc,CAACM,OAAO,CAACmN,kBAAkB,CAAC,CAAC;IAChF;IAEA,IAAI7M,IAAI,EAAE;MACRC,oBAAW,CAAC6B,GAAG,CAAC,uDAAuD,EAAE;QACvE3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;QACvCxK,aAAa,EAAEH,OAAO,CAACG;MACzB,CAAC,CAAC;MACF;MACA,IAAI,CAAC0I,cAAc,CAACvI,IAAI,EAAEN,OAAO,CAAC;IACpC,CAAC,MAAM;MACL;MACAO,oBAAW,CAAC6B,GAAG,CAAC,uDAAuD,EAAE;QACvE3B,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+J,uBAAuB;QACvCxK,aAAa,EAAEH,OAAO,CAACG;MACzB,CAAC,CAAC;MAEF,MAAMkD,QAAkB,GAAG;QACzB,GAAGrD,OAAO;QACV4F,cAAc,EAAE5F,OAAO,CAAC+B,WAAW,EAAE4J,YAAY,GAAG,IAAI,CAACnK,OAAO,CAAC,EAAEoK,QAAQ,IAAI,KAAK;QACpFT,sBAAsB,EAAE,IAAAU,oCAAyB,EAAC7L,OAAO,CAAC;QAC1DgE,WAAW,EAAE;MACf,CAAC;MAED1D,IAAI,GAAG2K,oBAAW,CAACC,UAAU,CAC3B,IAAI,CAAC5L,OAAO,EACZ,IAAI,CAACC,iBAAiB,EACtB8D,QAAQ,EACR,IAAI,CAACjC,WAAW,EAChB,IAAI,CAACE,UAAU,EACf,IAAI,CAACE,OACP,CAAC;MACD,IAAI,CAAC9B,cAAc,CAACM,OAAO,CAACG,aAAa,CAAC,GAAGG,IAAI;;MAEjD;MACA;MACA;MACA;MACA;MACAA,IAAI,CAACmC,qBAAqB,CAAC;QACzB3B,IAAI,EAAEqC,uBAAS,CAACQ,OAAO;QACvBN,QAAQ;QACR7B,OAAO,EAAE,IAAI,CAACA;MAChB,CAAqB,CAAC;MAEtB,IAAI,CAAC6J,kBAAkB,CAAC/K,IAAI,CAAC;IAC/B;IAEA,IAAIA,IAAI,EAAE;MACR,IAAI,CAACW,IAAI,CAAC+H,kBAAW,CAACoE,WAAW,EAAE9M,IAAI,CAAC;IAC1C;IAEA,OAAO;MAACA;IAAI,CAAC;EACf;;EAEA;AACF;AACA;AACA;AACA;EACUwM,iBAAiBA,CAACxM,IAAW,EAAE;IACrC;IACA,IACE,IAAI,CAACf,iBAAiB,CAACmM,WAAW,KAAK2B,mBAAW,CAACC,OAAO,IAC1DhN,IAAI,CAACF,IAAI,CAAC2B,WAAW,CAACC,SAAS,KAAKuL,oBAAa,CAACC,SAAS,IAC3DlN,IAAI,YAAYmN,eAAM,EACtB;MACAnN,IAAI,CAACoN,0BAA0B,CAAC,CAAC;MACjC,IAAI,CAACnO,iBAAiB,CAACoO,WAAW,CAAC,CAAC;IACtC;IAEA,MAAMC,SAAS,GAAGtN,IAAI,CAACF,IAAI,CAAC2B,WAAW,CAAC8L,YAAY,KAAK,SAAS;IAClE,MAAMC,KAAK,GAAGxN,IAAI,CAACF,IAAI,CAAC2B,WAAW,CAACoK,KAAK,KAAK,KAAK;IACnD,MAAM4B,WAAW,GAAGzN,IAAI,CAACF,IAAI,CAACgG,mBAAmB,EAAEC,QAAQ,CAAC,IAAI,CAAC7E,OAAO,CAAC,IAAI,KAAK;;IAElF;IACA;IACA;IACA,IACGsM,KAAK,IAAI,EAAEF,SAAS,IAAIG,WAAW,CAAC,IACrC,IAAAxC,+BAAoB,EAACjL,IAAI,CAACF,IAAI,CAAC2B,WAAW,CAAC,IAC1C,CAACgM,WAAW,IAAIH,SAAU,CAAC;IAAA,EAC5B;MACA,IAAI,CAACZ,wBAAwB,CAAC1M,IAAI,CAAC;IACrC;EACF;;EAEA;AACF;AACA;AACA;EACU4I,0BAA0BA,CAACJ,SAAiB,EAAE3I,aAAqB,EAAQ;IACjF,MAAM6N,MAAM,GAAGC,gCAAoB,CAACnF,SAAS,CAAC;IAC9C,IAAI,CAACkF,MAAM,IAAI,CAAC,IAAI,CAAC3O,cAAc,EAAE;IACrC,IAAI,IAAI,CAAC+B,WAAW,EAAE8M,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,KAAK,IAAI,EAAE;IAEvE,IAAI,CAAC/O,cAAc,CAChBgP,SAAS,CACR,IAAI,CAAC7M,OAAO,EACZrB,aAAa,EACbmO,4BAAoB,CAACC,YAAY,EACjCC,4BAAoB,CAACC,eAAe,EACpC;MAACT;IAAM,CACT,CAAC,CACAU,KAAK,CAAExN,KAAK,IAAK;MAChBX,oBAAW,CAACW,KAAK,CAAC,6BAA6B8M,MAAM,QAAQ,EAAE;QAC7DvN,MAAM,EAAEC,4BAAiB;QACzBC,MAAM,EAAEC,mBAAO,CAAC+N,6BAA6B;QAC7CxO,aAAa;QACbe;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACN;EAEO0N,OAAOA,CAACC,MAAc,EAAS;IACpC,OAAO,IAAI,CAACnP,cAAc,CAACmP,MAAM,CAAC;EACpC;EAEOC,WAAWA,CAAA,EAA0B;IAC1C,OAAO;MAAC,GAAG,IAAI,CAACpP;IAAc,CAAC;EACjC;EAEA,OAAcqP,cAAcA,CAC1B1P,cAA8B,EAC9BC,OAA0C,EAC1CC,iBAAoC,EACpCC,gBAAkC,EAClCC,mBAAsC,EACzB;IACb,IAAI,CAACP,WAAW,CAAC8P,WAAW,EAAE;MAC5B9P,WAAW,CAAC8P,WAAW,GAAG,IAAI9P,WAAW,CACvCG,cAAc,EACdC,OAAO,EACPC,iBAAiB,EACjBC,gBAAgB,EAChBC,mBACF,CAAC;IACH;IAEA,OAAOP,WAAW,CAAC8P,WAAW;EAChC;AACF;AAACC,OAAA,CAAAxQ,OAAA,GAAAS,WAAA","ignoreList":[]}
|
|
@@ -60,6 +60,7 @@ export declare const METHODS: {
|
|
|
60
60
|
REMOVE_PREVIEW_CONTACT: string;
|
|
61
61
|
GET_BASE_URL: string;
|
|
62
62
|
SEND_EVENT: string;
|
|
63
|
-
|
|
63
|
+
GET_REAL_TIME_ASSISTANCE: string;
|
|
64
|
+
SEND_REAL_TIME_ASSISTANCE_USER_ACTION: string;
|
|
64
65
|
FETCH_HISTORIC_TRANSCRIPTS: string;
|
|
65
66
|
};
|
|
@@ -151,8 +151,10 @@ export declare const METRIC_EVENT_NAMES: {
|
|
|
151
151
|
readonly CAMPAIGN_PREVIEW_REMOVE_FAILED: "Campaign Preview Remove Failed";
|
|
152
152
|
readonly AI_ASSISTANT_SEND_EVENT_SUCCESS: "AI Assistant Send Event Success";
|
|
153
153
|
readonly AI_ASSISTANT_SEND_EVENT_FAILED: "AI Assistant Send Event Failed";
|
|
154
|
-
readonly
|
|
155
|
-
readonly
|
|
154
|
+
readonly AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS: "AI Assistant Get Real Time Assistance Success";
|
|
155
|
+
readonly AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED: "AI Assistant Get Real Time Assistance Failed";
|
|
156
|
+
readonly AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS: "AI Assistant Send Real Time Assistance User Action Success";
|
|
157
|
+
readonly AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED: "AI Assistant Send Real Time Assistance User Action Failed";
|
|
156
158
|
readonly AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS: "AI Assistant Fetch Historic Transcripts Success";
|
|
157
159
|
readonly AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED: "AI Assistant Fetch Historic Transcripts Failed";
|
|
158
160
|
readonly USER_PREFERENCE_GET_SUCCESS: "User Preference Get Success";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WebexSDK,
|
|
1
|
+
import { WebexSDK, AIAssistantEventType, AIAssistantEventName, HistoricTranscriptsResponse, RealTimeAssistanceParams, RealTimeAssistanceUserActionParams } from '../types';
|
|
2
2
|
import { AIFeatureFlags } from './config/types';
|
|
3
3
|
/**
|
|
4
4
|
* ApiAIAssistant provides AI Assistant APIs for transcript controls.
|
|
@@ -17,17 +17,27 @@ export declare class ApiAIAssistant {
|
|
|
17
17
|
* @param interactionId - interaction/conversation identifier
|
|
18
18
|
* @param eventType - the type of event (e.g. 'CUSTOM_EVENT')
|
|
19
19
|
* @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
|
|
20
|
-
* @param
|
|
20
|
+
* @param eventMetaData - event-specific fields to include in eventDetails.data
|
|
21
|
+
* @param languageCode - language code within eventDetails.data
|
|
22
|
+
* @param trackingId - tracking identifier within eventDetails.data
|
|
21
23
|
*/
|
|
22
|
-
sendEvent(agentId: string, interactionId: string, eventType: AIAssistantEventType, eventName: AIAssistantEventName,
|
|
24
|
+
sendEvent(agentId: string, interactionId: string, eventType: AIAssistantEventType, eventName: AIAssistantEventName, eventMetaData?: Record<string, unknown>, languageCode?: string, trackingId?: string): Promise<Record<string, unknown>>;
|
|
23
25
|
/**
|
|
24
|
-
* Requests
|
|
26
|
+
* Requests real-time assistance for an interaction.
|
|
25
27
|
*
|
|
26
|
-
* @param params -
|
|
28
|
+
* @param params - Real-time assistance request parameters
|
|
27
29
|
* @returns HTTP response body from the AI Assistant event API
|
|
28
30
|
* @public
|
|
29
31
|
*/
|
|
30
|
-
|
|
32
|
+
getRealTimeAssistance(params: RealTimeAssistanceParams): Promise<Record<string, unknown>>;
|
|
33
|
+
/**
|
|
34
|
+
* Sends user action feedback for a real-time assistance adaptive card.
|
|
35
|
+
*
|
|
36
|
+
* @param params - Real-time assistance user action parameters
|
|
37
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
sendRealTimeAssistanceUserAction(params: RealTimeAssistanceUserActionParams): Promise<Record<string, unknown>>;
|
|
31
41
|
/**
|
|
32
42
|
* Fetches historic transcripts for an interaction.
|
|
33
43
|
* This API is allowed only when real-time transcription feature is enabled.
|
package/dist/types/types.d.ts
CHANGED
|
@@ -624,23 +624,62 @@ export type UpdateDeviceTypeResponse = Agent.DeviceTypeUpdateSuccess | Error;
|
|
|
624
624
|
*/
|
|
625
625
|
export type TranscriptAction = 'START' | 'STOP';
|
|
626
626
|
/**
|
|
627
|
-
* Parameters used to request
|
|
627
|
+
* Parameters used to request AI Assistant real-time assistance.
|
|
628
628
|
* @public
|
|
629
629
|
* @example
|
|
630
|
-
* const params:
|
|
630
|
+
* const params: RealTimeAssistanceParams = {
|
|
631
631
|
* interactionId: 'interaction-123',
|
|
632
|
-
* actionTimeStamp: Date.now(),
|
|
633
632
|
* context: 'Need help with credit card payment due date',
|
|
634
633
|
* };
|
|
635
634
|
*/
|
|
636
|
-
export type
|
|
635
|
+
export type RealTimeAssistanceParams = {
|
|
637
636
|
/** Agent identifier */
|
|
638
637
|
agentId: string;
|
|
639
|
-
/** Interaction identifier for which
|
|
638
|
+
/** Interaction identifier for which assistance should be generated */
|
|
640
639
|
interactionId: string;
|
|
641
|
-
/** Optional additional context that should refine the
|
|
640
|
+
/** Optional additional context that should refine the assistance */
|
|
642
641
|
context?: string;
|
|
643
|
-
/** Optional language code for
|
|
642
|
+
/** Optional language code for assistance (for example, 'en'). Defaults to 'en'. */
|
|
643
|
+
languageCode?: string;
|
|
644
|
+
};
|
|
645
|
+
/**
|
|
646
|
+
* Supported user actions on an AI Assistant real-time assistance adaptive card.
|
|
647
|
+
* @public
|
|
648
|
+
*/
|
|
649
|
+
export declare const RealTimeAssistanceUserActionId: {
|
|
650
|
+
/** User liked the real-time assistance response */
|
|
651
|
+
readonly LIKE: "likeButton";
|
|
652
|
+
/** User disliked the real-time assistance response */
|
|
653
|
+
readonly DISLIKE: "dislikeButton";
|
|
654
|
+
/** User copied the real-time assistance response */
|
|
655
|
+
readonly COPY: "copyButton";
|
|
656
|
+
};
|
|
657
|
+
/**
|
|
658
|
+
* Union type of supported real-time assistance user actions.
|
|
659
|
+
* @public
|
|
660
|
+
*/
|
|
661
|
+
export type RealTimeAssistanceUserActionId = Enum<typeof RealTimeAssistanceUserActionId>;
|
|
662
|
+
/**
|
|
663
|
+
* Parameters used to send user action feedback for a real-time assistance adaptive card.
|
|
664
|
+
* @public
|
|
665
|
+
* @example
|
|
666
|
+
* const params: RealTimeAssistanceUserActionParams = {
|
|
667
|
+
* agentId: 'agent-123',
|
|
668
|
+
* interactionId: 'interaction-123',
|
|
669
|
+
* adaptiveCardId: 'adaptive-card-123',
|
|
670
|
+
* actionId: RealTimeAssistanceUserActionId.LIKE,
|
|
671
|
+
* };
|
|
672
|
+
*/
|
|
673
|
+
export type RealTimeAssistanceUserActionParams = {
|
|
674
|
+
/** Agent identifier */
|
|
675
|
+
agentId: string;
|
|
676
|
+
/** Interaction identifier associated with the real-time assistance response */
|
|
677
|
+
interactionId: string;
|
|
678
|
+
/** Adaptive card identifier from the real-time assistance payload */
|
|
679
|
+
adaptiveCardId: string;
|
|
680
|
+
/** User action performed on the adaptive card */
|
|
681
|
+
actionId: RealTimeAssistanceUserActionId;
|
|
682
|
+
/** Optional language code. Defaults to 'en'. */
|
|
644
683
|
languageCode?: string;
|
|
645
684
|
};
|
|
646
685
|
/**
|
|
@@ -688,6 +727,8 @@ export declare const AIAssistantEventName: {
|
|
|
688
727
|
readonly POST_CALL_SUMMARY_RESPONSE: "POST_CALL_SUMMARY_RESPONSE";
|
|
689
728
|
/** Suggested digital response event */
|
|
690
729
|
readonly SUGGESTED_RESPONSES_DIGITAL: "SUGGESTED_RESPONSES_DIGITAL";
|
|
730
|
+
/** User action on a suggested response adaptive card */
|
|
731
|
+
readonly SUGGESTED_RESPONSES_USER_ACTION: "SUGGESTED_RESPONSES_USER_ACTION";
|
|
691
732
|
};
|
|
692
733
|
/**
|
|
693
734
|
* Union type of AI Assistant event names.
|
package/dist/types.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.LoginOption = exports.LOGGING_LEVEL = exports.HTTP_METHODS = exports.AIAssistantEventType = exports.AIAssistantEventName = void 0;
|
|
6
|
+
exports.RealTimeAssistanceUserActionId = exports.LoginOption = exports.LOGGING_LEVEL = exports.HTTP_METHODS = exports.AIAssistantEventType = exports.AIAssistantEventName = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Generic type for converting a const enum object into a union type of its values.
|
|
9
9
|
* @template T The enum object type
|
|
@@ -328,16 +328,45 @@ const LoginOption = exports.LoginOption = {
|
|
|
328
328
|
*/
|
|
329
329
|
|
|
330
330
|
/**
|
|
331
|
-
* Parameters used to request
|
|
331
|
+
* Parameters used to request AI Assistant real-time assistance.
|
|
332
332
|
* @public
|
|
333
333
|
* @example
|
|
334
|
-
* const params:
|
|
334
|
+
* const params: RealTimeAssistanceParams = {
|
|
335
335
|
* interactionId: 'interaction-123',
|
|
336
|
-
* actionTimeStamp: Date.now(),
|
|
337
336
|
* context: 'Need help with credit card payment due date',
|
|
338
337
|
* };
|
|
339
338
|
*/
|
|
340
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Supported user actions on an AI Assistant real-time assistance adaptive card.
|
|
342
|
+
* @public
|
|
343
|
+
*/
|
|
344
|
+
const RealTimeAssistanceUserActionId = exports.RealTimeAssistanceUserActionId = {
|
|
345
|
+
/** User liked the real-time assistance response */
|
|
346
|
+
LIKE: 'likeButton',
|
|
347
|
+
/** User disliked the real-time assistance response */
|
|
348
|
+
DISLIKE: 'dislikeButton',
|
|
349
|
+
/** User copied the real-time assistance response */
|
|
350
|
+
COPY: 'copyButton'
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Union type of supported real-time assistance user actions.
|
|
355
|
+
* @public
|
|
356
|
+
*/
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Parameters used to send user action feedback for a real-time assistance adaptive card.
|
|
360
|
+
* @public
|
|
361
|
+
* @example
|
|
362
|
+
* const params: RealTimeAssistanceUserActionParams = {
|
|
363
|
+
* agentId: 'agent-123',
|
|
364
|
+
* interactionId: 'interaction-123',
|
|
365
|
+
* adaptiveCardId: 'adaptive-card-123',
|
|
366
|
+
* actionId: RealTimeAssistanceUserActionId.LIKE,
|
|
367
|
+
* };
|
|
368
|
+
*/
|
|
369
|
+
|
|
341
370
|
/**
|
|
342
371
|
* Supported AI Assistant event categories.
|
|
343
372
|
* @public
|
|
@@ -383,7 +412,9 @@ const AIAssistantEventName = exports.AIAssistantEventName = {
|
|
|
383
412
|
/** Post-call summary response event */
|
|
384
413
|
POST_CALL_SUMMARY_RESPONSE: 'POST_CALL_SUMMARY_RESPONSE',
|
|
385
414
|
/** Suggested digital response event */
|
|
386
|
-
SUGGESTED_RESPONSES_DIGITAL: 'SUGGESTED_RESPONSES_DIGITAL'
|
|
415
|
+
SUGGESTED_RESPONSES_DIGITAL: 'SUGGESTED_RESPONSES_DIGITAL',
|
|
416
|
+
/** User action on a suggested response adaptive card */
|
|
417
|
+
SUGGESTED_RESPONSES_USER_ACTION: 'SUGGESTED_RESPONSES_USER_ACTION'
|
|
387
418
|
};
|
|
388
419
|
|
|
389
420
|
/**
|