Skip to content

Add browser Call Control dialer sample - #4

Draft
SpaceEggs wants to merge 2 commits into
3cx:masterfrom
SpaceEggs:codex/web-call-control-dialer
Draft

Add browser Call Control dialer sample#4
SpaceEggs wants to merge 2 commits into
3cx:masterfrom
SpaceEggs:codex/web-call-control-dialer

Conversation

@SpaceEggs

@SpaceEggs SpaceEggs commented Aug 6, 2026

Copy link
Copy Markdown

What changed

  • add a standalone TypeScript browser dialer under examples/web-dialer
  • connect to a 3CX programmable DN with PBX URL, Client ID, and Key
  • bridge browser microphone and speaker audio through 3CX 8 kHz PCM streams
  • support outbound dialing, inbound RoutePoint calls, mute, hangup, timer, and local recent-call history
  • add a virtual incoming-call ringing phase with accept/reject controls and ringback for the caller
  • bound browser, WebSocket, and PBX audio queues to prevent latency growth
  • synchronously clear microphone, PBX writer, ringtone, and speaker queues on hangup
  • keep 3CX credentials in the local Node session without browser persistence
  • add root workspace and README entry points

Why

This provides a minimal reference for building a browser calling client with the Call Control API without registering a SIP endpoint.

RoutePoint calls are already connected by the PBX, so the ringing phase is intentionally virtual: media is withheld until the browser user accepts the call.

Validation

  • yarn workspace @3cx-examples/web-dialer build
  • yarn build
  • local HTTP and WebSocket protocol smoke tests
  • real-browser rendering and accessibility snapshot

Notes

No live PBX credentials were available, so the final 3CX inbound/outbound media path still needs validation against a configured RoutePoint. The sample intentionally binds to localhost and documents the additional controls required before remote or production deployment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant