Howwise RSS
VoIP & Phone Systems10 min read

FreePBX Paging and Intercom Setup: Multicast vs Unicast

Short answer

FreePBX paging and intercom setup means creating a Paging Group under Applications, enabling auto-answer on each phone for the Alert-Info or Call-Info header the PBX sends, and using multicast instead of unicast beyond roughly 20 phones.

Key takeaways
  • Unicast paging opens one call leg per phone (about 87 kbps each for G.711 on Ethernet), so it loads the PBX; multicast sends one RTP stream no matter how many phones listen.
  • Auto-answer is the phone's decision: it must allow intercom and accept the PBX's Alert-Info or Call-Info header, and many phones only honour it from a trusted server IP.
  • *80 plus an extension is FreePBX's built-in two-way intercom call to one phone, while a page group is a one-way (simplex) or two-way (duplex) call to many.
  • Multicast needs IGMP snooping with a querier on the voice VLAN, a 239.x address, and a TTL above 1 plus multicast routing to cross subnets.
  • Always diagnose with sngrep for the INVITE headers and tcpdump for IGMP reports and RTP to the group address.

Multicast or unicast paging: which should you use?

Unicast paging uses the Asterisk Page() application. It creates one call leg per member phone, each with its own SIP signaling and RTP stream, and bridges them to the caller. FreePBX paging groups work this way by default.

Multicast sends a single RTP stream to a group address such as 239.1.1.50:5004. Every phone subscribed to that address plays it. The PBX does not know or care how many phones are listening, and there is no per-phone SIP signaling.

The cost of unicast is easy to estimate. G.711 at 20 ms packetization is about 87 kbps per leg on Ethernet, so 50 phones means roughly 4.3 Mbps leaving the PBX plus 50 channels and 50 INVITEs at once. Multicast stays near 87 kbps total.

FactorUnicast (Page())Multicast RTP
Sweet spotUp to about 15 to 20 phones20 phones to hundreds
PBX loadOne channel and RTP stream per phoneOne stream, negligible
Network needsNothing specialIGMP snooping and querier, multicast allowed on VLAN
CodecAny, per-phone negotiation (transcoding possible)One codec for everyone, usually G.711 or G.722
Busy phonesSkip, force or whisper per phonePhone decides, often ignores page when on a call
Duplex (two-way)SupportedNot supported, one-way only
Wi-Fi handsetsWorksUnreliable, avoid
Cross-subnetWorks anywhere SIP worksNeeds multicast routing and TTL above 1

How do I start a FreePBX paging and intercom setup with a paging group?

Go to Applications > Paging and Intercom. Under Paging Groups, add a group. The Page Group number is what users dial, for example 700. Put a description in, then fill the Device List with the member extensions.

Each setting changes behavior in a specific way:

SettingWhat it does
Device ListExtensions that receive the page. Keep it to a sensible size for unicast.
DuplexOff (simplex) means members hear the caller only. On lets members speak back, which suits a small group but invites chaos in a large one.
Busy Extensions: SkipPhones on a call are not paged. Safe, but those users miss the announcement.
Busy Extensions: ForcePages the busy phone anyway. It only works if the phone supports a second call and auto-answers it, and it may cut the active call or mix audio depending on the model.
Busy Extensions: WhisperPlays the page into the active call as a whisper, so the user hears it while still on the call. Phone support varies.
Default Page GroupNewly created extensions are automatically added to this group, which is useful for an all-staff page and a nuisance if you forget it exists.
  1. Open Applications > Paging and Intercom and add a Paging Group with number 700.
  2. Add the member extensions to the Device List.
  3. Set Duplex to No for announcements and Busy Extensions to Skip while testing.
  4. Submit and Apply Config.
  5. Dial 700 from an internal extension and watch the CLI with asterisk -rvvv.
Warning: A paging group with dozens of members fires all legs at the same instant. This can saturate a small PBX VM and flood the network with simultaneous INVITEs. Split big groups by floor or department, or move to multicast.

How does *80 intercom differ from a page group?

Intercom is a normal call to one extension with auto-answer headers added. Dial *80 followed by the extension, for example *80101. The target phone answers on speaker and the audio is two-way. This is FreePBX's built-in behavior and needs no custom dialplan.

A page group is a bridge to many phones. In simplex mode it is one-way, so it is an announcement rather than a conversation.

