FreePBX Paging and Intercom Setup: Multicast vs Unicast
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.
- 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.
| Factor | Unicast (Page()) | Multicast RTP |
|---|---|---|
| Sweet spot | Up to about 15 to 20 phones | 20 phones to hundreds |
| PBX load | One channel and RTP stream per phone | One stream, negligible |
| Network needs | Nothing special | IGMP snooping and querier, multicast allowed on VLAN |
| Codec | Any, per-phone negotiation (transcoding possible) | One codec for everyone, usually G.711 or G.722 |
| Busy phones | Skip, force or whisper per phone | Phone decides, often ignores page when on a call |
| Duplex (two-way) | Supported | Not supported, one-way only |
| Wi-Fi handsets | Works | Unreliable, avoid |
| Cross-subnet | Works anywhere SIP works | Needs 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:
| Setting | What it does |
|---|---|
| Device List | Extensions that receive the page. Keep it to a sensible size for unicast. |
| Duplex | Off (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: Skip | Phones on a call are not paged. Safe, but those users miss the announcement. |
| Busy Extensions: Force | Pages 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: Whisper | Plays the page into the active call as a whisper, so the user hears it while still on the call. Phone support varies. |
| Default Page Group | Newly created extensions are automatically added to this group, which is useful for an all-staff page and a nuisance if you forget it exists. |
- Open Applications > Paging and Intercom and add a Paging Group with number 700.
- Add the member extensions to the Device List.
- Set Duplex to No for announcements and Busy Extensions to Skip while testing.
- Submit and Apply Config.
- Dial 700 from an internal extension and watch the CLI with asterisk -rvvv.
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.
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 form | Typical use |
|---|---|
| Alert-Info: <sip:localhost>;info=alert-autoanswer | Widely accepted: Yealink, Snom, Grandstream, Polycom in many firmware versions |
| Alert-Info: Info=Alert-Autoanswer | Older Polycom and some Cisco SPA setups |
| Alert-Info: ;info=alert-autoanswer | Short form, accepted by several brands |
| Call-Info: <sip:localhost>;answer-after=0 | Grandstream, Yealink, Cisco SPA, Snom |
| Answer-After: 0 | Rare, 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.
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:
- Confirm the module with asterisk -rx "module show like multicast".
- Add the dialplan below to extensions_custom.conf and reload the dialplan.
- On each phone, add the multicast listening address (Yealink: Directory > Multicast IP, Polycom: paging group settings, with the same IP, port and codec).
- Dial *700 and capture with tcpdump to confirm payload type 0 (PCMU) or 9 (G.722).
- 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()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:
| Symptom | Likely cause | How to check |
|---|---|---|
| Phone rings, does not answer | Header not sent or not trusted | sngrep: look for Alert-Info or Call-Info in the INVITE to the phone |
| Answers, no audio either way | Auto-answer mic muted, NAT or codec | rtp set debug on; check phone mute setting and codec in SDP |
| Multicast works, then stops | No IGMP querier | tcpdump -ni eth0 igmp; look for queries and reports |
| No audio on some phones only | VLAN or port issue, wrong group in phone | Capture on the phone's port for UDP to 239.1.1.50:5004 |
| Page cuts off | Busy phone or timer | Check Busy Extensions setting and phone's intercom timeout |
| Garbled or silent codec | Transcoding or mismatch | Check 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.