VoIP.info Troubleshooting

Asterisk AMI PJSIP inbound registration list shows static contacts or misses a phone

Trace action choice, completion framing, AoR ownership, static versus dynamic contact creation, expiry and node scope before changing registration or NAT settings.

Reviewed 2026-10-19Current branch-23 and branch-22 PJSIPShowRegistrationsInbound and PJSIPShowRegistrationInboundContactStatuses references, current PJSIPShowContacts, InboundRegistrationDetail and ContactStatusDetail references, PJSIP object guidance and the AMI v2 specification were reviewed October 19, 2026. Installed branch, loaded registrar modules, manager action inventory and permissions, configuration owner, AoR and endpoint relationships, static and dynamic contacts, registration expiry, qualification policy, event framing, network path and call behavior remain deployment specific. No PBX, module, manager account, session, AoR, endpoint, static contact, dynamic registration, REGISTER transaction, qualification exchange, packet, media stream or live call was inspected or testedAdvancedDocumentation based · not lab tested

Freeze one disputed inventory

Record timestamp and timezone, responding node and branch, manager identity, ActionID, exact action, every returned event type, completion event, AoR, endpoint, URI redaction, user agent, registration expiry, qualification state, configuration owner, last known REGISTER time and the user-visible symptom.

Classify the disagreement first: static contact is incorrectly labelled a registration; expected dynamic contact is absent; expired contact remains in another view; one of several contacts is missing; list never completes; the right contact maps to the wrong endpoint; or registration is current but calls fail.

Verify action availability, authorization and completion

Inventory the actions exposed by the installed branch and authenticated manager user. PJSIPShowRegistrationInboundContactStatuses is the intended dynamic-contact list, but older deployments may not provide it. Preserve the response and all rows through ContactStatusDetailComplete.

For the broader action, require InboundRegistrationDetailComplete; for all contacts, require ContactListComplete. Check manager class authorization, event filters, connection continuity and parser handling. Do not treat silence or a client timeout as an empty or complete inventory.

Identify static and dynamic contact ownership

Inspect the authoritative AoR object. A contact= URI is static; a remote user agent creates a dynamic contact by REGISTER, subject to AoR limits and policy. The broad PJSIPShowRegistrationsInbound action deliberately includes both, so a static row there is not a defect.

Match a dynamic row using AoR, URI and contact ID plus bounded metadata such as user agent, registration expiry, Via, Call-ID and Path. Protect those fields. Similar endpoint names or IP addresses do not prove identity.

Reconcile expiry, replacement and multiple contacts

Compare current time with RegExpire, and preserve MaxContacts, RemoveExisting, RemoveUnavailable, minimum, default and maximum expiration settings. A replacement policy, a new device registration, explicit de-registration, expiry or another contact under the same AoR can explain a changing list without a parser fault.

Do not infer historical registration order from a current snapshot. Correlate the bounded REGISTER transaction and registrar logs when chronology matters, and distinguish a stale dashboard cache from the live manager response.

Confirm node, realtime source and endpoint relationship

In a cluster or load-balanced design, query the node that received the REGISTER and owns the contact state. Reconcile flat-file, realtime and generated FreePBX ownership with the loaded AoR and endpoint objects. A correct database row is not proof that the intended node loaded it, and a correct AoR name is not proof of the desired endpoint association.

Use endpoint detail only to verify object relationships. Avoid editing generated files or changing NAT, authentication and contact limits together before the first divergence is established.

Correct the earliest boundary and test service separately

Correct only the first demonstrated fault: wrong action, missing deployed capability, incomplete parser, filtered events, wrong node, static-versus-dynamic classification, AoR ownership, expiry or replacement policy, stale cache, or endpoint association. Repeat the exact completed inventory and compare timestamps.

If the dynamic contact is current but calls still fail, continue through Request-URI construction, endpoint selection, dialplan, signaling, SDP and media as separate evidence. No PBX, module, manager account, session, AoR, endpoint, static contact, dynamic registration, REGISTER transaction, qualification exchange, packet, media stream or live call was inspected or tested.

Sources & applicability

Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.

Examples require adaptation to your topology. No live PBX or hardware testing is claimed.