The Communications Diversion (CDIV) service enables a ‘diverting user’ to divert communications addressed to the ‘diverting user’ to another destination .
The service description of CDIV’s services CFU, CFB, CFNR, and CD is based on the PSTN/ISDN supplementary services; whereas CFNL is a CDIV service based on requirements for IP-based networks; and CFNRc is based on requirements for mobile networks.
The services are:
-
Communication Forwarding Unconditional (CFU)
-
Communication Forwarding on Busy user (CFB)
-
Communication Forwarding on no Reply (CFNR)
-
Communication Forwarding on Subscriber Not Reachable (CFNRc)
-
Communication Deflection (CD)
-
Communication Forwarding on Not Logged-in (CFNL).
- Feature Cheat Sheet
- Prerequisite Features
- Source Code
- Specification References
- Scope
- Network Operator Data
- Session Input Variables
- Session Output Variables
- Statistics
- Behaviour
- Example CDIV Rules
Feature Cheat Sheet
B2BUA Instance | SAS Support | Originating / Terminating | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO Feature or SBB Feature | Other notes |
---|---|---|---|---|---|---|---|---|
MMTel |
Yes |
Terminating |
|
Yes |
Yes — CDIV rules are stored in the HSS |
Stateless w/FSM in Session State |
POJO but with much stateful behaviour implemented by storing an FSM instance into Session state |
Implications on Charging for Forwarded calls |
Prerequisite Features
-
DetermineCallType
-
MMTelTIR (only when MMTelTIR is in use)
Source Code
This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-communication-diversion
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-cdiv-module opencloud#mmtel-communication-diversion#volte/3.0.0;3.0.0.0
This command will prompt you for information needed to create the new modules, once completed the original source for the feature can be found in the new modules.
The module-pack includes the following modules:
Module Name | Description |
---|---|
mmtel-communication-diversion |
Group module for the feature that includes all of the modules listed below. |
mmtel-cdiv-profile |
Contains the profile specification for the feature configuration profile table. |
mmtel-cdiv |
Contains the feature itself. |
Specification References
-
3GPP TS 24.604 Rel 12: http://www.3gpp.org/ftp/Specs/html-info/24604.htm
-
GSMA IR.92 (a subset of 24.604) This feature targets the IR.92 subset.
-
RFC 7044 (“The History-Info header RFC”): http://tools.ietf.org/html/rfc7044
-
RFC 4458 (“SIP Voicemail URI” — target and cause in request URI) RFC: http://tools.ietf.org/html/rfc4458
GSMA IR.92 Reference Information
This is taken from IR.92 v9.0:
2.3.8 Communication Diversion
The UE and IMS core network must support the SIP procedures in 3GPP TS 24.604 for Communication Diversion (CDIV). For CDIV service activation, deactivation, and interrogation (XCAP operations), the UE and IMS core network must support the XML rules for Call Forwarding Unconditional and the conditions, actions and elements listed in Table 2.2. The UE and IMS core network shall support the XML rules as described in 3GPP TS 24.604 section 4.9.1. The UE must support the History-Info header for identification of diverting parties at the terminating side and of diverted-to parties at the originating side. At the terminating side, a History-Info entry shall be used for the identification of the diverting party only if another History-Info entry exists that has assigned the next index in sequence AND includes a cause value. At the originating side only History-Info entries including a cause value shall be used for presentation of the diverted-to party. Note: Support of subscription options and other conditions and actions are out of scope of the document. |
It then shows the following table (reformatted)
Type | Parameter |
---|---|
Rule Condition |
Busy |
Rule Condition |
media (supported media types: audio, audio AND video) |
Rule Condition |
no-answer |
Rule Condition |
not-registered |
Rule Condition |
not-reachable(Note) |
Rule Condition |
rule-deactivated |
Rule Action |
target |
Element |
NoReplyTimer |
Note: The GSM version of Communication Forwarding on Not Reachable (CFNRc) implies diversion when the user is not registered in the CS core or cannot be reached. To mimic this behaviour, it is recommended that an UE activates both the CFNRc (CDIV using condition not-reachable) and the Communication Forwarding on Not Logged-in (CFNL) (CDIV using condition not-registered) to the same target. |
Scope
In Scope
The following are in scope:
-
Communication Forwarding Unconditional (CFU)
-
Communication Forwarding on Busy user (CFB)
-
Support for User Determined User Busy (UDUB)
-
Communication Forwarding on No Reply (CFNR)
-
Communication Forwarding on Subscriber Not Reachable (CFNRc)
-
Communication Deflection (CD)
-
Communication Forwarding on Not Logged-in (CFNL)
-
Checking of the diversion limits
-
Communication Diversion Notification (CDIVN) — 181 responses
Out of Scope
The following are out of scope:
-
There is no support for “Ringing continues” in the no reply timeout case (option for CFNR).
-
There is no support for Network Determined User Busy (NDUB).
-
Deliver to last diverted user is not implemented as an approach when Max Diversions has been exceeded. This is because we consider it a bad practice.
Network Operator Data
Network (or Operator) data may come from two sources:
-
Provisioned data in the VoLTE platform stored in a profile table named
MMTelCDIVConfigProfileTable
. -
Received from the HSS in the
<operator-communication-diversion>
section of the CDIV network data fetched from the HSS.
Properties received from the HSS in the <operator-communication-diversion>
section of an MMTel-Services XML document take precedence over data in the MMTelCDIVConfigProfileTable
.
Platform Network Operator Data
Network configuration is stored in a JSLEE profile table named MMTelCDIVConfigProfileTable
.
Individual configurations are entries in this table. The data is scoped on Sentinel Selection Key.
Parameter | Type | Default Value | Description |
---|---|---|---|
|
int |
|
Maximum number of diversion hops that may occur, see the Diversion Limit section. |
|
Enum ( |
|
Determines the action to be taken when the |
|
String, must be a valid SIP or Tel URI |
|
The fixed destination to deliver to when |
|
String, comma separated list of SIP and/or TEL URIs |
|
A list of URIs to which diversions are permitted even when |
|
String |
|
A default URI for use when re-targeting sip requests in the event that there are re-targeting rules and no target URI. |
|
Boolean |
|
A boolean flag indicating whether to apply the procedure for default re-targeting. |
|
boolean |
|
Determines if an announcement will be played when diversion occurs. |
|
int |
|
The announcement ID of the announcement that should be played when diversion occurs. |
|
int |
|
The announcement ID of the announcement that should be played when diversion to a known voice mail server occurs. If the call should not be allowed to reach the voice mail server if the announcement fails, the announcement must be configured with |
|
String[] |
|
The list of known voice mail server URIs. When a call is diverted to one of these URIs, the voicemail announcement will be played if |
|
int |
|
The maximum time (in seconds) to wait for a reply before triggering CFNR. |
|
boolean |
|
Determines whether to add an |
|
boolean |
|
Determines whether CDIV’s behaviour should be suppressed when a call is on a CS network, see the CDIV Suppression section. |
|
int[] |
|
Can be used to trigger the CDIV not-reachable condition (CFNRc) with SIP response status codes not included in the CFNRc specification. This list may not include status codes that have other purposes in CDIV (i.e. 1xx, 2xx, 404, 408, 486, 487). |
|
boolean |
|
A flag that when set to true, will allow the CDIV not-reachable condition to trigger when the call is in the alerting state (usually this condition only triggers in the pre-alerting state). |
|
boolean |
|
Determines whether to add |
|
String[] |
|
A list of URIs that are not provisionable as a retarget URI, i.e. they are not allowed to be used as the target of a diversion. |
|
boolean |
|
Determine whether the subscriber provisioned diversion rules override the operator provisioned rules (these are the rules within the <communication-diversion> and <operator-communication-diversion> tags respectively). |
|
boolean |
|
Determine whether the feature should divert to voicemail if call is unsuccessful |
|
int |
|
The maximum time (in seconds) to wait before forwarding to voicemail |
|
Enum ( |
|
Determines whether a call can be diverted to a subscriber’s voicemail server when credit could not be allocated. |
HSS Network Operator Data
There are three elements of <operator-communication-diversion>
received from the HSS that the CDIV feature may apply.
Element | Description |
---|---|
|
This property, if present, take precedence over the |
|
This property, if present, take precedence over the |
|
The CDIV feature supports an extension to the standard that allows an operator ruleset to be defined. Operator rules are evaluated before other rules, unless the PreferSubscriberConfig field is set to |
The other child elements of <operator-communication-diversion>
are not read by the CDIV feature.
The schema for the Operator part of the Communication Diversion (CDIV) services has been extended to support an optional ruleset. |
HSS Metaswitch TAS Data
Default Forward to Voicemail functionality depends on subscriber data provisioned in Forward-To-Voicemail
section of the Metaswitch-TAS-Services document in the HSS.
The following attribute from that section is used:
Name | Type | Description |
---|---|---|
voicemailServer |
String |
The URI for the voicemail server to connect to. |
See the Metaswitch-TAS-Services Schema to Session-State Fields mapping for more details about the Metaswitch-TAS-Services document.
Session Input Variables
Session State variable name | Type | Comments |
---|---|---|
Complex |
Read from the HSS or HLR in SubscriberDataLookupFromHSS or SubscriberDataLookupFromHLR |
Session Output Variables
Session State variable name | Type | Comments |
---|---|---|
DiversionCounter |
int |
The number of re-targeting attempts caused by the feature in one Session, whether immediate or due to a response |
HiLastReceivedIndex |
String |
The index for the history-info received in the initial |
HistoryInfoHeaders |
String [] |
The latest history-info headers sent or received |
LastDiversionType |
DiversionType (an enum) |
One of: |
EarlyMediaAnnouncementQueue |
List<Integer> |
Updated announcement queue with diversion announcement id if any |
Statistics
MMTelCDIV statistics are tracked by the volte.sentinel.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → volte.sentinel.sip service → volte.sentinel.sip SBB → feature → MMTelCDIV
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=volte.sentinel.sip,vendor=OpenCloud,version=3.0.0].SbbID[name=volte.sentinel.sip,vendor=OpenCloud,version=3.0.0].feature.MMTelCDIV"
Statistic | Incremented when… |
---|---|
Started |
the feature runs |
FailedToStart |
Sentinel VoLTE encounters an error while attempting to start the feature |
IssuedWarning |
a non-fatal problem is encountered and the feature and issues a warning |
FailedDuringExecution |
a fatal problem is encountered and the feature cannot execute correctly |
TimedOut |
the feature takes too long to complete and Sentinel VoLTE aborts execution |
Misconfigured |
the feature configuration could not be loaded |
ProcessingSipResponse |
the feature is triggered on a SIP response |
ProcessingSipRequest |
the feature is triggered on a SIP request |
ProcessingChargingEvent |
the feature is triggered on a OCS event |
LegManagerError |
a problem occurs while trying to access data from the SIP leg manager |
ErrorProcessingSipRequest |
a problem occurs while trying to read or modify to a SIP request |
ErrorProcessingSipResponse |
a problem occurs while trying to read or modify to a SIP response |
DiversionLoopDetected |
diversion is aborted due to a diversion loop being detected |
DiversionLimitExceeded |
diversion is aborted due to the diversion limit being hit |
CancelledInviteRequest |
the CDIV feature cancels an |
ErrorCancellingInviteRequest |
a problem occurs while attempting to cancel an |
ReleasedDownstreamLeg |
caller is being diverted to voicemail |
TerminatedByResponse |
CDIV is aborted by sending an error response on the originating leg |
TerminatedByRetargeting |
CDIV is aborted by attempting to divert to a fixed final destination |
ErrorTerminatingByRetargeting |
diversion fails while trying to terminate by re-targeting |
NoReplyTimerSet |
the feature sets a timer for CFNR |
NoReplyTimerCancelled |
the feature cancels a timer for CFNR |
NoReplyTimerFired |
the feature is triggered by a CFNR timer expiring |
TimerSuppressedByResponseFromCSDomain |
timer is suppressed when parallel fork is done and the CS domain answers first |
CDIVSuppressedByResponseFromCSDomain |
CDIV service is suppressed when parallel fork is done and the CS domain answers first |
CallerNotifiedOfDiversion |
the feature notify the caller the session is being diverted |
FailedToNotifyCallerOfDiversion |
the feature fails to notify the caller the session is being diverted |
CFUSucceeded |
unconditional call forwarding is successfully executed |
CFUFailed |
a fatal problem occurs while trying to execute unconditional call forwarding |
CFNLSucceeded |
call forwarding due to the target user not being logged into IMS is successfully executed |
CFNLFailed |
a fatal problem occurs while trying to execute call forwarding due to the target user not being logged into IMS |
CFNRSucceeded |
call forwarding due to the target user not replying is successfully executed |
CFNRFailed |
a fatal problem occurs while trying to execute call forwarding due to the target user not replying |
CFBSucceeded |
call forwarding due to the target user being busy is successfully executed |
CFBFailed |
a fatal problem occurs while trying to execute call forwarding due to the target user being busy |
CFNRcSucceeded |
call forwarding due to the target user being unreachable is successfully executed |
CFNRcFailed |
a fatal problem occurs while trying to execute call forwarding due to the target user being unreachable |
CDImmediateSucceeded |
call forwarding due to immediate call deflection is successful. |
CDImmediateFailed |
a fatal problem occurs while trying to execute call forwarding due to immediate call deflection |
CDAlertingSucceeded |
call forwarding due to call deflection during alerting is successful |
CDAlertingFailed |
a fatal problem occurs while trying to execute call forwarding due to call deflection during alerting |
ToHeaderChanged |
'To' header is set to diverted party or served user |
SubscriberCDIVAttempted |
call forwarding due to subscriber rules was attempted, either succesfully or unsuccesfully |
OperatorCDIVAttempted |
call forwarding due to operator rules was attempted, either succesfully or unsuccesfully |
DivertingCallToVoicemail |
call is being forwarded to voicemail |
ExecutingDefaultForwardToVoicemail |
call is being re-targeted to voicemail |
ErrorExecutingDefaultForwardToVoicemail |
a fatal problem occured while re-targeting to voicemail |
DefaultForwardToVoicemailTimerSet |
the default forward to voicemail timer has been started |
DefaultForwardToVoicemailTimerCancelled |
the default forward to voicemail timer has been cancelled |
DefaultForwardToVoicemailTimerFired |
the default forward to voicemail timer has fired, call will be diverted to voicemail |
Behaviour
If MMTelCDIVServiceData.OperatorAuthorized
is false
and EnableDefaultForwardToVoicemail
is false
, the feature finishes execution without modifying any state.
If MMTelCDIVServiceData.OperatorAuthorized
is false
and EnableDefaultForwardToVoicemail
is true
, the feature runs in voicemail-only mode, ignoring CDIV rules, but enabling the default forward to voicemail functionality.
Condition Evaluation
Triggered conditions and non-triggered conditions are part of CDIV rule and condition evaluation.
-
Triggered conditions include:
-
Communication Forwarding on Busy user (CFB)
-
Communication Forwarding on No Reply (CFNR)
-
Communication Forwarding on Subscriber Not Reachable (CFNRc)
-
Communication Deflection (CD)
-
Communication Forwarding on Not Logged-in (CFNL)
-
Communication Forwarding Unconditional (CFU)
-
Triggered conditions are mutually exclusive, therefore if more than one is in a rule the rule will evaluate to false. |
-
Non-triggered conditions include:
-
Media Type
-
Validity.
-
Non-triggered conditions can evaluate to true in any type of diversion.Triggered conditions can only evaluate to true at particular points of session processing.
|
Triggered condition name | Applicable point in session | XML condition element value from HSS |
---|---|---|
Communication Forwarding on Busy user (CFB) |
|
|
Communication Forwarding on No Reply (CFNR) |
A 180 Ringing response followed by a |
|
Communication Forwarding on Subscriber Not Reachable (CFNRc) |
|
|
Communication Deflection (CD) |
|
Not configurable through XCAP |
Communication Forwarding on Not Logged-in (CFNL) |
Receipt of |
|
Communication Forwarding Unconditional (CFU) |
Receipt of |
|
OC-Retarget Header
The OC-Retarget header is added by MMTel CDIV to communicate that a diversion has occurred. This header is inserted into the initial INVITE that goes towards the diverted party. This is then used in the composition to decide whether to invoke the SCC-AS.
For more details see OC-Retarget Header
Media
Media is evaluated as part of condition evaluation. Therefore CFB can cause a re-targeting to different destinations if there are several diversion rules with busy and media conditions.
Media-only conditions can be used to immediately re-target INVITE
requests matching media conditions.
An example where all sessions that contain both audio and video are diverted is as follows:
<cp:conditions> <media>video</media> <media>audio</media> </cp:conditions>
Each <media>
element value is searched against all media descriptions in the INVITE
request SDP. If all media
conditions match, then the conditions block evaluates to true
.
Validity
Validity provides the ability to filter a condition based on date comparisons. For example:
<cp:conditions> <busy/> <cp:validity> <cp:from>2015-01-01T00:00:00</cp:from> <cp:until>2015-01-31T23:59:59</cp:until> </cp:validity> </cp:conditions>
This conditions block will evaluate to true
if the condition is evaluated during January 2015.
Request URI for a Re-targeted INVITE
The request URI is set to the SIP URI or tel URI where the communication is being diverted to. This URI is normalized using the Normalization Component.
This comes from the <target>
sub-element of the <forward-to>
element in a CDIV rule’s actions:
<cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> </forward-to> </cp:actions>
It may or may not have a target parameter, and always has a cause parameter and MMTel service type parameter.
Target Parameter
The request URI has a target parameter if and only if the re-targeting is due to a response, such as in the following cases:
-
busy
-
no-answer
-
deflection
-
not-reachable.
The target parameter is set to the request URI for the received initial INVITE
, including all parameters. Any
parameters of the original request URI are in escaped format. This is to ensure that the SIP message has valid syntax.
Conversely, if communication forwarding is due to Unconditional
, or Not Logged In
, then there is no target
parameter in the request URI.
Cause Parameter
There is always a cause parameter for every re-targeted INVITE
.
The cause-param
parameter of the request URI is simple cause=
appended with a “cause value”.
Cause | Cause Value | Determination Rule |
---|---|---|
Communication Forwarding on Busy |
486 |
|
Communication Forwarding on No Reply |
408 |
|
Communication Forwarding Unconditional |
302 |
|
Communication Deflection (immediate response) |
480 |
Immediate deflection: |
Communication Forwarding not logged in |
404 |
|
Communication Deflection during alerting |
487 |
deflection: 302 received after 180-RINGING is received |
Communication Forwarding Subscriber not Reachable |
503 |
|
MMTel Service Type Parameter
There is always a MMTel service type for every re-targeted INVITE
.
The mmtel-service-type
parameter of the request URI is simple mmtel-service-type=6
for CDIV.
181 Responses
A 181
notification is sent to the calling party in a CDIV scenario if the <notify-caller>
element is set to true
or if the element is missing from the condition. For example:
<cp:conditions/> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> </forward-to> </cp:actions>
A 181 notification will not be sent if the <notify-caller> element is set to false .
|
Reveal Served User Identity to Caller
There is an optional flag that determines whether the identity of the served user is revealed to the calling party on 181
responses or not.
<cp:conditions/> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> <reveal-served-user-identity-to-caller>false</reveal-served-user-identity-to-caller> </forward-to> </cp:actions>
-
If
reveal-served-user-identity-to-caller
is set tofalse
, or if TIR is enabled, then theprivacy
header on the History-Info entry for the served user is set tohistory
, and theprivacy
header on the response is set toid
. -
If
reveal-served-user-identity-to-caller
is set tonot-reveal-gruu
, and the target URI on the History-Info entry for the served user contains agr
parameter, it is replaced by the asserted identity of the served user. -
If
reveal-served-user-identity-to-caller
is omitted, the default istrue
.
Reveal Diverted-To User Identity to Caller
There is an optional flag that determines whether the identity of the diverted-to user is revealed to the calling party on 181
responses or not.
<cp:conditions/> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> <reveal-identity-to-caller>false</reveal-identity-to-caller> </forward-to> </cp:actions>
-
If
reveal-identity-to-caller
is set tofalse
, then theprivacy
header on the History-Info entry for the diverted-to user is set tohistory
. -
If
reveal-identity-to-caller
is omitted, the default istrue
.
Reveal Served User Identity to Diverted-To Party
There is an optional flag - reveal-identity-to-target - that determines whether the identity of the diverting party is revealed to the diverted-to party in the diverted INVITE request or not.
<cp:conditions/> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> <reveal-identity-to-target>false</reveal-identity-to-target> </forward-to> </cp:actions>
-
If
reveal-identity-to-target
is set to false, or if OIR is active, then theTo
header is modified to the SIP identity of the diverted-to party, and theprivacy
header on the History-Info entry for the served user is set tohistory
. -
If
reveal-identity-to-target
is set tonot-reveal-gruu
, and theTo
header contains agr
parameter, theTo
header and the History-Info entry for the served user are set to the asserted identity of the served user. -
If
reveal-identity-to-target
is set totrue
, then theTo
header is the SIP identity of the diverting party. -
If
reveal-identity-to-target
is omitted, the default istrue
.
One Re-targeted INVITE
The MMTelCDIV feature will only ever re-target once. This is because MMTelCDIV is designed to execute on a public network. Private network derivations of this feature do not need to follow this rule.
As the feature re-targets once, it will insert one history-info element into one INVITE
to represent a re-targeting.
The only case the feature inserts more than one element into history-info is in the case where no history-info or an
empty history-info was received in the initial INVITE
.
CDIV Suppression
There is a case where the CDIV feature needs to be suppressed even though it may be active. This is needed on an MT call, when the SCC-AS diverts a call to a CS network as the MSC will have its own CDIV services. This means that, when the call is diverted to CS, the MMTel-AS does not divert any calls, and cancels any remaining no-reply timers. If the SCC-AS utilizes parallel-routing (i.e. forwards call to both PS and CS domain), the MMTel-AS will respond in the same way.
CDIV suppression is achieved by analysing the provisional responses for the given call. These responses contain the
OC-Terminating-Domain
custom header, which indicates what network the call is diverted to. Because the no-reply
timers are typically set upon provisional responses (i.e. 18X responses), it is here that CDIV suppression is
engaged/disengaged.
The presence of CDIV suppression is configurable. Setting the SuppressForCSTerminatingDomain
attribute of the
MmtelCDIVConfigProfile
profile to true
will enable the aforementioned CDIV suppression. Its default value is
false
, which leaves CDIV suppression disabled.
CDIV Default Target URI
The CDIV feature can optionally use a default URI for re-targeting requests. The default URI is stored in the DefaultTargetURI
field as a String. This default URI is applied when there is a re-targeting rule and no URI to forward to. The default
re-targeting URI can be enabled using the DefaultTargetEnabled
boolean variable.
CDIV No Reply Timer
When CDIV sees a 180 Ringing
response, it will check to see if there are any rules relevant to Communication Forwarding
on No Reply (CFNR). If there is at least one relevant rule, CDIV sets a CDIV No Reply Timer
. The duration of the timer is:
-
the
<communication-forwarding-on-no-reply-timer>
value in the<operator-communication-diversion>
section of the MMTel-Services XML data, if present -
… or the Network Operator Data
NoReplyTimeout
field
Default Forward to Voicemail
The CDIV feature can be configured to re-target a call to voicemail.
This is configured via the feature configuration field EnableDefaultForwardToVoicemail
.
The re-target destination voicemail server is provisioned in the <voicemail-server>
value in the <forward-to-voicemail>
section of the subscriber’s Metaswitch TAS XML data.
If configured, the CDIV feature sets a Default Forward To Voicemail Timer
when processing the initial INVITE.
The duration of the timer is based on the DefaultForwardToVoicemailTimeout
feature configuration.
The re-target to voicemail will occur if:
-
the
Default Forward To Voicemail Timer
expires; -
the called subscriber has no provisioned diversion rules but is busy or not logged in; or
-
the called subscriber has provisioned diversion rules, but the diversion is terminated without initiating a further retarget; or
-
credit could not be allocated for the call and configuration allows the voicemail server to be contacted without credit (see below).
Announcements
If PlayAnnouncement
is true
and an announcement is configured, then the announcement will be played before diverting the call to the subscriber’s voicemail server.
If VmAnnouncementID
is configured and the subscriber’s voicemail server matches one the URIs in VmsUris
, then the voicemail announcement will be played.
If the subscriber’s voicemail server does not match any of the URIs in VmsUris
, or if VmAnnouncementID
is not configured, then the default AnnouncementID
announcement will be played (if it is configured).
Credit Not Allocated
Default forward to voicemail may be executed when using online charging if credit is required to deliver the call but:
-
the subscriber does not have enough credit; or
-
the OCS failed; or
-
charging procedures were deliberately aborted by Sentinel.
This behaviour depends on the value of the DefaultForwardToVoicemailWithoutCredit
field in feature configuration:
Value | Behaviour |
---|---|
NEVER_ALLOW |
Default forward to voicemail will not execute. |
ALLOW_ONLY_FOR_WELL_KNOWN_SERVERS |
Default forward to voicemail will execute if the subscriber’s voicemail server URI is present in the |
ALWAYS_ALLOW |
Default forward to voicemail will always execute if credit cannot be executed. |
If this behaviour is triggered then the online charging session will be finalised, after which no further updates will be sent to the OCS. |
Diversion Limit
The CDIV feature enforces a limit on the maximum number of times a call may be diverted, this limit is:
-
the
<total-number-of-diversions-for-each-communication>
value in the<operator-communication-diversion>
section of the MMTel-Services XML data, if present -
… or the
MaxDiversionCount
field in the feature’s network operator data.
Before a call is diverted, this limit is checked against the number of diversions that have already occurred to ensure the new diversion can go ahead.
When the diversion limit is exceeded there are a number of things that can happen based on these
Network Operator Data fields: NoRetargetURI
, MaxDiversionAction
, and
MaxDiversionFixedDestination
.
First, the feature will check the value of the next target URI against the list of URI’s in the NoRetargetURI
field. This field contains a comma separated list of known URI’s that will never themselves trigger additional
re-targeting. If the next target URI is equal to a URI on this list, after both are normalized using the Normalization Component, the feature considers it "safe" to allow the diversion to
take place and the diversion limit will not be immediately enforced.
In the event that the next target URI is not in the NoRetargetURI
list, the feature will execute its max diversion
behaviour. There are two possible outcomes, based on the value of the MaxDiversionAction
field.
-
If the field is set to
REJECT
, then the feature will reject the INVITE request with a 486 response in the event that the last re-target was triggered by CFB (Call Forward Busy), or a 480 response in all other cases. -
If the field is set to
DELIVER_TO_FIXED_DESTINATION
, then the feature will attempt to re-target the call to the URI given in theMaxDiversionFixedDestination
field.
If the MaxDiversionAction
field is set to DELIVER_TO_FIXED_DESTINATION
, but the MaxDiversionFixedDestination
field
does not contain a valid URI, then the feature will reject the INVITE as if MaxDiversionAction
field had been set to REJECT
.
If the MaxDiversionAction
field is set to DELIVER_TO_SUBSCRIBERS_VOICEMAIL_SERVER
, the feature will re-target the call towards voicemail.
If a retarget to voicemail has already occurred the feature will reject the INVITE as if MaxDiversionAction
field had been set to REJECT
.
Choosing the CDIV Rule to Apply
The <communication-diversion>
and <operator-communication-diversion>
sections of the MMTel-Services XML document can
contain diversion rules. A rule may be relevant for a diversion scenario (e.g CFB) and it may be applicable to a particular
communication session (i.e its condition evaluates to true).
The CDIV feature:
-
finds all rules that are appropriate for a diversion scenario (e.g CFU)
-
evaluates the operator rules first
-
If no operator rule was applied, then evaluate subscriber rules
Consider the following example, where there are two rules relevant for CFU.
<complete-communication-diversion>
<communication-diversion active="true">
<!-- ... -->
<cp:ruleset>
<cp:rule id="Audio">
<cp:conditions>
<media>audio</media>
</cp:conditions>
<cp:actions>
<forward-to>
<target>sip:bob@audio.somewhere.com</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</communication-diversion>
<operator-communication-diversion authorized="true">
<!-- ... -->
<cp:ruleset>
<cp:rule id="Video">
<cp:conditions>
<media>video</media>
</cp:conditions>
<cp:actions>
<forward-to>
<target>sip:bob@video.somewhere.com</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</operator-communication-diversion>
</complete-communication-diversion>
The subscriber rule will cause audio
calls to be forwarded to sip:bob@audio.somewhere.com
.
The operator rule will cause video
calls to be forwarded to sip:bob@video.somewhere.com
.
case #1 Alice makes a Video
call to bob.
-
Search operator rules and evaluate rule 'Video', which matches, so forward the call.
---alice---[Video]--->bob----->(rule id="Video")---->bob@video.somewhere.com
case #2 Alice makes an Audio
call to bob.
-
Search operator rules and evaluate rule 'Video', which does not match
-
Search subscriber rules and evaluate rule 'Audio`, which matches, so forward the call.
---alice---[Audio]--->bob--+-->(rule id="Video") X | +-->(rule id="Audio")---->bob@audio.somewhere.com
Non-Provisionable Retarget URIs
It is possible to configure a list of NonProvisionableRetargetURIs
in the feature configuration.
Retargeting to these URIs is not permitted.
When selecting the CDIV rule to apply, any rules whose target URI (after normalization) matches a URI on the NonProvisionableRetargetURIs
list (after normalization), are ignored.
Normalization is done using the Normalization Component.
Example CDIV Rules
For clarity, here are some example CDIV rules.
They can be pasted directly into the Transparent Data editor in REM.
CDIV Unconditional
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <cp:rule id="unconditional"> <cp:conditions> </cp:conditions> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>false</notify-caller> </forward-to> </cp:actions> </cp:rule> </cp:ruleset>
CDIV Busy
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <cp:rule id="busy"> <cp:conditions> <busy/> <media>video</media> <media>audio</media> </cp:conditions> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> </forward-to> </cp:actions> </cp:rule> </cp:ruleset>
CDIV Not Reachable
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <cp:rule id="not-reachable"> <cp:conditions> <not-reachable/> <cp:validity> <cp:from>2015-01-01T00:00:00</cp:from> <cp:until>2015-01-31T23:59:59</cp:until> </cp:validity> </cp:conditions> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> </forward-to> </cp:actions> </cp:rule> </cp:ruleset>
CDIV No Reply
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <cp:rule id="no-answer"> <cp:conditions> <no-answer/> </cp:conditions> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> </forward-to> </cp:actions> </cp:rule> </cp:ruleset>
CDIV Not Registered
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <cp:rule id="not-registered"> <cp:conditions> <not-registered/> </cp:conditions> <cp:actions> <forward-to> <target>sip:+6505550201@example.com</target> <notify-caller>true</notify-caller> </forward-to> </cp:actions> </cp:rule> </cp:ruleset>