Freeze one caller path and the exact symptom
Record timestamp and timezone, caller, source route or IVR, the intended Announcement description or identifier, selected recording, digits pressed, sounds heard in order, answer or progress state, expected destination, actual destination, and the installed FreePBX, Announcements and Asterisk versions. Preserve the minimum authorized channel and dialplan evidence for that attempt.
Classify the symptom before editing: wrong Announcement, wrong recording, silence, clipping, digit ignored, digit repeats unexpectedly, any digit skips unexpectedly, direct entry returns somewhere unexpected, IVR entry fails to return, or ordinary completion reaches the wrong destination. One call can expose more than one boundary, but each observation needs its own proof.
Prove the selected Announcement and recording reference
Follow the source route, time condition or IVR into the intended app-announcement destination, then identify the saved Announcement object. Its selected System Recording is a reference to a reusable asset; hearing an old or different prompt can result from the wrong source route, the wrong Announcement object, an outdated recording reference, language-dependent file resolution or a different underlying file.
Confirm the recording identifier and the resolved audio without overwriting a shared asset. Sangoma documents that System Recordings can be consumed by IVRs, Announcements, Follow Me, queues and ring groups, so first map other consumers. A correct browser or local file playback does not prove what the caller's channel resolved and heard.
Separate answer state from early-media audibility
Current FreePBX 17 Announcements source distinguishes ordinary answered playback from the Don't Answer Channel path: the ordinary branch answers an un-answered channel and waits before playback, while the no-answer branch uses progress handling. Preserve SIP responses, SDP, RTP arrival and the caller's audible result as separate observations.
Do not enable no-answer playback as a generic repair for silence or clipping. Early-media delivery can depend on the carrier and call path; verify it only when the requirement is explicit, including ringback, billing and abandonment expectations. A 183 response or media packet by itself does not prove that the caller heard the complete prompt.
Distinguish repeat, skip and digit transport
A configured repeat key loops back to the recording. Allow Skip is broader: the documented behavior lets any received key leave playback and continue. Current FreePBX 17 source uses Asterisk BackGround when repeat or skip handling is active, then branches received digits through the Announcement logic; a repeat-enabled path can also wait for a digit after playback.
For one authorized call, preserve the transmitted digit, negotiated DTMF method, Asterisk reception, matching Announcement branch and resulting destination. Use the general DTMF diagnostic when Asterisk did not receive the intended event. Do not change PJSIP or trunk-wide DTMF modes merely because an Announcement did not take a branch.
Reconstruct IVR return and post-destination precedence
Return to IVR depends on call context, not only the checkbox. Current FreePBX source returns to the originating IVR when the caller arrived with the IVR context set; a direct route without that context follows the Announcement's configured post destination. Preserve direct and IVR entry as separate test paths.
Trace full playback, repeat, skip, invalid or absent digit and timeout behavior to the next application. A correct Announcement exit does not prove that voicemail, a queue, another IVR or an external destination subsequently answered. Check for loops before enabling IVR return, especially when the parent menu can route back to the same Announcement.
Correct one owner and replay a bounded matrix
Correct only the demonstrated owner: source route, Announcement selection, System Recording reference or asset, answer policy, repeat key, skip policy, IVR-return option or post destination. Submit and Apply Config through supported FreePBX controls, then distinguish the saved record, generated dialplan, loaded runtime and completed caller path. Do not edit generated Announcement dialplan as the durable fix.
Retest direct and IVR entry, full playback, configured repeat, skip, an invalid or absent digit, the no-answer path if it is deliberately used, the final destination and one unaffected call flow. Confirm audible content, DTMF branch, downstream outcome and hangup cleanup. This workflow is derived from first-party documentation and source; it has not been reproduced on a customer or laboratory PBX.
Escalate shared-content evidence to the recording object
If the selected Announcement is correct but the same wrong or silent media appears in other consumers, continue with the System Recording diagnostic. It traces the reusable object, ordered items, language, replacement history and Asterisk playback without changing Announcement routing.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
- Sangoma FreePBX Announcements user guide ↗
- Sangoma FreePBX Announcements module overview ↗
- Sangoma FreePBX System Recordings ↗
- FreePBX Announcements release/17.0 metadata ↗
- FreePBX Announcements release/17.0 dialplan source ↗
- Asterisk 23 BackGround application ↗
- Sangoma System Recordings Module User Guide ↗
- Sangoma System Recordings GraphQL APIs ↗
- FreePBX System Recordings source ↗
- FreePBX IVR release/17.0 metadata ↗
- FreePBX Sound Languages release/17.0 metadata ↗
- Asterisk Playback application ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.