Identify who generated the 488
A SIP 488 response says the proposed session is not acceptable at the responding user agent. It does not identify one universal bad codec. Capture one authorized failed call and locate the final response on the correct dialog leg. Record its Call-ID, timestamp, source address and any Warning or Reason detail.
Asterisk can reject an incoming offer before it creates the outbound channel, or a carrier or endpoint can reject Asterisk’s outgoing offer. In a two-leg PBX call, those are different investigations. Do not edit both endpoint policies before establishing which side sent the response.
Read the offered media completely
Inspect the failing leg’s SDP media lines, transport profile, payload mappings, clock rates, format parameters, media direction and security attributes. Compare them with the loaded PJSIP endpoint rather than a saved template. A codec name in both places may still have incompatible parameters or sit under a different RTP or security profile.
If no audio format survives the endpoint policy, Asterisk’s resolved stream topology can be empty and the call can end with 488. A rejected video or additional stream needs its own review; do not assume an audio overlap accepts every offered media section.
Follow negotiation across both channels
Asterisk documents separate preferences for incoming offers, outgoing offers, incoming answers and outgoing answers. The operations can intersect, merge or retain only selected formats, and offer processing can allow or prevent transcoding. Read the loaded values for the two endpoints and compare the pending offer with each configured list.
The incoming and outgoing legs need not advertise the same ordered codecs. If a custom preference produces an empty resolved topology, return to the intended policy and a documented common format instead of appending every installed codec.
Confirm that a translation path exists
When the two audio legs do not share a format, a call can proceed only if the negotiation policy permits transcoding and Asterisk has an available translation path. Use core show translation to inspect registered audio paths on the running system. An installed format or pass-through capability is not automatically an encoder, decoder or licensed translator.
Treat video separately: Asterisk documents video formats as pass-through rather than generally transcoded. If a provider requires a specific codec, confirm that exact module, entitlement and resource plan instead of relying on a broad capability list.
Make one bounded correction and retest
Correct the demonstrated endpoint allow list, codec-preference rule, media-security requirement or missing supported translation path through the configuration owner. On FreePBX, use supported module fields and Apply Config rather than editing generated PJSIP files. Keep the earlier configuration and a rollback window.
Repeat the same call, then test the opposite direction and a transferred call if the original workflow includes one. Confirm the negotiated codec, two-way media and hangup. Do not disable SRTP, enable obsolete codecs or accept an unbounded offer merely to remove the 488 response.
Map the exact negotiation control point
The codec-negotiation guide distinguishes the configured, pending and resolved lists at all four PJSIP control points. Use the one that actually produced the rejected offer or empty topology.
Check whether a channel-scoped media override produced the rejected offer
Use the PJSIP_MEDIA_OFFER diagnostic to prove handler ownership, requested codec list and outbound SDP before attributing a 488 to endpoint policy.
Sources & applicability
Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.
- IETF RFC 3261: 488 Not Acceptable Here ↗
- Asterisk: PJSIP advanced codec negotiation ↗
- Asterisk 22: res_pjsip endpoint configuration ↗
- Asterisk: codec modules and translation paths ↗
- Asterisk: audio and video capabilities ↗
- RFC 3264: SDP offer/answer model ↗
- Asterisk PJSIP_MEDIA_OFFER function ↗
- Asterisk PJSIP_SEND_SESSION_REFRESH function ↗
- Asterisk pre-dial handlers ↗
- Asterisk Dial application ↗
- Asterisk res_pjsip endpoint reference ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.