Users can control whether their phone accepts intercom. *54 plus the extension enables intercom for that user and *55 plus the extension disables it. The module-wide intercom status is also on the Paging and Intercom page. If *80 rings instead of answering, check this first on the PBX side.

Warning: Do not redefine *80 in extensions_custom.conf. A custom pattern such as _*80X. in from-internal-custom can shadow or conflict with the built-in feature code and break intercom for every user after the next reload. If you need a custom intercom path (for example to add your own headers), give it a different prefix, and remember it is a second path that bypasses the *54/*55 intercom enable/disable settings.

Which auto-answer header does each phone need?

Asterisk cannot force a phone to answer. It adds a header to the INVITE and the phone decides whether to obey. Several conventions exist, and phones differ on which they accept:

Phones also commonly refuse auto-answer unless the INVITE comes from the registered server, so a mismatch between the PBX IP and the phone's trusted server setting breaks it silently.

Header formTypical use
Alert-Info: <sip:localhost>;info=alert-autoanswerWidely accepted: Yealink, Snom, Grandstream, Polycom in many firmware versions
Alert-Info: Info=Alert-AutoanswerOlder Polycom and some Cisco SPA setups
Alert-Info: ;info=alert-autoanswerShort form, accepted by several brands
Call-Info: <sip:localhost>;answer-after=0Grandstream, Yealink, Cisco SPA, Snom
Answer-After: 0Rare, a few vendor-specific stacks

What phone settings must be enabled for auto-answer?

The names move between firmware versions, so treat these as the places to look rather than exact menu paths.

Yealink: Features > Intercom > Allow Intercom set to Enabled, with Intercom Mute and Intercom Tone as you prefer. Provisioning keys are features.intercom.allow, features.intercom.mute and features.intercom.tone. Also consider Accept SIP Trust Server Only, which blocks INVITEs from unknown IPs.

Grandstream: in the account's Call Settings, enable Allow Auto Answer by Call-Info/Alert-Info. Cisco SPA: enable Auto Answer Page on the line. Polycom: enable auto-answer on the line and make sure the Alert-Info string maps to an auto-answer ring class; some models also have a micMute option for auto-answered calls, which is a common reason for one-way audio.

Snom: confirm it accepts the Alert-Info value and Call-Info answer-after you send. If a phone auto-answers but you hear nothing from it, look for a mute-on-intercom option first.

Tip: If a phone rings instead of answering, test the three layers in order: PBX intercom status (*54), the INVITE actually carrying the header (sngrep), then the phone's intercom/auto-answer and trusted-server settings. Do Not Disturb can also block auto-answer on some models.

How do I set up multicast paging for 20+ phones?

Choose an address in the administratively scoped 239.0.0.0/8 range, for example 239.1.1.50, and a port such as 5004. Avoid 224.0.1.75, which is reserved for SIP, and avoid addresses whose last 23 bits map to the same MAC as 224.0.0.x, such as 239.0.0.x and 239.128.0.x, because switches flood those even with snooping on.

Asterisk can send multicast RTP with the MulticastRTP channel. Check it is loaded with the first command below. The codec is whatever the calling channel is using, so make sure the paging extension allows only the codec the phones expect.

The dialplan below also includes an optional custom unicast intercom that you dial as *66 plus the extension (for example *66101). It deliberately uses *66, not *80, so it never collides with FreePBX's built-in *80 intercom. Skip that block if the built-in *80 already works for you. Then add the custom extensions:

  1. Confirm the module with asterisk -rx "module show like multicast".
  2. Add the dialplan below to extensions_custom.conf and reload the dialplan.
  3. On each phone, add the multicast listening address (Yealink: Directory > Multicast IP, Polycom: paging group settings, with the same IP, port and codec).
  4. Dial *700 and capture with tcpdump to confirm payload type 0 (PCMU) or 9 (G.722).
  5. If you added the optional custom intercom, dial *66 plus an extension, such as *66101, and confirm in sngrep that the INVITE carries the Alert-Info and Call-Info headers.
; extensions_custom.conf
[from-internal-custom]
exten => *700,1,NoOp(Multicast all-staff page)
 same => n,Answer()
 same => n,Dial(MulticastRTP/basic/239.1.1.50:5004)
 same => n,Hangup()

; OPTIONAL custom unicast intercom, dialed as *66101 (not the built-in *80)
; "*66" is 3 characters, so ${EXTEN:3} leaves the extension number
exten => _*66X.,1,NoOp(Custom intercom to ${EXTEN:3})
 same => n,Dial(PJSIP/${EXTEN:3},30,b(addhdr^s^1()))
 same => n,Hangup()

[addhdr]
exten => s,1,Set(PJSIP_HEADER(add,Alert-Info)=<sip:localhost>\;info=alert-autoanswer)
 same => n,Set(PJSIP_HEADER(add,Call-Info)=<sip:localhost>\;answer-after=0)
 same => n,Return()
Warning: Restrict who can reach these extensions. Never route an inbound trunk, IVR or time condition to a page group or an auto-answer extension, or outside callers can open speakers in your office. Keep the contexts internal and block both *80 and the custom *66 codes on trunk-facing contexts. The custom *66 path also ignores each user's *54/*55 intercom setting, so a phone that opted out of intercom can still be opened from it.

Why does the page stay silent? Network and capture checklist

Multicast depends on the network behaving. Switches with IGMP snooping forward group traffic only to ports that sent a membership report, and those reports need a querier. If no router or switch on the VLAN is the querier, memberships expire (typically after a few minutes) and paging works at first and then stops.

Enable an IGMP querier on the voice VLAN. To cross subnets, the sender's TTL must be above 1 and the routers must run multicast routing such as PIM. Wi-Fi handsets get multicast at the lowest basic rate with buffering, so keep them on unicast groups.

Work through the checks below in order:

SymptomLikely causeHow to check
Phone rings, does not answerHeader not sent or not trustedsngrep: look for Alert-Info or Call-Info in the INVITE to the phone
Answers, no audio either wayAuto-answer mic muted, NAT or codecrtp set debug on; check phone mute setting and codec in SDP
Multicast works, then stopsNo IGMP queriertcpdump -ni eth0 igmp; look for queries and reports
No audio on some phones onlyVLAN or port issue, wrong group in phoneCapture on the phone's port for UDP to 239.1.1.50:5004
Page cuts offBusy phone or timerCheck Busy Extensions setting and phone's intercom timeout
Garbled or silent codecTranscoding or mismatchCheck RTP payload type against phone's multicast codec
# SIP signaling and headers
sngrep -d any port 5060
asterisk -rx "pjsip set logger on"

# IGMP membership and multicast RTP
tcpdump -ni eth0 'igmp or host 239.1.1.50'
tcpdump -ni eth0 -vv udp port 5004

# RTP and channels
asterisk -rx "rtp set debug on"
asterisk -rx "core show channels"
asterisk -rx "pjsip show endpoints"

Common mistakes to avoid

Putting every extension in one unicast group is the classic one: it spikes CPU, and slow or busy phones make the page start late for some users. Mixed codecs cause transcoding on the PBX, so allow G.711 (or G.722 if every phone supports it) on the paging path.

Another mistake is expecting to page over an active call without Whisper or Force, and assuming every model supports them. Test with one real phone of each model while on a call before you announce the feature to staff.

A third mistake is copying a custom intercom pattern that reuses the *80 prefix. Keep custom codes on a separate prefix such as *66, and document them so the next administrator knows two intercom paths exist.

Common questions

What is the best codec for paging?

G.711 (ulaw or alaw) is the safest because every phone supports it and it avoids transcoding. G.722 sounds clearer and costs about the same bandwidth, but use it only if every listening phone supports it, especially in multicast where one codec serves everyone.

Can I page over an active call?

Only with the Busy Extensions setting Force or Whisper, and only if the phone accepts a second auto-answered call. With Skip, busy phones are not paged. In multicast, the phone's own priority setting decides whether the page interrupts a call.

Do I need a voice VLAN for multicast paging?

It is not mandatory, but it keeps multicast contained and makes IGMP snooping and the querier easy to manage. Without it, multicast may flood the data VLAN or be dropped by the switch.

Why does auto-answer work from *80 but not from a page group?

They are separate dial paths. Check that the page group is actually sending the header to that phone type, and that the phone is not in Do Not Disturb, which can block auto-answer on some models. Compare the two INVITEs side by side in sngrep.

Is it safe to leave auto-answer enabled on all phones?

It is a privacy risk if anyone outside can trigger it. Allow it only from the PBX IP using the phone's trusted-server option, keep trunks away from intercom and paging contexts, and let users disable intercom with *55 plus their extension.

Related topics:freepbxpagingintercommulticastasterisk