Freeze one call and classify the first wrong observation
Record timestamp and timezone, source, upstream destination, Set CallerID rule and intended name and number, configured next destination, installed module version and signature, generated configuration revision, loaded dialplan revision, channel and SIP Call-ID, selected outbound route and trunk when applicable, provider response and final display. Redact values while preserving a stable mapping.
Classify the first divergence as rule not selected, saved value wrong, configuration not generated, stale loaded context, channel value wrong, downstream rewrite, provider-facing header wrong, provider rejection or remote presentation difference. Do not begin with the final handset display and work backward by changing every caller-ID field.
Prove the module and upstream handoff
Confirm the Set CallerID module is installed, enabled and signed under the selected repository policy. Verify the upstream IVR, time condition, inbound route or other destination actually points to the intended rule, then identify the rule in the generated and loaded app-setcid context.
The repository documents possible source behavior, not the running instance. If the rule is missing or the loaded revision is stale, correct Module Admin or Apply Config state before investigating carrier headers.
Compare saved fields with the channel transition
The reviewed source writes caller name and number and then goes to the configured destination. Compare the saved description, name, number and destination with the generated instructions and a bounded call trace. Capture caller-ID state immediately before the rule, after both assignments and at the first instruction in the downstream destination.
Preserve empty strings, quoting, variable expansion and character encoding exactly. If a value is already wrong immediately after app-setcid, fix that rule or the demonstrated expansion input; do not compensate with a trunk-wide override.
Find the first downstream owner that changes it
If Set CallerID produces the intended channel value, follow the same channel into the downstream application. For an outbound leg, prove the matched route, selected trunk and active FreePBX caller-ID branch, then compare channel state with the first provider-facing INVITE. Extension, emergency, route, trunk, forwarding, privacy and endpoint policy can create different results.
Keep caller ID, connected-line identity and redirecting identity separate. A correct channel caller ID does not show that Diversion, P-Asserted-Identity, privacy or the far-end display is correct, and a later rewrite does not prove the Set CallerID rule failed.
Place provider acceptance after PBX egress
When the egress signaling carries the intended organization-controlled identity, preserve the response code, provider call identifier and timestamp. Confirm the provider-authorized number set and documented header and privacy rules. An accepted call, rejected identity and final destination display are different evidence objects.
Do not test arbitrary identities or add every caller-ID header. If the provider accepts the call but presentation differs remotely, use the carrier-path evidence rather than adding another Set CallerID rule.
Correct one boundary and repeat a control call
Change only the first demonstrated mismatch: upstream destination, rule fields, generated or loaded state, downstream caller-ID policy or provider-authorized configuration. Preserve rollback values and repeat the original call plus one control call that bypasses the rule.
Record channel values at the same boundaries and the final result. If the first divergence does not move, roll back and reopen the earlier hypothesis. No PBX, module, caller-ID value, destination, provider, packet, endpoint or live 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.
- Sangoma FreePBX Set CallerID module ↗
- FreePBX Set CallerID release/17.0 repository ↗
- FreePBX Set CallerID release/17.0 metadata ↗
- FreePBX Set CallerID release/17.0 generated dialplan ↗
- Asterisk CALLERID dialplan function ↗
- Asterisk party-ID information ↗
Examples require adaptation to your topology. No live PBX or hardware testing is claimed.