Name the exact symptom and call leg
Separate silence before answer, missing local ringback, a repeated reliable 18x, absent PRACK, rejected PRACK, PRACK without a final response, early audio from the wrong fork and audio that begins only after answer. Record direction, endpoint, Call-ID, tags, CSeq, time and whether Asterisk is caller, callee or the middle B2BUA.
Do not infer the broken side from what the human caller heard. Capture both Asterisk channel legs because the carrier-facing and phone-facing provisional and media exchanges can differ.
Reconstruct 180, 183 and 100rel negotiation
For each leg, preserve the initial INVITE's Supported and Require headers and the loaded endpoint's 100rel value. Then list every 1xx response with its To tag, SDP presence, Require header and RSeq. If a reliable response exists, find the matching PRACK and compare RAck to the provisional response's RSeq and INVITE CSeq.
A 420 after a required 100rel request, or a 421 when the peer did not advertise support to a required endpoint, is a capability-policy result. It is not a codec or RTP diagnosis. Use the focused status-code guides before changing media settings.
Assign every SDP offer and answer
Mark which INVITE, reliable 18x, PRACK, PRACK response or final response carried the offer and which carried the answer. Compare the accepted media address, port, payloads and direction. If the To tag changes, determine whether a different early dialog or fork supplied the response.
Do not enable follow_early_media_fork or accept_multiple_sdp_answers until the trace demonstrates the specific different-tag or same-tag update it addresses. A new port in an unaccepted body is not the active RTP destination.
Locate the ringback or early-audio source
Determine whether the caller should generate local ringback from 180 or play received early RTP after 183 and accepted SDP. Capture Asterisk's loaded inband_progress value, any Progress() call, and whether early RTP left and arrived at the expected addresses. A valid PRACK exchange with no packets is a media-path problem; packets that arrive but do not decode are a payload, protection, direction or endpoint problem.
If a bodyless 183 suppresses ringback in a demonstrated SS7-interworking case, evaluate ignore_183_without_sdp only for that endpoint and retest the same route. Do not apply it to every carrier or discard SDP-bearing responses.
Correct one boundary and preserve the final sequence
Correct only the evidenced owner: endpoint 100rel policy, dialplan progress, 183 filtering, fork handling, SDP update handling, MOH behavior, signaling route or RTP path. Reproduce one authorized call with bounded PJSIP logging, then turn extra logging off.
Retain the final INVITE, provisional responses, PRACK transaction, SDP offer/answer, early packets, final response, ACK and post-answer RTP result. A completed PRACK is not a completed call, and audible ringback is not proof of the far-end state. No Asterisk host, endpoint, trunk, policy, PRACK exchange, early RTP path, compatibility, availability, price or call was inspected or tested for this diagnostic.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
- Asterisk 22 res_pjsip endpoint reference ↗
- Asterisk PJSIP troubleshooting guide ↗
- Asterisk early-media and Progress guidance ↗
- Asterisk 22 Progress application ↗
- RFC 3262: reliable provisional responses and PRACK ↗
- RFC 6337: SIP offer/answer usage ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.