Skip to content

Audio Calling

ContentLock includes a built-in peer-to-peer audio calling feature so backoffice editors can talk to each other without leaving Umbraco. Calls use WebRTC — a browser-native technology — meaning no external meeting software is required. Most connections work with no server configuration at all.


  1. Click the user count in the header to open the “Who’s online?” modal.
  2. Find the editor you want to call.
  3. Click the Call button next to their name.

The call button is hidden if:

  • The target editor is already in another call (shows “On a call” instead).
  • WebRTC calling is disabled in configuration.

  1. A Calling… state appears in the modal with the recipient’s name.
  2. A ringback tone plays while waiting for the recipient to answer.
  3. If the recipient answers, the call connects. If they decline or don’t answer within the ring timeout (default 20 seconds), the call ends with an appropriate notification.
  1. An Incoming call notification appears in the modal, showing the caller’s name.
  2. A ringtone plays to alert the recipient.
  3. The recipient can click Accept or Decline.
    • Accept — connects the call.
    • Decline — the caller is notified immediately.
  4. If the recipient doesn’t answer within the ring timeout, the call is treated as a missed call.

Once connected:

  • Both parties can hear each other via their microphone and speakers.
  • Mute / Unmute — toggle your microphone.
  • Device Settings — select which microphone and speaker to use (browser media device picker).
  • Hang Up — end the call for both parties.

EventShown to
Call declinedCaller — “[Name] declined the call”
Already on a callCaller — “[Name] is currently on another call”
No answer (timeout)Caller — “Call failed to connect”; Recipient — “Missed call from [Name]“
Call ended by other partyRemaining party — “Call ended”

WebRTC uses STUN servers (included by default) to establish direct peer-to-peer connections. This works in approximately 80% of cases across most office and home networks.

A TURN relay server is needed in the remaining ~20% of cases, typically when editors are behind:

  • Strict firewalls that block direct peer connections
  • Symmetric NATs (common on corporate and managed networks)
  • Aggressive security policies that prevent direct IP communication

ContentLock supports three TURN server providers:

ProviderDescription
None (default)STUN only — works for ~80% of connections, no account required
CloudflareCloudflare Calls TURN — 1 TB free/month (payment method required). Recommended.
TwilioTwilio Network Traversal Service — pay-as-you-go
MeteredMetered TURN — free tier (20 GB/month)

See Audio Calling Configuration for setup instructions.



ContentLock plays audio cues during calls so editors are alerted even if they are focused on another tab:

Ringback tone — plays on the caller’s device, looping while waiting for the recipient to answer. It stops automatically when the call connects or ends.

Ring tone — plays on the recipient’s device when an incoming call arrives, prompting them to accept or decline.

Both sounds use the same bundled ringtone by default:

Unlike the Online Users sound notifications, there is no separate enable/disable toggle for call sounds — they play whenever a call event occurs. To silence them, point the paths to a silent audio file via WebRTC.Sounds.RingSound and WebRTC.Sounds.RingbackSound. See WebRTC Configuration for details.


Audio Calling is enabled by default and requires no configuration. To disable it, set WebRTC.Enable to false in appsettings.json:

{
"ContentLock": {
"WebRTC": {
"Enable": false
}
}
}

This change is applied without restarting the application — it is pushed to all connected clients via SignalR immediately. When disabled, the call button is hidden in the Online Users modal and no calls can be initiated.