- Joined
- Jun 18, 2026
- Messages
- 2
- Reaction score
- 0
Hi all
We debugged a new 3CX PBX that went live few weeks ago, now with v20.0.9 cloud deployment (~24 ext, SIP trunk, Windows app + web client). Server looks fine; several behaviours feel like product/integration issues, not just config.
Quick context: PBX was created via 3CX’s Azure onboarding (not a manual build). Small cloud VM (2 vCPU / 4 GB), SIP trunk (G722/PCMA), one site on the web client, another on the Windows app behind a FortiGate (LAN <span>10.x</span>, 3CX tunnel on TCP 5090). M365/Teams is set up in 3CX and granted all needed permissions.
Setup
3CX v20.0.9 on a small cloud VM (2 vCPU / 4 GB)
SIP trunk (G722/PCMA), codecs as per 3CX defaults
Web client at one site; Windows app behind a FortiGate at another (10.x LAN, tunnel egress via ISP NAT)
M365 / Teams integration with Entra app + certificate
What we see:
(sometimes brief destination unreachable, then restored)
On the FortiGate: global SIP helper is off, traffic is generally allowed, no deep inspection. We’re now focusing on TCP 5090 stability and session timeouts — tunnel drops seem to line up with the bad calls.
Question: Is this pattern familiar? Any FortiGate or tunnel tuning that helped on v20?
Web client & registration
A few things we’re unsure about:
Log/API picture:
We’re not trying to bash 3CX — we deploy it for customers and want it to work well. But we’re seeing similar complaints elsewhere and would value hearing whether this is “expected on cloud + WebRTC” or if others found fixes we’re missing.
Happy to share more redacted log excerpts if useful.
Thanks in advance for any pointers.
We debugged a new 3CX PBX that went live few weeks ago, now with v20.0.9 cloud deployment (~24 ext, SIP trunk, Windows app + web client). Server looks fine; several behaviours feel like product/integration issues, not just config.
Quick context: PBX was created via 3CX’s Azure onboarding (not a manual build). Small cloud VM (2 vCPU / 4 GB), SIP trunk (G722/PCMA), one site on the web client, another on the Windows app behind a FortiGate (LAN <span>10.x</span>, 3CX tunnel on TCP 5090). M365/Teams is set up in 3CX and granted all needed permissions.
Setup
3CX v20.0.9 on a small cloud VM (2 vCPU / 4 GB)
SIP trunk (G722/PCMA), codecs as per 3CX defaults
Web client at one site; Windows app behind a FortiGate at another (10.x LAN, tunnel egress via ISP NAT)
M365 / Teams integration with Entra app + certificate
Call quality vs Teams
On the same machines and networks, Teams consistently sounds better than 3CX. That part we can partly explain (cloud media path, Opus vs G722, etc.), but some of the behaviour still surprises us.What we see:
- Web → PSTN: constant background hiss, even when both sides are muted (so likely codec/transcode comfort noise, not the mic).
- Internal ext-to-ext (web at one site → Windows app at another): often fine, but sometimes jitter or one-way audio — including between two offices on the same PBX.
- Most calls: Connection(transcoding mode) — WebRTC Opus ↔ trunk G722
- Web client SDP: telephone-event/8000 and 48000
- Windows app: ONLY telephone-event/8000
- When things go well internally: Connection(proxy mode) via tunnel
- Tunnel log (3CXTunnel*.log): TcpProc: read failure → tunnel terminating
- Media log: proxy mode → transcoding mode about a second after answer
- User experience: jitter / caller not heard
(sometimes brief destination unreachable, then restored)
On the FortiGate: global SIP helper is off, traffic is generally allowed, no deep inspection. We’re now focusing on TCP 5090 stability and session timeouts — tunnel drops seem to line up with the bad calls.
Question: Is this pattern familiar? Any FortiGate or tunnel tuning that helped on v20?
Web client & registration
A few things we’re unsure about:
- UI shows registered (user is green for himself), but CDR says not_registered
- Logs: [MyPhone.CallOwner] WebRTC: Client for session … is not found
- Browser/PWA only: extension often looks offline — calls don’t seem to work unless the Windows app is also running
- If both app and browser are active, both ring; answering on one device often drops the call
- Two browser tabs on one PC breaks things (we know that’s discouraged, but it’s fragile)
Teams → 3CX presence (never worked for us)
This one’s confusing. 3CX → Teams presence works. Teams → 3CX has never worked for us — not a recent regression. We’ve tried full re-authorization, new Entra app registration, both presence options enabled in 3CX, API permissions look correct.Log/API picture:
- 0 hits on <span>/m365/</span><span>presence</span>
- 0 Graph subscriptions on <span>communications/</span><span>presences</span>
- Creating a presence subscription with the PBX app cert → 403 ExtensionError
- Microsoft docs suggest presence change notifications need delegated <span>Presence.Read.All</span> — we added it to the app reg; no improvement (3CX still seems to use cert/app-only for subscription setup)
- Microsoft365PresenceService only shows NoInstruction
- Separate side note: a daily ~05:00 sync sometimes hits HTTP 429 (background throttle) — doesn’t look like the root cause
What we’ve mostly ruled out
- VM overloaded at the times we tested
- Trunk not reachable (RTP flows in logs)
- Global SIP ALG on our FortiGate
We’re not trying to bash 3CX — we deploy it for customers and want it to work well. But we’re seeing similar complaints elsewhere and would value hearing whether this is “expected on cloud + WebRTC” or if others found fixes we’re missing.
Happy to share more redacted log excerpts if useful.
Thanks in advance for any pointers.