Prove this call reached this ring group
Capture one affected call's timestamp and timezone, caller and called identities, inbound route or internal origin, final destination and the exact ring-group number and name expected. Confirm in the bounded Asterisk call evidence that the call entered that generated group context. A phone display, user report or matching business-hours label does not establish which inbound route, time condition, IVR selection or ring group actually handled the call.
If no group member rings, first follow the upstream route and schedule. If other members ring, keep the investigation on the missing branch. Preserve the loaded FreePBX and module versions and the group's current strategy, ordered member list, ring time and no-answer destination before applying any change.
Compare the managed member with the generated dial attempt
Read the member exactly as FreePBX stores it. A plain extension and an entry using a trailing # can follow different dialplan paths, including Follow Me or an external destination. Do not add or remove the suffix as a generic repair. After Submit and Apply Config, inspect the generated dialplan and bounded call trace without editing FreePBX-owned files.
For the affected call, identify whether Asterisk created an outbound channel for that member, the actual technology and resource, any Local channel, the selected PJSIP endpoint and contact and the branch result. Asterisk documents that Dial() can attempt several channels and that the first answer ends the others; the absence of audible ringing is different from an absent dial branch, a branch cancelled after a colleague answered or a device that received signaling but did not sound.
Separate contact reachability from group policy
Test the extension directly under the same account and device state, then inspect its loaded PJSIP endpoint, AOR and contacts. Asterisk documents that dialing an endpoint name uses an associated contact, while PJSIP_DIAL_CONTACTS() constructs parallel targets for all associated contacts. Preserve the exact generated FreePBX dial string rather than assuming every contact should ring or rewriting it by hand.
Classify each branch from wire and Asterisk evidence: no channel, CHANUNAVAIL, BUSY, NOANSWER, CANCEL after another answer, a redirect or an answered branch. Registration alone does not prove that the selected contact is reachable, current or the intended device, and an OPTIONS status does not prove that the phone will accept this INVITE.
Check busy, DND, forwarding and timers independently
Sangoma's Ring Groups guide says Skip Busy Agent can omit an occupied phone instead of presenting call waiting. Its incoming-call checklist separately identifies Call Forward Busy, DND, Call Forwarding and Follow Me as reasons a listed phone may not ring. Record the state and owner of each feature. Do not disable them all simultaneously or infer the cause from a generic busy label.
Compare group ring time, the member extension's ring time and the moment another member answers. Sangoma documents that a shorter extension timer can override the group timer. Determine whether the branch was never attempted, stopped early, forwarded or cancelled after another answer. A missed-call entry, answered-elsewhere indication or flashing line key is device behavior and does not by itself identify the PBX branch result.
Keep external members and call confirmation separate
An external member adds outbound-route, trunk, caller-identity, mobile-network and voicemail behavior. Sangoma documents Confirm Calls to prevent an external voicemail system from accepting the ring-group call, and limits that feature to the ringall strategy. A mobile leg that rings but cannot complete confirmation is not the same fault as a local extension that was omitted. Preserve the external dialed number, selected route, trunk response, announcement and DTMF result.
Correct only the demonstrated owner: managed membership, applied configuration, extension or Follow Me state, busy policy, ring timer, PJSIP contact or external confirmation path. Retest both an internal and representative inbound call with every member idle, the affected member busy, DND where policy permits, one member unreachable, another member answering and everyone unanswered to the documented destination. No PBX, group, extension, contact, forwarding state, external number, timer, phone, route, trunk, voicemail or live call was tested for this guide.
Use the answer-race path when a different branch wins
If the member was attempted but another extension or external voicemail answered first, use the ring-group answer-race diagnostic. A cancelled sibling is different from an omitted or unreachable member.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
- Sangoma FreePBX Ring Groups Module user guide ↗
- Sangoma FreePBX incoming-call troubleshooting ↗
- Sangoma FreePBX ring-time troubleshooting ↗
- Asterisk Dial application ↗
- Asterisk dialing PJSIP channels and contacts ↗
- Sangoma: Ring Groups module user guide ↗
- Sangoma: Ring Groups module overview ↗
- FreePBX Ring Groups release/17.0 source ↗
- FreePBX Ring Groups release/17.0 metadata ↗
- Asterisk Dial channel variables ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.