Caller ID
The Caller ID is what users see on their phones when they emit or receive a call, e.g.
Rick Sanchez 963-555-9296
.
The Caller ID is composed of two parts: the Caller ID name and the Caller ID number.
In Wazo, the format is: "Rick Sanchez" <9635559296>
.
Caller ID for internal calls
Users calling each other will see the Caller ID configured in the caller_id
field of each user.
Caller ID for outgoing calls (through a trunk)
There are multiple settings coming into play:
- Dynamic caller ID selection
- The calling user's
outgoing_caller_id
- The outgoing call's
caller_id
(one for eachextension
) - The trunk's operator rules
The current logic for outgoing calls is:
- If the call uses dynamic caller ID selection use the received Caller ID
- If the call is not emitted by a user: use the outgoing call's Caller ID
- If the call is emitted by a user:
- If the
outgoing_caller_id
is Default, use the outgoing call's Caller ID - If the
outgoing_caller_id
is Anonymous, remove the Caller ID - If the
outgoing_caller_id
is set, use it
- If the
Once the call is sent into the trunk, the operator may still override the Caller ID before routing the call to the destination. Each operator has its own rules about Caller ID: some will always rewrite the Caller ID that is attached to the trunk, others will leave the Caller ID untouched, some operators will only rewrite the Caller ID if you use an unauthorized Caller ID, etc.
Anonymous Caller ID
If the user needs to do anonymous calls there are a few things to consider.
The effects of making anonymous calls are as follows:
- The
From
header is set to“Anonymous” <sip:anonymous@anonymous.invalid>
- The
Privacy
header is added with the valueid
- The
P-Asserted-Identity
header is added with the valuetel:<Caller ID number>
This means that Wazo needs to be able to choose a number to set in the P-Asserted-Identity
header
for the feature to work.
The prefered way to add a number to the P-Asserted-Identity
header is to configure the caller ID
field in your outgoing call extension list. If the outgoing call uses multiple trunks it might not
be possible to select a caller ID for the extensions.
If this is not possible the callerid
field of the endpoint
section of the trunk can also be
configured.
Finally, the PJSIP endpoint
options send_pai
and trust_id_outbound
can be set to yes
. This
will send internal information to the provider for all calls made using that trunk instead of a
public phone number.
For more information conserning anonymous caller ID see the following links
- https://www.asterisk.org/asterisk-call-party-privacy-and-header-presentation/
- https://www.ietf.org/rfc/rfc3323.txt
- https://www.ietf.org/rfc/rfc3325.txt
Dynamic client-side Caller ID selection
Wazo allows the client SIP user agent to specify a caller ID when a call is initiated. This is done
using the X-Wazo-Selected-Caller-ID
SIP header on the INVITE
of the call. This method of
selecting the caller ID has precedence over any other caller id selection method.
The X-Wazo-Selected-Caller-ID
header must follow the following formats, where +15555551234
and
John Doe
can be replaced with analogous caller id number and caller id name values:
anonymous
(a special value for anonymous calls)+15555551234
(a caller id number with no caller id name)"John Doe" <+15555551234>
(a caller id with both a name and number)
The client can use the REST API resource
/api/confd/1.1/users/<uuid>/callerids/outgoing
to list the caller IDs that are available to use.
This API relies on caller id information registered in other resources of the Wazo system.
Currently, the values provided through this API are based on those resources:
incalls
directly routed to the user(using aUser
destination type), yielding caller ids of typeassociated
phone numbers
with theshared
ormain
flag, yielding caller ids of typeshared
andmain
respectively
For example:
{
"total": 4,
"items": [
{
"number": "+18001234567",
"type": "main"
},
{
"number": "8191110000",
"type": "associated"
},
{
"type": "anonymous"
}
]
}
Note: Most operators will not allow the user to send a caller ID they do not recongnize as valid. The number must either be a DID that has been bought from the same trunk provider the call is going through or another number that has been verified by that provider.
Refer to outcalls documentation for how to control the routing of outgoing calls.
Caller ID for incoming calls (from a trunk)
There are multiple settings coming into play, in order of priority:
- SIP trusting remote-party Caller ID
- The
caller_id
of endpoint of trunk - Caller ID number normalization
- The Incoming Call's
caller_id_mode
- Reverse lookup
SIP Caller ID
To accept the Caller ID sent via all SIP trunks, modify the global
SIP template for your tenant
-
PUT /endpoints/sip/templates/<global_template_uuid>
{ ... "endpoint_section_options": [ ["trust_id_inbound", "yes"], ], ... }
This option may also be enabled on specific SIP trunks, instead of globally.
Trunk Caller ID
The endpoint trunk's caller_id
option overwrites the incoming Caller ID. Usually, this options is
left blank to leave the incoming Caller ID untouched.
Caller ID number normalization
See Incoming caller number display for details.
Incoming Call Caller ID
The Incoming Call's caller_id_mode
can prepend, append or overwrite the incoming Caller ID.
Reverse Lookup
Reverse lookup is the operation of finding the Caller ID name from the Caller ID number. Wazo can lookup this information in multiple sources.
This operation is only triggered when the incoming Caller ID has no Caller ID name or when the Caller ID name equals the Caller ID number.