Current approach:
We were relying on rc-active-call-notify and storing:
case 'rc-active-call-notify':
ringCentralPhoneWidget.latestActiveCallTelephonyStatus =
data.call && data.call.telephonyStatus
? data.call.telephonyStatus
: "";
break;Then during rc-call-end-notify, we determine whether the call should be saved as missed/incoming.
Problem observed:
In several debugging scenarios:
- Incoming call arrives
-
rc-active-call-notifyfires with:telephonyStatus = "Ringing" - User answers the call on mobile or RC desktop
-
Instead of receiving another
rc-active-call-notifywith a connected state, we directly receive:rc-call-end-notify - At this point:
latestActiveCallTelephonyStatusis still"Ringing"or sometimesnull- UI answer button may still be visible
- CRM incorrectly logs the call as missed
We also noticed behavior changes while debugging:
- With breakpoints/debugger enabled, sometimes the correct event arrives later
- Without debugger, the issue reproduces more frequently
This strongly looks like:
- race condition
- stale telephony state
- delayed cross-device synchronization
- or missing active-call events when calls are answered externally
Current concern:
Using UI state such as:
$('.btn-answer').is(':visible')does not appear reliable for deciding whether a call was missed.
Questions:
- Is
rc-active-call-notifyguaranteed to emit a connected/answered status when a call is answered on another device? - Is there a recommended production-safe way to determine:
- missed call
- answered call
- answered elsewhere
- Should we instead rely on:
- sessionId tracking
- call result/disposition
- party status
- disconnect reason
- Are there known timing/synchronization delays between:
- mobile app
- RC desktop app
- embeddable widget
We are considering implementing per-session call state tracking with delayed end-event processing, but wanted to check whether RingCentral already provides a recommended approach for this scenario.
Any guidance would be greatly appreciated.