Inbound call forwarding & caller ID
Audact DIDs can be used as the destination of call forwarding: a subscriber configures their existing phone number (mobile or fixed line) to forward incoming calls to an Audact number, so that calls placed to the subscriber's number are answered by the agent assigned to the Audact DID. This section documents how the caller ID of a forwarded call is presented on the inbound leg, and how the platform normalises and surfaces it — behaviour that matters whenever an integration needs to correlate an inbound call with the number that originated it (for example, to confirm that forwarding is correctly configured).
What arrives on a forwarded call
A forwarded call reaches the Audact DID as an ordinary inbound call. Two numbers are conceptually involved:
- the original caller — the party who dialled the subscriber's number, and
- the forwarding number — the subscriber's number that diverted the call.
Which of these appears, and in what SIP header, is determined by the subscriber's carrier and is not controlled by Audact. Observed behaviour across carriers falls into a few patterns:
- Original caller preserved (common). The inbound
FromandP-Asserted-Identitycarry the original caller's number. The forwarding number is not conveyed. This is the typical behaviour for mobile unconditional-forwarding on the networks tested. - Caller ID replaced. Some carriers replace the caller ID with the
forwarding number, so the inbound
Fromis the subscriber's own number. - Diverting number signalled separately. When present, a
Diversion(RFC 5806) orHistory-Info(RFC 7044) header carries the forwarding number alongside the original caller inFrom. Many carriers — particularly for unsigned calls — omit this entirely.
Two further points hold regardless of pattern:
- Format is national, not E.164. The caller number is very commonly
presented in the destination country's national format rather than E.164
— for example a call from
+441313670450arrives as01313670450(the+44country code replaced by the national0trunk prefix). A naïve exact-string comparison against the E.164 form therefore fails. - Attestation may be downgraded. STIR/SHAKEN verification status
(
verstat) is frequently lost on the forwarded leg, since the forwarding carrier re-originates the call.
How Audact normalises and surfaces it
To make the caller ID usable for correlation, the platform normalises the
inbound caller number to E.164 using the country of the dialled DID as the
region hint (the forwarded leg always terminates on a DID whose country is
known, and that is the country whose national dialling rules the carrier
applied). Continuing the example, a caller of 01313670450 arriving on a GB
DID is normalised to +441313670450.
The normalised caller number is delivered to the tenant through the
pre-connect admission hook: if the tenant has configured an admission_url,
the platform POSTs a JSON body to it before the call is connected, including:
caller_number— the E.164-normalised original caller ID,called_did— the Audact DID that was dialled,agent_id,call_id, andtrunk_id.
The admission endpoint may accept or reject the call, and its response can contribute per-call dynamic variables and metadata. This is the supported integration point for reacting to inbound (including forwarded) calls on the basis of the caller ID.
Correlating a forwarded call by caller ID
To reliably match an inbound forwarded call against a known originating number:
- Normalise both sides to E.164 before comparing — never compare raw
carrier-supplied strings. The platform already normalises
caller_number; compare it against the E.164 form of the number you expect. - Compare against both candidate numbers when applicable — the original
caller and the forwarding number — since carriers differ in which one they
present in
From. - Do not depend on a
Diversion/History-Infoheader being present — treat it as an optional enrichment, not a guaranteed field. - Allow for the possibility that a caller withholds their number (anonymous /
Privacy: id), in which case no caller ID is available to match on.
