The MMTelSequentialFA feature implements the Flexible Alerting service, by sequentially alerting the group members.
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 |
---|---|---|---|---|---|---|---|
MMTEL |
No |
Terminating |
Sip_Access_Subscriber_Check, Sip_Access_Party_Request, Sip_Access_Party_Response, Sip_Access_Service_Timer, SipMidSession_Party_Request, Sip_Mid_Session_Party_Response, SipLegEnd |
Yes |
Yes |
Stateless |
POJO |
Source Code
The source code for this feature is available in the Sentinel VoLTE SDK in the mmtel-flexible-alerting
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-mmtel-flexible-alerting opencloud#mmtel-flexible-alerting#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-determine-flexible-alerting-mode |
Group module for the Determine Flexible Alerting Mode feature. |
mmtel-determine-flexible-alerting-mode-profile |
The profile for this feature |
mmtel-determine-flexible-alerting-mode-library |
The common library for this module pack |
mmtel-parallel-fa |
The flexible alerting parallel feature. |
mmtel-sequential-fa |
The flexible alerting sequential feature. |
Statistics
MMTelSequentialFA statistics are tracked by the sentinel.volte.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.volte.sip service → sentinel.volte.sip SBB → feature → MMTelSequentialFA
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.volte.sip,vendor=OpenCloud,version=3.0.0].SbbID[name=sentinel.volte.sip,vendor=OpenCloud,version=3.0.0].feature.MMTelSequentialFA"
Name | Type | Incremented when … |
---|---|---|
Started |
Counter |
each time the feature runs |
FailedDuringExecution |
Counter |
a fatal error occurs while the feature is executing |
FailedToStart |
Counter |
Sentinel VoLTE encounters an error while attempting to start the feature. |
IssuedWarning |
Counter |
a non-fatal problem is encountered and the feature and issues a warning. |
TimedOut |
Counter |
the feature takes too long to complete and Sentinel VoLTE aborts execution |
ProcessingRequest |
Counter |
processing a request message. |
ProcessingResponse |
Counter |
processing a response from a downstream forked leg. |
InviteRequestReceived |
Counter |
the original invite is received. |
CancelRequestReceived |
Counter |
a CANCEL message is received. |
ProvisionalResponseReceived |
Counter |
a 1xx message is received. |
SuccessResponseReceived |
Counter |
a 200 (OK) message is received. |
GroupMemberAlerted |
Counter |
an INVITE message was sent to a group member. |
GroupMemberAddedToQueue |
Counter |
a group member was queued for alerting. |
MemberLegReleased |
Counter |
a dialog leg is released. |
RespondedUpstreamManually |
Counter |
the feature created an upstream response. |
TriggeredOnResponse |
Counter |
the feature is triggered on a response message. |
TriggeredOnRequest |
Counter |
the feature is triggered on a request message. |
TriggeredOnTimer |
Counter |
the feature is triggered on a timer event. |
TriggeredOnLegEndEvent |
Counter |
the feature is triggered on a SIP leg end event. |
AnyResponseTimerSet |
Counter |
the feature set a timer to wait for a response on a downstream leg. |
FinalResponseTimerSet |
Counter |
the feature set a timer to wait for a final response on a downstream leg. |
AnyResponseTimerCancelled |
Counter |
the timer waiting for a response on a downstream leg was cancelled. |
FinalResponseTimerCancelled |
Counter |
the timer waiting for a final response on a downstream leg was cancelled. |
TimerFired |
Counter |
the feature handled a timer event. |
ExitedEarlyNoMembersToAlert |
Counter |
there is just one member in the group and it is the pilot number. |
Interaction with other MMTel Services
CDIV Unconditional
If CDIV Unconditional is active for the Pilot Identity, CDIV Unconditional procedures will be applied and no group member will be alerted.
CDIV Busy
If CDIV Busy is active for the Pilot Identity, CDIV Busy procedures will be applied if the pilot number is considered busy.
The definition of Busy for the pilot number depends on the group type: single-user
or multiple-users
.
For single-user
, when one member is busy the pilot number is busy, while for multiple-uses
all group members have to be busy for the pilot number to be considered busy.
CDIV No Reply and CDIV Not Reachable
If the FA Pilot Number is considered in a state of No Reply
or Not Reachable
then the CDIV procedures for those MMTel services will be applied.
CDIV Not Logged-in
If the FA Pilot Identity has CDIV Not Registered active, the procedures for CDIV Not Registered will be applied.
MMTelOIP
OIP applied to any FA group member when OIP is active for the FA Pilot Identity.
MMTelTIP
If the FA Pilot Identity did not apply TIR, the termination identification is the FA Pilot Identity.
MMTelTIR
If the FA Pilot Identity has TIR activated, the termination identification is not presented.
MMTelICB
If the FA Pilot Identity has ICB activated, the procedures for ICB will be applied.
MMTelOCB
If any FA group member has OCB activated, the procedures for OCB will be applied for that member.
Network Operator Data
The data present in the JSLEE profile table MMTelDetermineFAConfigProfileTable
is used to configure the behaviour of the Sequential Flexible Alerting Feature.
Variable Name | Type | Comments |
---|---|---|
SequentialAnyResponseTimeout |
int |
Set the amount of time in milliseconds that the MMTelSequentialFA feature waits for a response before cancelling the dialog with that group member. |
SequentialFinalResponseTimeout |
int |
Set the amount of time in milliseconds that the MMTelSequentialFA feature waits for a final response before cancelling the dialog with that group member. |
AddHistoryInfoHeader |
boolean |
Determines whether to add |
AddMpParam |
boolean |
If adding |
Session Input Variables
Variable Name | Type | Comments |
---|---|---|
MMTelFAServiceData |
Complex |
Service data read from the HSS |
FlexibleAlertingGroupMode |
Enum |
Determines whether single user or multi-user Flexible Alerting is used. |
Session Output Variables
Variable Name | Type | Comments |
---|---|---|
SuppressCdiv |
Boolean |
Indicates whether response should be ignored by the MMTel CDIV feature. |
Behaviour
The MMTelSequentialFA implements Flexible Alerting sequentially.
It reads the MMTelFAServiceData
session variable to get the group information and will alert each active group member one at a time, using SIP sequential forking.
The INVITE request URI will have two parameters added to it.
-
The first is the Cause Parameter with the value always set to
cause=302
. -
The second is the MMTel Service Type Parameter with the value set to
mmtel-service-type=11
for flexible alerting.
If a member responds with a final response other than a 200 (OK) or a timer event occurs the feature will end the dialog for that member and alert the next member in the queue. When a member answers the call with a 200 (OK) the feature will finish the call setup procedure between the calling party and the member that answered.
The feature also controls the state of the FA Pilot Identity regarding the busy, not reachable and no reply states.
The determination of those states depends on the responses of the members and the FA group type: single-user
multiple-users
.
For further information regarding the state of a Pilot Identity see Flexible Alerting.
OC-Retarget Header
The OC-Retarget header is added by MMTel Flexible Alerting to communicate that a retarget has occurred. This header is inserted into the initial INVITE that goes towards the retargeted party. This is then used in the composition to decide whether to invoke the SCC-AS.
For more details see OC-Retarget Header
Sequential Flexible Alerting and MMTelCDIV interaction
The CDIV feature runs before the Flexible Alerting feature on INVITE path. This way, the CFNL and CFU conditions can be applied to the pilot number before alerting any group member.
On the Response path, the CDIV feature runs after the Flexible Alerting feature. CDIV applies the conditions CFB, CFNR, and CFNRc based on the final response that the MMTelSequentialFA feature
sends to the caller. To avoid the CDIV feature being triggered on any final response from a group member, the MMTelSequentialFA feature suppresses the CDIV feature execution by setting the session state variable SuppressCdiv
.
MMTelSequentialFA will allow the CDIV feature to execute only after the state of the pilot number is defined by receiving all members final responses or by timing out.
HSS Subscriber Data Examples
single user
group type
In the first example the Subscriber Data configures a flexible alerting group with type single-user
.
The group has three active members and the flexible alerting service is authorized or active.
<?xml version="1.0" encoding="UTF-8"?> <Sh-Data> <RepositoryData> <ServiceIndication>MMTEL-Services</ServiceIndication> <SequenceNumber>1</SequenceNumber> <ServiceData> <MMTelServices xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <complete-flexible-alerting> <operator-flexible-alerting authorized="true"/> <operator-flexible-alerting-group authorized="true"> <identity>sip:bob@home1.opencloud.co.nz</identity> <group-type>single-user</group-type> <membership>permanent</membership> <members> <member active="true">sip:bob@home1.opencloud.co.nz</member> <member active="true">sip:bobmobile@home1.opencloud.co.nz</member> <member active="true">sip:bobdesk@home1.opencloud.co.nz</member> </members> </operator-flexible-alerting-group> </complete-flexible-alerting> </MMTelServices> </ServiceData> </RepositoryData> </Sh-Data>
multiple-users
group type
The following example shows a group of multiple-users
type with four members. The flexible alerting service is authorized or active.
<?xml version="1.0" encoding="UTF-8"?> <Sh-Data> <RepositoryData> <ServiceIndication>MMTEL-Services</ServiceIndication> <SequenceNumber>1</SequenceNumber> <ServiceData> <MMTelServices xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy"> <complete-flexible-alerting> <operator-flexible-alerting authorized="true"/> <operator-flexible-alerting-group authorized="true"> <identity>sip:office@home1.opencloud.co.nz</identity> <group-type>multiple-users</group-type> <membership>demand</membership> <members> <member active="true">sip:desk1@home1.opencloud.co.nz</member> <member active="true">sip:desk2@home1.opencloud.co.nz</member> <member active="true">sip:desk3@home1.opencloud.co.nz</member> <member active="true">sip:desk4@home1.opencloud.co.nz</member> </members> </operator-flexible-alerting-group> </complete-flexible-alerting> </MMTelServices> </ServiceData> </RepositoryData> </Sh-Data>