Number Manipulation
Number Manipulation is used to change number formats.
Main RULES
MOR manipulates with numbers which are in E.164 format.
That is, numbers coming to MOR SHOULD BE in E.164 format. Numbers leaving MOR ARE in E.164 format.
From this, the actions below follow:
1. The incoming destination number should be made E.164 compatible (done by Localization)
2. The outgoing number may be made out of an E.164 number (done by Provider Rules)
Definitions
- E.164 format - In short, it's the number without an international prefix that starts with a country code. For more details, check Wikipedia.
- Localization
- The main idea of Localization: No matter how the user dials the number (destination), when localized it should be in E.164 format.
- Localization has nothing in common with numbers you send to providers. It operates with numbers received from the caller.
- Provider Rules
- MOR operates with numbers in E.164 format, but the provider often asks for a differently formated number - so Provider Rules formats the E.164 number to a provider-acceptable format.
How Number Manipulation works
The first part, which makes any incoming number E.164 compatible, is done by Localization. The second part, which changes the E.164 number, is Provider Rules. The basic schema for this process can be simplified as:
MOR works only with E.164 numbers. That means, MOR accepts only standard numbers. If a number is not in E.164, it must be changed to an E.164-compatible number.
For this task, MOR has a feature, Localization (found in Billing -> Functions -> Localization), for "standardizing non E.164 numbers to correct E.164 numbers".
If requested by an outgoing calls provider, MOR can cut/add a special prefix to the number to send it to the provider in its requested format. This can be done using Provider Rules.
Localization and Provider Rules follow the same logic.
An example of how Localization works:
Number from Caller -> Localization -> Number from Caller in E.164 format -> MOR -> Provider Rules -> Number for Callee.
- International prefixes and local number formats are handled by Localization.
- Provider technical prefixes and special number formats for providers are handled by Provider Rules.
This means:
- if MOR receives a number with an international prefix, you need to strip it and make the number E.164 compatible.
- if MOR receives a number in some local number format with some special digit(s) in front of it you need to strip it, add the country code -> make it E.164 compatible using Localization
- if your provider requests some fancy technical prefix, you need to add this prefix using Provider Rules. Add the prefix to the E.164 number. You may need to cut some digits (let's say the country code) before adding the technical prefix. Do this with Provider Rules.
Let's repeat, because it is extremely important:
When MOR receives a number, make sure it is E.164 compatible or make it E.164 compatible with Localization. When you are sending a number to a provider, use Provider Rules to change the E.164 number to the format the provider expects.
Work flow to set up Localization and Provider Rules
To set up correct Localization and Provider Rules, you need to do the following:
- Know what number format the user will be dialing.
- Create an appropriate Location and assign the user to that Location.
- Create rules for the specific Location to handle user-entered numbers.
- Know what number provider expects.
- Create rules for the provider which handle the number transformation to provider's expected number.
For the training let's cover full example using the scheme we had before:
- User dials some number: 863042438
- Number is made E.164 compatible by Localization: we cut 86, add 3706 and we have: 37063042438
- Billing: MOR uses 37063042438 to find correct destination and rates
- E.164 number is transformed to provider format by Provider Rules: number 37063042438 is transformed to number format which provider expects by adding 89765#, so we have: 89765#37063042438
- Call is sent to provider: 89765#37063042438
HINT: We should remind you to use Call Tracing to debug all this.
HINT: World Telephone Numbering Guide can help you a lot handling different number formats.
Rule Ordering
Rules for Localization and for Provider Rules are ordered in following order:
- Device/Provider Location
- Global Location
That means that Global location rules are applied to every device. But they have lower priority over some specific Location. That means - if device belongs to some Location X, then rules in Location X are reviewed first. If none of the rules can be applied from Location X, then rules in Location Global are checked.
When one rule is applied - no more rules will be applied after that.
How exact rule for dialed number is selected from many rules
How MOR select rule which should be applied to the number?
There are 3 steps done for all rules (for Localization & Provider Rules)
1. MOR checks for number length and reject these rules if dialed Numbers length does not fall into MIN and MAX described interval. E.g. if Numbers length is less then MIN or greater then MAX.
2. Then these rules are rejected if beginning of number does not match Cut value of these rules.
3. At the last step MOR selects the rule which has longest Cut length.
E.g. Rule selected at step 3 will be used to transform dialed number.
Example
Lets say 012337068111543 coming from caller to MOR system.
And we have such rules:
# CUT ADD MIN MAX 1 01 11 11 14 2 012 22 12 15 3 123 33 15 16 4 0123 44 11 20
1. MOR is checking number length by available min/max settings. So if incoming number's length (number length = 15 in our example) is more or equal then MIN and less or equal then MAX - this rule will not be rejected. E.g. rule will be rejected if number length will be less then MIN or greater then MAX.
Then we are rejecting rule #1 because 15 is > MAX(14), after first step we have:
# CUT ADD MIN MAX 2 012 22 12 15 3 123 33 15 16 4 0123 44 11 20
2. MOR proceeds to looks for CUT value which match beginning of dialed number. MOR rejects all rules which do not match dialed number beginning.
In this step we are rejecting rule #2, because its CUT value (123) is NOT beginning of dialed number: 012337068111543.
After second step we have:
# CUT ADD MIN MAX 2 012 22 12 15 4 0123 44 11 20
3. MOR checks for all remaining rules which haven't been rejected by first and second rule and select rule which has longest CUT.
This step selects rule with longest CUT, so our result is:
# CUT ADD MIN MAX 4 0123 44 11 20
This rule is applied to dialed number. E.g. if dialed number is 012337068111543, then first we cut CUT value (0123) out from it (then we have 37068111543) and then we add ADD value (44), so final result is 4437068111543.