From 4a00b7c5adc9f8992791c080adee35167b458889 Mon Sep 17 00:00:00 2001 From: varnit goyal Date: Tue, 5 Nov 2024 12:54:41 +0530 Subject: [PATCH] TP-55555 | ameyo rev eng --- .../adapter-ameyo/lib/assets/js/ajaxClient.ts | 32 +++++++++++++++--- packages/adapter-ameyo/lib/main.ts | 33 +++++++++++++++++-- packages/adapter-ameyo/types/MessagingType.ts | 2 ++ packages/common/dist/Interfaces/IAdapter.d.ts | 2 ++ packages/common/lib/Interfaces/IAdapter.ts | 4 +++ packages/core/lib/useCallSdk.ts | 11 +++++++ 6 files changed, 78 insertions(+), 6 deletions(-) diff --git a/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts b/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts index c556e02..acf0feb 100644 --- a/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts +++ b/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts @@ -2,10 +2,14 @@ //@ts-nocheck +import messagingType from "../../../types/MessagingType.ts"; + export enum MessagingType { ON_AMEYO_CALL_INCOMING= 'onAmeyoCallIncoming', ON_AMEYO_CALL_ACCEPTED = 'onAmeyoCallAccepted', ON_AMEYO_CALL_DISCONNECTED = 'onAmeyoCallDisconnected', + ON_AMEYO_AGENT_ON_BREAK = 'onAmeyoAgentOnBreak', + ON_AMEYO_FORCED_LOGOUT = 'onAmeyoForcedLogout', } @@ -38,7 +42,9 @@ let http = createRequestObject(); enum pushResponseTypes { UserCallModelUpdatedPush = 'UserCallModelUpdatedPush', - CRMCreateNotifyPush = 'CRMCreateNotifyPush' + CRMCreateNotifyPush = 'CRMCreateNotifyPush', + UserCCRuntimeUpdatedPush= 'UserCCRuntimeUpdatedPush', + UserLoggedOffPush= 'UserLoggedOffPush' } export function parseQuerystring(url: string): Record { @@ -71,13 +77,31 @@ function extractUserCallModelUpdatedPush(rawResponse) { ); } if (jsonData?.pushType === pushResponseTypes.UserCallModelUpdatedPush) { - res = jsonData; + sendCallStatusMessage(res); + } + if(jsonData.pushType === pushResponseTypes.UserCCRuntimeUpdatedPush) { + const payload= jsonData?.data; + //handle ameyo erroronous condition + if (payload?.isOnBreak) { + window.postMessage({ + type: MessagingType.ON_AMEYO_AGENT_ON_BREAK, + data: { + breakReason: 'ameyo is errorounous', + } + }); + } + } + if(jsonData?.pushType == pushResponseTypes.UserLoggedOffPush) { + const payload = jsonData?.data; + window.postMessage({ + type: MessagingType.ON_AMEYO_FORCED_LOGOUT, + data: {} + }) } } catch (e) { /* empty */ } } - return res; } const sendCallStatusMessage = res => { @@ -186,7 +210,7 @@ function processResponse() { function processPush(pushResponse) { console.log('push response', pushResponse); - sendCallStatusMessage(extractUserCallModelUpdatedPush(pushResponse)); + extractUserCallModelUpdatedPush(pushResponse); //ajaxRequest.handleIntermediateResponse(pushResponse); } diff --git a/packages/adapter-ameyo/lib/main.ts b/packages/adapter-ameyo/lib/main.ts index 2f2d0fb..4bae66f 100644 --- a/packages/adapter-ameyo/lib/main.ts +++ b/packages/adapter-ameyo/lib/main.ts @@ -23,7 +23,14 @@ import { import registerEventProcessor from "./eventsProcessor.ts"; class AmeyoAdapter implements IAdapter { - private callbacks: { onCallConnected: (data: StateType) => void; onCallDisconnected: (data: StateType) => void; onCallIncoming: (data: StateType) => void, onAdapterReady: ()=> void}; + private callbacks: { + onCallConnected: (data: StateType) => void; + onCallDisconnected: (data: StateType) => void; + onCallIncoming: (data: StateType) => void, + onAdapterReady: ()=> void, + onAgentAvailabilityChange: (isAgentAvailable: boolean) => void + onForcedLogout: ()=>void + }; private eventListenerUrl: string; private baseUrl: string; private sessionId: string; @@ -45,7 +52,9 @@ class AmeyoAdapter implements IAdapter { onCallIncoming: ()=> {}, onCallConnected: ()=> {}, onCallDisconnected: ()=> {}, - onAdapterReady: ()=> {} + onAdapterReady: ()=> {}, + onAgentAvailabilityChange: ()=> {}, + onForcedLogout: ()=> {} }; this.sessionId = ''; this.userName = options.userName; @@ -118,11 +127,13 @@ class AmeyoAdapter implements IAdapter { console.log('campaign selected', payload?.data?.response); autoSelectExtension(this.sessionId, this.userName.toLowerCase()); this.callbacks.onAdapterReady(); + this.callbacks.onAgentAvailabilityChange(true); window.postMessage({ type: 'onAmeyoAvailabiltyChange', data: false }, ); } if(payload?.data?.requestKey === RequestKeys.AMEYO_ON_BREAK) { setAutoStatus(this.sessionId); this.isAgentAvailable = false; + this.callbacks.onAgentAvailabilityChange(false); window.postMessage({ type: 'onAmeyoAvailabiltyChange', data: false }, ); } } @@ -143,6 +154,13 @@ class AmeyoAdapter implements IAdapter { this.callbacks.onCallDisconnected(data?.data); this.currentCallMetadata = {...this.currentCallMetadata, ...data?.data} } + if(data?.type === MessagingType.ON_AMEYO_AGENT_ON_BREAK) { + this.isAgentAvailable = false; + this.callbacks.onAgentAvailabilityChange(false); + } + if(data?.type === MessagingType.ON_AMEYO_FORCED_LOGOUT){ + this.callbacks.onForcedLogout() + } }; registerOnCallIncoming(callback: (callState: StateType)=> void) { console.log('registerOnCallIncoming'); @@ -161,6 +179,17 @@ class AmeyoAdapter implements IAdapter { console.log('registerOnAdapterReady'); this.callbacks.onAdapterReady = callback; } + + registerOnAgentAvailabilityChange(callback: (isAgentAvailable: boolean) => void) { + console.log('registerOnAgentAvailabilityChange'); + this.callbacks.onAgentAvailabilityChange = callback; + } + + registerOnForcedLogoutListener(callback: () => void) { + console.log('registerOnAgentAvailabilityChange'); + this.callbacks.onForcedLogout = callback; + } + acceptCall() { console.log('acceptCall'); acceptSipCall(); diff --git a/packages/adapter-ameyo/types/MessagingType.ts b/packages/adapter-ameyo/types/MessagingType.ts index a75e325..2d46257 100644 --- a/packages/adapter-ameyo/types/MessagingType.ts +++ b/packages/adapter-ameyo/types/MessagingType.ts @@ -4,6 +4,8 @@ ON_AMEYO_CALL_INCOMING= 'onAmeyoCallIncoming', ON_AMEYO_CALL_ACCEPTED = 'onAmeyoCallAccepted', ON_AMEYO_CALL_DISCONNECTED = 'onAmeyoCallDisconnected', + ON_AMEYO_AGENT_ON_BREAK = 'onAmeyoAgentOnBreak', + ON_AMEYO_FORCED_LOGOUT = 'onAmeyoForcedLogout', } diff --git a/packages/common/dist/Interfaces/IAdapter.d.ts b/packages/common/dist/Interfaces/IAdapter.d.ts index cfa25af..0d9f775 100644 --- a/packages/common/dist/Interfaces/IAdapter.d.ts +++ b/packages/common/dist/Interfaces/IAdapter.d.ts @@ -4,6 +4,8 @@ declare class IAdapter { registerOnCallConnected(callback: (callState: GenericObject) => void): void; registerOnCallDisconnected(callback: (callState: GenericObject) => void): void; registerOnAdapterReady(callback: () => void): void; + registerOnAgentAvailabilityChange(callback: (isAgentAvailable: boolean) => void): void; + registerOnForcedLogoutListener(callback: () => void): void; acceptCall(): void; rejectCall(): void; muteCall(): void; diff --git a/packages/common/lib/Interfaces/IAdapter.ts b/packages/common/lib/Interfaces/IAdapter.ts index 1a0219e..7535707 100644 --- a/packages/common/lib/Interfaces/IAdapter.ts +++ b/packages/common/lib/Interfaces/IAdapter.ts @@ -6,6 +6,10 @@ class IAdapter { registerOnCallDisconnected(callback: (callState: GenericObject)=>void) {callback({})} registerOnAdapterReady(callback: ()=> void) {callback()} + + registerOnAgentAvailabilityChange(callback: (isAgentAvailable: boolean) => void) {callback(false)} + + registerOnForcedLogoutListener(callback:()=>void) {callback()} acceptCall() {} rejectCall() {} muteCall() {} diff --git a/packages/core/lib/useCallSdk.ts b/packages/core/lib/useCallSdk.ts index 147b76f..c19cfa7 100644 --- a/packages/core/lib/useCallSdk.ts +++ b/packages/core/lib/useCallSdk.ts @@ -97,6 +97,15 @@ function UseCallSdk({AdapterClass, adapterOptions} : {AdapterClass: new (adapter adapter.registerOnAdapterReady(callback); } + + function registerOnAgentAvailabilityChange(callback : (isAgentAvailable: boolean) => void) { + adapter.registerOnAgentAvailabilityChange(callback); + } + + function registerOnForcedLogoutListener(callback:()=>void) { + adapter.registerOnForcedLogoutListener(callback); + } + function acceptCall() { adapter.acceptCall(); } @@ -135,6 +144,8 @@ function UseCallSdk({AdapterClass, adapterOptions} : {AdapterClass: new (adapter registerOnCallIncoming, registerOnCallConnected, registerOnCallDisconnected, + registerOnAgentAvailabilityChange, + registerOnForcedLogoutListener, acceptCall, rejectCall, muteCall,