Subscriber function code (featurecode)

Description

Calling feature code (CAF) is an internal telephone number that defines access to various internal service functions: IVR, conference, call intercept, etc.
Is part of the call routing process, applied in its final phase. Some CAFs may restart the routing process with changed parameters and new attributes.

Limitations

  • The collection is not available in the master domain.

Fields

Entity structure
{
  "id": uuid,
  "prefix": str,
  "type": str,
  "extension": str,
  "priority": int,
  "opts": {
    "title": str,
    "comment": str
  },
  "ext": {
    "ct": date,
    "lwt": date
  }
}
Table 1. Fields
Specification Description

Field: id
Mode: inout
Type: uuid
Default: generated

Identifier. Can be specified at creation, otherwise generated by the system.

Field: prefix
Mode: in
Type: str
Default: required

CAF number prefix.
When a call enters the CAF, all CAFs whose prefix matches the dialed number are searched. If the priorities of these CAFs match, the CAF with the longer prefix is used (long-hunting).

Field: type
Mode: in
Type: str
Default: required

Subscriber function code type.
Most types of CAFs use parameters.
The stay parameter is calculated as the end of the dialed number after the CAF number. For example, the number 123456 is dialed, the own CAF number is 123, so the parameter for it is - 456.

Field: extension
Mode: in
Type: str
Default: empty

Optional parameter. For type ivr - IVR script code, for type hunt - number hunt applied in priority over remainder, for type replace - set of additional options.

Field: priority
Mode: in
Type: int
Default: 1000

Subscriber function code priority.
Applies when several different CAFs correspond to a number. The smaller the value, the higher the priority.

Field: opts
Mode: in
Type: object
Composite field

Field: opts.title
Mode: in
Type: str
Default: empty

Arbitrary header

Field: opts.comment
Mode: in
Type: str
Default: empty

Arbitrary comment

Field: ext
Mode: inout
Type: object
Compound field

Allows you to extend the compound with arbitrary keys and values

Field: ext.ct
Mode: out
Type: date
Default: generated

Object creation time

Field: ext.lwt
Mode: out
Type: date
Default: generated

Time of last modification of the object

Type of subscriber function code

Table 2. Type of subscriber function code
Value Description

"pickup"

Intercept a call received at an account accessible by a specified number.
The number is calculated as a remainder. The 'extension' field does not apply.

"grouppickup"

Intercept a call based on the presence of the called SIP user account and the intercepting SIP user account in the same group number.
Any call that is in the caller’s calling state is subject to interception, even if received individually rather than to a group number.
Neither the remainder nor the 'extension' field is applied.

"conference"

Routing to the conferencing service.
The conference room number is calculated as a remainder. The 'extension' field does not apply.

"ivr"

Routing to service IVR.
The IVR script code is specified in the 'extension' field of the CAF. The remainder does not apply.

"queue"

Routing to a personalized queue.
The subscriber number is taken as a remainder. The 'extension' field does not apply.

"hunt"

Routing to service hunt-groups and queues.
The hunt group number ('phonenumber') is specified in the 'extension' field of the CAF, if it is empty, it is taken as a remainder.

"hotdesking"

Hot Desk. User authorization from a handset with simultaneous account linking and assigning the user’s phone number to the device (account sipuser).
The service allows for binding and unbinding.

To bind, you must type "{Featurecode}{UserNumber}*{UserPincode}" as the number. In this case:

  • if the user is linked to another sipuser account, it will be pre-bound there.

  • If another user is already bound to the current account from which the call is being made, this user will also be unbound beforehand.

The user’s phone number and its pin code are set in the user account properties.
When using the Hot Desk subscription feature, one user can only be associated with one account sipuser.

To unlink, you need to dial "{FeatureCode}" as a number and any number of zeros at the end, including without zeros.

When unlinking a sipuser account, an empty number (phonenumber) and an empty user are installed (iduser).

"voicemail"

Manage your voice mailbox, listen to voice messages.
The voice mailbox number is calculated as a remainder. The 'extension' field does not apply.
Calling a number without adding a box to the end of the number is not handled by the service and a notification is made.

The voice mail service number, together with the box number added as a remainder, can be specified when setting the MWI (Message-waiting indicator) in the subscriber’s telephone set.
In this case, the phone will subscribe and the server will notify the phone when new messages arrive in the corresponding voice mailbox.

To listen to voice messages, make a call to the voice mailbox management service number with the mailbox number added to the end.
If there are unheard messages, they will be played back in sequence. When a message is played back, it is automatically moved to the listened messages category.
If there are no new messages, the service will offer to play old (previously listened to) messages.
While listening to messages, it is possible to control the service by sending DTMF signals:
2 - switch to the listened messages (only when playing new messages);
4 - playback of previous message;
5 - repeat playback of the current message;
6 - skip to the next message;
8 - deleting the current message;
9 - clearing the mailbox (separately for new messages and for previously listened messages);
0 - call the sender of the message;
# - switch to the beginning (when playing previously listened messages - check for new messages and switch to their playback);
* - reproducing the instructions for managing the partition.

