curved-ice-79043
04/03/2026, 11:19 PMparticipant disconnect reason: 12
Call not picked up. Disconnect reason: 12
Participant disconnected during pickup wait: 12
CALL_ENDED | ended_by=AGENT | reason=USER_REJECTED (call was rejected)tall-airline-16756
04/03/2026, 11:19 PMtall-airline-16756
04/03/2026, 11:19 PMdisconnect reason: 12 entries and the CALL_ENDED | reason=USER_REJECTED (call was rejected).
• Disconnect reason 12 corresponds to STATE_MISMATCH. This means the SFU detected the media connection state between server and client fell out of sync (an issue on the media path, not signaling).
• Common causes: an unclean client disconnect (crash or abrupt shutdown), a network blackout that prevents ICE/STUN keep-alives, or the client failing to send a proper Leave/cleanup. The SFU usually detects this after about ~20s of missing keep-alives.
• The USER_REJECTED / ended_by=AGENT line means the agent rejected or explicitly ended the call (the agent-side logic terminated the session).
What you can check next:
• On the client: any crashes, abrupt app exits, or logs showing failed ICE/DTLS negotiation around the timestamp.
• Network: packet loss, NAT/firewall issues, or periods where keep-alives stopped.
• Agent/session logic: whether code paths (e.g., explicit call rejection, session.shutdown(), or tools that end calls) ran at that time.
If you want, share:
• timestamps for these events,
• the room/participant IDs,
• client logs around the same time (ICE/DTLS/peerConnection events)—
and I’ll help correlate them and suggest targeted fixes.
Sources: Understanding the STATE_MISMATCH Disconnect Reason | Agent session | LiveKit Documentation | Python Agents: Handling exceptions in your entrypoint | LiveKit | How to do call transfers with Five9 | LiveKit | EndCallTool | LiveKit Documentation, with interactive elements