From bd7ab1ae4288fcbe6187357ba5d02bdf5efae1a7 Mon Sep 17 00:00:00 2001 From: Mayank Singh Date: Mon, 23 Dec 2024 03:48:06 +0530 Subject: [PATCH] NTP-15943 | retry for call connected --- .../adapter-ameyo/lib/assets/js/ajaxClient.ts | 74 +++++++++++++------ packages/adapter-ameyo/lib/main.ts | 1 + 2 files changed, 54 insertions(+), 21 deletions(-) diff --git a/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts b/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts index 4816b1e..64e5c98 100644 --- a/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts +++ b/packages/adapter-ameyo/lib/assets/js/ajaxClient.ts @@ -137,29 +137,61 @@ function extractUserCallModelUpdatedPush(rawResponse) { } ) } -const sendCallStatusMessage = res => { - let message = null; - const data = JSON.parse( - localStorage.getItem('revEngCustomerInfo') || '{}' - ); - if (res?.data?.status === 'ringing') { - message = { - type: MessagingType.ON_AMEYO_CALL_INCOMING, - data +const sendCallStatusMessage = (res) => { + try { + const status = res?.data?.status; + + const getCustomerInfo = () => + JSON.parse(localStorage.getItem('revEngCustomerInfo') || '{}'); + + const sendConnectedMessage = (retryCount = 3) => { + /* The callId is received after the call is connected. + * Since callId is essential and cannot be null, + * this retry mechanism ensures we wait until it becomes available. */ + const data = getCustomerInfo(); + if (data?.callId) { + const message = { + type: MessagingType.ON_AMEYO_CALL_ACCEPTED, + data, + }; + window.postMessage(message); + } else if (retryCount > 0) { + setTimeout(() => sendConnectedMessage(retryCount - 1), 100); + } else { + console.warn('Unable to send ON_AMEYO_CALL_ACCEPTED: callId not found.'); + } }; - } else if (res?.data?.status === 'connected') { - message = { - type: MessagingType.ON_AMEYO_CALL_ACCEPTED, - data - }; - } else if (res?.data?.status === 'hungup') { - message = { - type: MessagingType.ON_AMEYO_CALL_DISCONNECTED, - data - }; - localStorage.removeItem('revEngCustomerInfo'); + + switch (status) { + case 'ringing': { + const data = getCustomerInfo(); + const message = { + type: MessagingType.ON_AMEYO_CALL_INCOMING, + data, + }; + window.postMessage(message); + break; + } + case 'connected': { + sendConnectedMessage(); + break; + } + case 'hungup': { + const data = getCustomerInfo(); + const message = { + type: MessagingType.ON_AMEYO_CALL_DISCONNECTED, + data, + }; + window.postMessage(message); + localStorage.removeItem('revEngCustomerInfo'); + break; + } + default: + console.warn(`Unhandled call status: ${status}`); + } + } catch (error) { + console.error('Error in sendCallStatusMessage:', error); } - if (message) window.postMessage(message); }; function createRequestObject() { diff --git a/packages/adapter-ameyo/lib/main.ts b/packages/adapter-ameyo/lib/main.ts index 699e091..ff9928e 100644 --- a/packages/adapter-ameyo/lib/main.ts +++ b/packages/adapter-ameyo/lib/main.ts @@ -310,6 +310,7 @@ class AmeyoAdapter implements IAdapter { rejectCall() { sipHangUp(); + localStorage.removeItem('revEngCustomerInfo'); } disposeCall() {