The service is implemented using an embedded hidden IVR script with a pre-configured voicemail code containing 'Voice Mail' and 'Playback' components'.
The script uses the sound files located in the directory :SYNC/common/voicemail.

The service can be customized by creating an IVR script with code in the domain voicemail.
Each domain uses its own script, in its absence the script of the parent domain or its ancestors, and in their absence up to the master domain the built-in hidden script.

There are 3 schemes available to restrict access to other users' boxes:
* Restricted by call routing rules that distinguish between fromnumber and extension. Configuration Examples for Mail Control Service Number '92':
to_number ⇒ '*92{F}' - mapping to a dialed number.
fromnumber ⇒ '{tab:a}', tonumber ⇒ '*92{tab:a}', in table 'a' ⇒ /reg/^.
$ - matching parts of numbers from two fields.
* fromnumber ⇒ '{tab:a}', tonumber ⇒ '*92{tab:b}', in table 'a' ⇒ /reg/%.$, 'b' ⇒ '/tab/a' - matching parts of numbers from two fields;
* Organize box management through a custom script, flexibly defining filters and access rules.
* Create individual routing rules per box number (not optimal for a large number of boxes).
In any case, it is recommended that users be assigned voice mailboxes that match their personal numbers.

"voicemail_send"

Record and send a voice message.
The voice mailbox number is calculated as a remainder. The 'extension' field does not apply.
Calling a number without adding a box to the end of the number is not handled by the service and a notification is made.

To send a voice message, you must make a call to the service number for sending a voice message with the addendum of the addressee’s mailbox number at the end.
After the beep, dictate the message. You can interrupt the recording by sending any DTMF signal or by waiting for the silence analyzer to automatically end the recording (3 seconds).

The service is implemented using an embedded hidden IVR script with pre-configured voicemail_send code containing 'Voicemail' and 'Playback' components'.
The script uses the sound files located in the directory :SYNC/common/voicemail.

The service can be customized by creating an IVR script with code in the domain voicemail_send.
Each domain uses its own script, in its absence the script of the parent domain or its ancestors, and in their absence up to the master domain the built-in hidden script.

"parking_put"

Putting a call into the parking lot.
The parking space number is calculated as a remainder. The 'extension' field does not apply.
If the parking space number is not transmitted as a remainder number, or the parking space is occupied, the service prompts you to enter the parking space number using the DTMF.

To place a caller on parking, put the call on hold and make a call to the parking service number with the parking space added to the end of the number.
Wait for confirmation that the call has been placed in the parking lot, then perform a swap transfer.

The service is implemented using built-in hidden IVR scripts with pre-configured codes parking_put and parking_wait containing components 'Parking' and 'Playback''.
The parking_put script performs a parking space number detection and places a call to the parking lot, then passes control to the parking_wait script, which plays a wait tune.
The scripts use sound files placed in the directory :SYNC/common/parking.

The service can be customized by creating an IVR script in the domain with the appropriate code.
Thus, to replace the ringback tone, it is enough to create an IVR script in the domain with the code parking_wait.
Each domain uses its own script, in its absence the script of the parent domain or its ancestors, and in their absence up to the master domain the built-in hidden script.

"parking_get"

Taking a call from the parking lot.
The parking space number is calculated as a remainder. The 'extension' field does not apply.
If the parking space number is not transmitted as a remainder number, or the parking space is occupied, the service prompts you to enter the parking space number using the DTMF.

To pick up a caller from a parking lot, call the parking lot pickup service number with the parking space number added to the end of the number.
If a call waiting in the parking lot is successfully detected, the call will be automatically transferred to the waiting party.

The service is implemented using built-in hidden IVR script with pre-configured code parking_get.
The scripts use sound files placed in the directory :SYNC/common/parking.

The service can be customized by creating an IVR script with code in the domain parking_get.
Each domain uses its own script, in its absence the script of the parent domain or its ancestors, and in their absence up to the master domain the built-in hidden script.

"intercom"

