From a81e6fb8e452add8a559b36542d9ee8d95a0c49d Mon Sep 17 00:00:00 2001 From: Mayank Singh Date: Mon, 13 Jan 2025 00:58:16 +0530 Subject: [PATCH] NTP-26125 | callStateManager Completed --- .npmrc | 1 + .../adapter-ameyo/lib/callStateManager.ts | 71 ++++++++++++------- packages/adapter-ameyo/lib/types.ts | 27 +++++++ 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/.npmrc b/.npmrc index e69de29..5c919f0 100644 --- a/.npmrc +++ b/.npmrc @@ -0,0 +1 @@ +registry=http://localhost:4873/ diff --git a/packages/adapter-ameyo/lib/callStateManager.ts b/packages/adapter-ameyo/lib/callStateManager.ts index 984093c..0605abe 100644 --- a/packages/adapter-ameyo/lib/callStateManager.ts +++ b/packages/adapter-ameyo/lib/callStateManager.ts @@ -1,29 +1,7 @@ import {MessagingType, parseQuerystring} from "./assets/js/ajaxClient.ts"; -type CallStatus = 'inactive' | 'initialized' | 'ringing' | 'connected' | 'hungup'; +import {CallStatus, PushType, CallState} from "./types.ts"; -enum PushType { - UserCallModelUpdated = 'UserCallModelUpdatedPush', - CustomerCallMemberUpdated = 'CustomerCallMemberUpdatedPush', - CustomerCallMemberCreated = 'CustomerCallMemberCreatedPush', - CRMCreateNotify = 'CRMCreateNotifyPush' -} - - -interface CallState { - isConnected: boolean; - lastCallStatus: CallStatus; - customerCallStatus: string | null; - crtObjectId: string | null; - connectionAttempts: number; - customerInfo: { - phoneNumber?: string; - lan?: string; - crtObjectId?: string; - userCRTObjectId?: string; - callId?: string; - } | null; -} class CallStateManager { private state: CallState = { isConnected: false, @@ -90,6 +68,18 @@ class CallStateManager { case PushType.CRMCreateNotify: this.handleCRMCreate(data); break; + + case PushType.UserCallMemberUpdated: + this.handleUserCallMemberUpdate(data); + break; + + case PushType.UserCCRuntimeUpdated: + this.handleUserCCRuntimeUpdate(data); + break; + + case PushType.UserLoggedOff: + this.handleUserLoggedOff(); + break; } } @@ -167,6 +157,36 @@ class CallStateManager { }; } + private handleUserCallMemberUpdate(data: any) { + const validStatuses = ["ringing", "connected", "hungup"]; + + if (data?.associationType === 'transfer.association' && + validStatuses.includes(data?.status)) { + window.postMessage({ + type: MessagingType.ON_AMEYO_CALL_TRANSFER, + data + }); + } + } + + private handleUserCCRuntimeUpdate(data: any) { + if (data?.isOnBreak) { + window.postMessage({ + type: MessagingType.ON_AMEYO_AGENT_ON_BREAK, + data: { + reason: data + } + }); + } + } + + private handleUserLoggedOff() { + window.postMessage({ + type: MessagingType.ON_AMEYO_FORCED_LOGOUT, + data: {} + }); + } + private handleCallDisconnect() { window.postMessage({ type: MessagingType.ON_AMEYO_CALL_DISCONNECTED, @@ -186,7 +206,6 @@ class CallStateManager { } } -// Usage export const callStateManager = new CallStateManager(); export function extractAndProcessEvents(rawResponse) { @@ -204,8 +223,8 @@ export function extractAndProcessEvents(rawResponse) { // Process events in order, prioritizing CRMCreateNotifyPush const sortedParts = [ - ...parts.filter(part => part?.pushType === 'CRMCreateNotifyPush'), - ...parts.filter(part => part?.pushType !== 'CRMCreateNotifyPush') + ...parts.filter(part => part?.pushType === PushType.CRMCreateNotify), + ...parts.filter(part => part?.pushType !== PushType.CRMCreateNotify) ]; sortedParts.forEach(event => { diff --git a/packages/adapter-ameyo/lib/types.ts b/packages/adapter-ameyo/lib/types.ts index 65fb378..d44d791 100644 --- a/packages/adapter-ameyo/lib/types.ts +++ b/packages/adapter-ameyo/lib/types.ts @@ -76,3 +76,30 @@ export type CallTransferData = { campaignId : string, targetCRTObjectId: string } + +export type CallStatus = 'inactive' | 'initialized' | 'ringing' | 'connected' | 'hungup'; + +export enum PushType { + UserCallModelUpdated = 'UserCallModelUpdatedPush', + CustomerCallMemberUpdated = 'CustomerCallMemberUpdatedPush', + CustomerCallMemberCreated = 'CustomerCallMemberCreatedPush', + CRMCreateNotify = 'CRMCreateNotifyPush', + UserCallMemberUpdated = 'UserCallMemberUpdatedPush', + UserCCRuntimeUpdated = 'UserCCRuntimeUpdatedPush', + UserLoggedOff = 'UserLoggedOffPush' +} + +export interface CallState { + isConnected: boolean; + lastCallStatus: CallStatus; + customerCallStatus: string | null; + crtObjectId: string | null; + connectionAttempts: number; + customerInfo: { + phoneNumber?: string; + lan?: string; + crtObjectId?: string; + userCRTObjectId?: string; + callId?: string; + } | null; +}