mirror of
https://dev.azure.com/globalhealthx/EMR/_git/helix-engage
synced 2026-04-12 02:38:15 +00:00
Root cause: when an agent refreshes the page during or after a call, the React state (UCID, callState, disposition modal) is wiped. The SIP BYE event fires but no component exists to trigger the disposition modal → no POST to /api/ozonetel/dispose → agent stuck in ACW. Layer 1 (beforeunload warning): Shows browser's native "Leave page?" dialog during active calls. Agent can cancel and stay. Layer 2 (sendBeacon auto-dispose): UCID persisted to localStorage when call activates. On page unload, navigator.sendBeacon fires /api/ozonetel/dispose with CALLBACK_REQUESTED. Guaranteed delivery even during page death. Cleared from localStorage when disposition modal submits normally. Layer 3 lives in helix-engage-server (separate commit). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>