Calling a subscriber in intercom mode (task #127).
The target number is taken from the 'extension' field, and if it is not there, it is calculated as a remainder. Then a new iteration of routing is initiated.
In intercom mode, only rule calls with action = inside and insidepbx.
When you hit a redirect, the call is immediately blocked to eliminate surprises.

"barge"

Intrusion to a busy subscriber (task #141).
The target number is taken from the 'extension' field, and if it is not there, it is calculated as a remainder. Then a new iteration of routing is initiated.
In case the target subscriber is in a call state, an intercom call is made (as a consequence, the current call is automatically put on hold), and if the target subscriber is free, a normal call is made.
If intercom priority is configured in the device, the current call will be put on hold and the intrusion call will become active.
Unlike the 'intercom' subscriber function code, when the called party is free, the intercom call is not applied.

"callwaiting"

Routing to a subscriber’s personal number without applying its limit on the number of simultaneous calls.
The subscriber number is taken as a remainder. The 'extension' field does not apply.

"replace"

Shoulder swap (task #163).
Initiates routing to the specified number with a Replaces header added to INVITE for the purpose of spoofing.
The 'extension' field contains a comma-separated enumeration of the strategies for detecting the spoofed call and shoulder:
* num - the dialog is searched by the subscriber’s number as one of the active conversations of the subscriber. The number is taken as a remainder (extension). The subscriber’s account is calculated by the number (via routing without forwarding), and an active conversation is detected for the subscriber.
* callid - the dialog is searched by callid of the active call/shoulder (alternative to searching by number). The callid value can be specified as a number extension (including base64 encoding) or in the Replaces header, or X-Era-Dest-Call-Id.
* base64 - CallID value is specified in the encoding base64.
* opposite - the other shoulder of the detected dialog is taken as the spoofed one, not the specified subscriber/shoulder.
* allsites - the conversation search is conducted at all sites of the system. Otherwise, only on the current site.

"monitor"

Eavesdropping. Connecting to an existing conversation in eavesdropping mode - the initiator hears both callers, but he is not heard by anyone in the conversation.
All subscribers connected to a single call can hear each other. They also hear the waiting tones of the original conversation.
The 'extension' field contains a comma-separated enumeration of the strategies for detecting the spoofed call and shoulder:
* num - the dialog is searched by the subscriber’s number as one of the active conversations of the subscriber. The number is taken as a remainder (extension). The subscriber’s account is calculated by the number (via routing without forwarding), and an active conversation is detected for the subscriber.
* callid - dialog search is performed by callid of the active call/shoulder (alternative to search by number). The callid value can be specified as an extension of the number (including base64 encoding) or in the header X-Era-Dest-Call-Id`.
* base64 - CallID value is specified in the encoding base64.
* allsites - the conversation search is conducted at all sites of the system. Otherwise, only on the current site.
IMPORTANT: The possibility of connection to the call is determined by the routing table: access to the subscriber function number. Availability of the subscriber number for a call is not a criterion for having the right to connect.

"prompt"

Suffler. Connection to an existing conversation in the prompter mode - the initiator hears both callers, but only one of the participants in the conversation (the prompter) hears him.
All subscribers connected to a single call can hear each other. They also hear the waiting tones of the original conversation.
The 'extension' field contains a comma-separated enumeration of the strategies for detecting the spoofed call and shoulder:
* num - the dialog is searched by the subscriber’s number as one of the active conversations of the subscriber. The number is taken as a remainder (extension). The subscriber’s account is calculated by the number (via routing without forwarding), and an active conversation is detected for the subscriber.
* callid - dialog search is performed by callid of the active call/shoulder (alternative to search by number). The callid value can be specified as an extension of the number (including base64 encoding) or in the header X-Era-Dest-Call-Id.
* base64 - CallID value is specified in the encoding base64.
* opposite - the other shoulder of the detected dialog is taken as the suffixed subscriber, not the specified subscriber/shoulder.
* allsites - the conversation search is conducted at all sites of the system. Otherwise, only on the current site.
IMPORTANT: The possibility of connection to the call is determined by the routing table: access to the subscriber function number. Availability of the subscriber number for a call is not a criterion for having the right to connect.

"mesh"

Connecting to an existing conference call - the initiator hears both callers and is heard by both participants in the call.
All subscribers connected to a single call can hear each other. They also hear the waiting tones of the original conversation.
The 'extension' field contains a comma-separated enumeration of the strategies for detecting the spoofed call and shoulder:
* num - the dialog is searched by the subscriber’s number as one of the active conversations of the subscriber. The number is taken as a remainder (extension). The subscriber’s account is calculated by the number (via routing without forwarding), and an active conversation is detected for the subscriber.
* callid - dialog search is performed by callid of the active call/shoulder (alternative to search by number). The callid value can be specified as an extension of the number (including base64 encoding) or in the header X-Era-Dest-Call-Id.
* base64 - CallID value is specified in the encoding base64.
* allsites - the conversation search is conducted at all sites of the system. Otherwise, only on the current site.
IMPORTANT: The possibility of connection to the call is determined by the routing table: access to the subscriber function number. Availability of the subscriber number for a call is not a criterion for having the right to connect.

"fax_to_email"

Receiving a fax and sending it to email.
Actually routing to the service of receiving a fax and sending a file to email, implemented in the IVR, which can be replaced within the domain.
The list of recipients' mailboxes and sender parameters are specified in the domain settings in the parameter fax_to_email.

Set of additional options for CAF type 'replace'

Table 3. Set of additional options for CAF type 'replace'
Value Description

"num"

The dialog is detected by the subscriber to whom the dialed number belongs

"callid"

The dialog is detected by CallId, which is computed similarly to the number as the remainder after cutting the CAF number. If the specified value is empty, the contents of the X-R-Replaces-Call-Id header of the request are analyzed INVITE.

"opposite"

Sign of substitution of the opposite arm relative to the one found by the specified number/CallId

"allsites"

Call search sign on all sites

"base64"

CallId encoding attribute from username to Base64

See also

Logical roles

  • b2b conducts the routing and application of CAFs.

  • mdc and sdc searches for CAFs.