Skip to content

Real-time events vs media

People often assume “live calls in the browser” means the browser is carrying the voice. In CXGear today, those are two different layers:

  1. Signaling — “a call is ringing,” “you are on a call,” “presence changed”
  2. Media — the actual voice audio

Understanding the split explains why the call floater can appear without browser microphone permission, and why admins do not see constant dialler traffic.

LayerJobTechnology today
SignalingTell the UI what is happeningServer-Sent Events (SSE) event stream
MediaCarry voiceDesk phone / SIP on your PBX; browser WebRTC softphone later
PBX / carrier ──media (audio)──► Desk phone or SIP client
└──events──► CXGear API ──SSE──► Agent browser (floater, presence)

CXGear is the control plane. Your telephony stack is the media plane.

Screenshot needed
Agent desk showing presence and extension, with a note that audio is on the desk phone.
Where: Dialler → Agent desk
Save as: src/assets/screenshots/42-realtime-vs-media.png

When an agent is configured (role + extension, not offline), the browser opens a long-lived event stream to CXGear. That stream pushes updates such as:

  • Incoming ring offer
  • Active call state
  • Presence-related snapshot fields

It is not polling every second with REST for every admin. Only agents who need live call UI keep the stream open. If you are an admin without agent setup, CXGear closes the stream and you will not see a flood of dialler API calls.

That design keeps the product quiet for operators who only configure projects and billing.

Voice still needs a path:

SetupWhere you hear the customer
Desk phone / SIP todayPhysical phone or softphone registered to your PBX extension
WebRTC laterMicrophone and speaker in the browser (softphone mode)

The floater even reminds agents: audio connects on the desk phone when they answer. Clicking Answer in CXGear is a control action; the PBX connects the media legs.

  • You do not need to grant browser mic access for desk-phone mode.
  • Keep your desk phone registered to the same extension you saved in CXGear.
  • If the floater works but you hear nothing, the problem is almost always media (phone/PBX), not the event stream.
  • Firewall and network rules for SIP/RTP are separate from HTTPS to CXGear.
  • Event stream needs a stable HTTPS connection to the API.
  • Debugging “no ring in UI” vs “no audio on phone” are different tickets.

CXGear is a communication OS: outreach, dialler, and (roadmap) conversations. The dialler UI is live and real-time for coordination. Full in-browser softphone media is a later step on the same foundation.

  • Agent goes Available → event stream opens (no noisy polling for non-agents).
  • Inbound offer appears on the floater quickly.
  • Answer connects audio on the registered desk phone.
  • Hangup / end events clear the bar without a full page refresh.
  • Admin accounts without agent setup stay free of dialler stream traffic.
SymptomLayerWhat to try
No floater, phone ringsSignalingExtension, presence, agent role, inbound route
Floater works, silenceMediaDesk phone registration, extension match, PBX logs
Stream drops on sleep / VPNSignalingWake laptop, reconnect network, refresh and go Available
Constant dialler requests as adminUnexpectedConfirm you are not also an agent with extension set
Expecting browser mic todayProduct stageUse desk phone; WebRTC softphone is planned, not required now
You want…Look at…
Who is offered the callPresence, roles, routing
Whether the UI updates liveSSE agent stream
Whether anyone can hear anyoneTrunks, extensions, PBX media
Whether a list can dial outOutbound routes + trunks