Set all the necessary parameters to specify outbound ranges and inbound domains for static routing. Dynamic routing will use these, plus the IdxLookUp that will link the dialed number to a routing index. The figure below shows how the tables involved in routing are related.
1 |
PageLine |
0 |
6000 |
0 |
1 |
1 |
1 |
2 |
QuitoPOP |
0 |
6000 |
0 |
1 |
1 |
1 |
5 |
AT&&T |
0 |
6000 |
0 |
2 |
1 |
1 |
15 |
10 |
50 |
20 |
-1 |
15 |
5 |
50 |
20 |
-1 |
15 |
5 |
50 |
20 |
-1 |
60000 |
120 |
0 |
120 |
1 |
120 |
This table describes how to deal with the outbound trunk groups. There's a remark though, the properties to a channel are not only specified in this table but mostly on the cdp file. Properties in the cdp file a those that are protocol specific while the ones on this or the dia_InCh are not..
Field explanation:
Range numeric reference, this is the number that will go into the OutGroupID field in the CDR and the one that goes in the Watchdog pages.
The name you set here will show in the Monitor.
0 for Round Robin; 1 for Fixed and –1 for Random.
Time to wait after call drop for the channel become available for routing again.
If 1, you need a # sign appended to the dialing string for that range. You may also use the Suffix field in the Route table, but would be valid for a route
Is a reference number to a provider company, it is needed for getting the rates and calculating the cost of a call and for the billing reports.
This field has evolved from a simple yes or no to a 6 bit map describing all the available outbound modes:
bit 1 (Answer Supervision)
value 1. (Software Answer Supervision),
Answer supervision will be given upon detection of FAX, voice or recording. The principle requires that all call progress tones and cadences be registered, any sound not matching the registered patterns and that is not a FAX or Modem (which must also be defined) will be regarded as a voice. If the PAMD feature is active and the voice follows the pattern of a short salutation followed by a longer silence and then a sustained sound, like "hello....hey! how are you doing?...." it would be a regarded as a voice detection, if it doesn't, then a recording will be reported.
value 0 (Hardware Answer Supervision),
Answer supervision will be given only if the appropriate signaling is received on the outbound channel. Also,
bits 2&3 (Playback Mode)
value 0 Listen to call progress from destination
value 2 Play a ring until a real ring is detected or call failure. A resource of type 2 will play a ring while the call is being analyzed, the caller will only start listening to the destination after there is a real ring or a connect fail result like a busy or SIT tones. The ring that will be played is described in the Dia_Tones table. In circuits with long post dial delays, callers may hang up after a prolonged silences and here is when a bogus ring may help retain the call but, on the other hand, if they get too many rings (the bogus+ real ones), you may get the same result. You may want to delay the bogus ring to the limit of the estimated caller's dead air patience. This can be set using parameter $9 in the cdp file. More on this in Chapter 8.
value 4 Play ring until connection or call failure. Some destinations may play call progress tones that are unfamiliar to callers and may mislead them to hang up calls that were bound to connect. In this cases, you may want to conceal these tones and let only familiar ones be heard.
value 6 Play recording until connection or call failure. The path to the file to be played is in the Prompts table with PromptID = 40 that by default is C:\Work\Prompts\WAV\ptMUSIC.WAV.
bit 4 (Bogus Answer Supervision)
More frequently than it should, a condition is encountered where no sound is heard until answer supervision is given. If (and only if!) the telecom equipment involved were just routers or switches that do not generate CDR's, then giving a bogus answer supervision upon seizure solves the sound problem without creating a billing issue.
value 8 Give bogus answer supervision
value 0 Don't
bit 5 (Disregard Hang-up)
Even when answer signal in the outbound channels can not be trusted for answer supervision, the disconnect signal is usually a real indication that the called party hung up, but there are cases in which signaling have no real meaning and must be disregarded.
value 0 In the event of a disconnect signal, play the number of busy cadences specified in the dia_Tones table to the inbound or, in absence of an inbound disconnect signal (See parameter $33 in cdp file) , truncate the call.
value
1 Take no action upon disconnect signal detection.
bit 6 (Pulse Dialing) (CAS only)
value 1 Do pulse dialing. In this case, to avoid hearing the pulses, listening is not allowed until the dialing is over..
value 0 Tone dialing, dtmf or mf acording to parameter $47 of the cdp file
Exchange Processing Set ID. The same destination may be served by more than one Range but this doesn’t mean that the digits processing has to be identical. The exchanges may need a 0 added before it in one range and maybe another doesn’t need it. The opposite is also possible, more than one range may need the same kind of process and it doesn’t need to be described more than once in the Tec_ExchCodes table. If the ProcessDigits field in the dia_InCh table is set to 0, the Set_ID is irrelevant.
Maximum number of bad calls in a row for an outbound range. If the number of failed (or short calls) exceeds this figure, an alarm is sent to the monitor and a page to the Watchdog. If WD_BalanceChOffSet is equal or greater than 0, then all the channels in the range will be excluded (see below for more on this parameter)
Maximum number of bad calls in a row for an outbound channel. If the number of failed (or short calls) in a channels exceeds this figure, an alarm is sent to the monitor and a page to the Watchdog.
Also if WD_BalanceChOffSet is >= 0, the channels will be automatically “excluded”, meaning that they won’t be selected for routing. Whenever a channel is excluded by the Watchdog, it will be included again (for testing) in a settable amount of hours (See WD_RecheckHours below). If it then fails 3 times in a row, it will be excluded again.
Completion rate is calculated using this number of the last calls.
Minimum completion rate, below this number
an alarm is issued
This feature is used to accommodate inbound traffic to the outbound availability. This is accomplished by excluding an Inbound Channel when the corresponding Outbound one is excluded. The channel offset is what sets this correspondence, but there are 4 substantially different cases here:
The field is set to a valid inbound channel number: then every time a channel is excluded by the Watchdog, OmniBox will balance this action by excluding the corresponding one on the inbound. Two cases here:
If OutHunting is set to Round Robin or Random, any channel that is excluded in the outbound will be balanced by excluding the first idle channel starting with the WD_BalanceChOffSet. If there were no idle channels, the excluding action stays pending until the moment a channel becomes idle.
If the OutHunting is set to fixed: say, the fifth channel in the outbound range is excluded, then the fifth channels starting from the offset will be excluded too.
Conversely, if an excluded channel is included back, then the first excluded channel, starting with the WD_BalanceChOffSet, will be also included back.
The field is set to 0 (or any value>0 that is not an inbound channel number): No balancing takes place.
The field is set to -1 (or any number <0) : When an outbound channel goes beyond the WD_MaxChBadInARow failure limit, an alarm to the Monitor is issued but the channel is not excluded. :
Many CO’s don’t precede their messages with SIT tones like in the US and so, it will trigger a voice detection connection. These calls, though logged as "good", are actually failed ones, the only difference with a really "good" call is that they a short. In these cases, short calls may be indicating a faulty line and you may want to exclude the corresponding channel after a maximum count. You may accomplish this by setting the field to a value different than 0 and equal to the criterion for short in milliseconds. I you enter a number <>0 but less than 1000, a 30000 ms default will go in effect.
However, short calls can be a symptom of more serious problems non related to channel failure, for instance, a wrong entry in the RouteTable can direct calls into a wrong city and though many may actually connect, you can not expect these conversations to go beyond a salutation. In cases like this excluding channels won’t help.
For V4.83 and up, if the module 1000 to this number equals 2 (2, 1002, 2002,...), it will be interpreted by the OmniBox as a command to take Ring No Answers as bad calls for Watchdog purposes. A ring no answer use to mean that someone is not home, but connection could have been completed the phone was answered, so a ring was a "mission accomplished signal. For cellular technology though it can be regarded as a bad call, since a ring doesn't really mean that a phone is really ringing, it could be out of range, cellular disconnected, repeater down, etc. This is nearer to a bad call.
A channel that was excluded by the Watchdog for having failures beyond the limit established by WD_MaxChBadInARow will be retested again in a number of minutes specified by this WD_RecheckHours field. The re-check consists in including the channel again but the failure counter will be set to WD_MaxChBadInARow - 3, so that it if it gets only three failures in a row it will be excluded again.
DomainID |
Static RouteIdx |
Function |
Process
Digits |
Start
Analysis |
Description |
LegA Cost |
DefaultAcc |
Strip
Prefix |
1 |
-1 |
0 |
-1 |
600000 |
Client1 |
0.04 |
1000000000 |
011 |
3 |
-1 |
3 |
-1 |
600000 |
Test
Line |
0.02 |
1000000000 |
011 |
4 |
-1 |
4 |
-1 |
600000 |
Demo |
0 |
1000000000 |
011 |
WD_SampleSize |
WD_Tolerance |
WD_MaxNonRoute |
WD_MaxShortCallRate |
50 |
7 |
15 |
70 |
50 |
7 |
15 |
70 |
50 |
7 |
15 |
70 |
DomainID:
Domain numeric reference, this is the number that will go into the InGroupID field in the CDR and the one that goes in the Watchdog pages.
If the domain is to have a static route, this field must be set to the desired RouteIdx. If the route is to be dynamically chosen upon digit analysis, then –1 must be set.
Selects the function of the channels in the domain. Below are the values for built in functions. (for descriptions of these functions go to Appendix A.). Values over 100 can correspond to user programmed functions.
-2 |
ANI depending function |
-1 |
DNIS depending function |
0 |
Tandem Switch |
1 |
Long Distance IVR w ANI |
2 |
Long Distance IVR don't read ANI |
3 |
Test and Monitor IVR |
4 |
Tandem switch w Multi Attempt |
5 |
Dial through |
6 |
Connect straight |
7 |
Answer and dial fixed number |
8 |
Xenon Custom Proc |
9 |
Tandem switch through prepaid calling card |
10 |
LD w/o PIN verification. |
11 |
Long Distance Serv. Delete ANI. |
12 |
ISDN check PIN and do Tandem Switch |
13 |
|
14 |
LD IVR w DNIS+ANI+PIN |
15 |
LD IVR w DNIS+PIN |
16 |
Reserved for future use |
17 |
Same as 15 but w/o DNIS reading |
ProcessDigits:
This flags when TRUE enables the digit processing features of OmniBox. (TRUE < > 0) If false, the string dialed will be identical to the string to be dialed out.
This is the call length in milliseconds after which it will be monitored by the Hung Trunk detector. If set to 0, it won’t be analyzed and if set to –1, will disable the hung trunk detector completely for that domain.
Description:
The name you set here will show in the Monitor.
LegACost:
If there is a cost for an incoming call, it should be set into this field so that the call cost can be computed accurately.
DefaultAcc:
For Tandem switching is the account to be charged for the traffic through the Domain. When doing IVR PIN verification and there is a cost for an incoming call, this default account will be charged when the account of the caller can’t be established.
StripPrefix:
If the string set in this field matches the first digits of the dialed string and if ProcessDigits field is set to TRUE, it will be stripped before any digit analysis is done. For V2.996 and higher. This field admits a sequence of prefixes separated by semicolons (;). Example:
011;*011;0
If there is a match on any sub-string in the sequence, it will be stripped.
WD_SampleSize (also Try All Routes):
Average time between calls is calculated using the last WD_SampleSize calls. The short call rate is also calculated using this sample.
Since V4.60, this field being odd or even took the the meaning of "Try All Routes" yes or no respectively.
Even:: Call attempt is made on the highest priority first available channel, if it fails, no attempt is made on lower priority alternatives, the call ends there
Odd: Call attempt is made on the highest priority first available channel, if it fails, it make another attempt is made on the following priority alternative, if it fails again, it tries the next...and so on
The Even choice has a higher completion rate, but also higher time to connect as well. This choice should also be combines with playing a ring until real ring, be cause listening to call progress may be misleading for the caller.
If there are no calls for as long as the WD_Tolerance times the average between calls, a low traffic alarm is issued to the Monitor and the Watchdog for paging.
WD_MaxNonRoute:
If more than this amount of calls, in the last WD_SampleSize attempts, couldn’t be routed, for any reason, i.e. blocked, no free channels, unknown route, etc. An alarm will be issued to the Monitor and the Watchdog for paging.
WD_MaxShortCallRate:
Short call rate is (calls shorter than half a minute) / (Total of connected calls). When the rate goes beyond this maximum value, it can mean that wrong number are being dialed, C.O. messages, etc. that can indicate trouble in the dialing plan or wrong routing.
GroupID |
ChMin |
ChCount |
i_o |
1 |
201 |
12 |
TRUE |
1 |
304 |
1 |
0 |
2 |
217 |
4 |
0 |
3 |
303 |
1 |
TRUE |
4 |
301 |
2 |
TRUE |
5 |
213 |
4 |
0 |
5 |
221 |
4 |
0 |
This table is the one that assigns the channels to the groups, this is Domains and Ranges, described in the dia_InCh and Dia_OutCh respectively. This method allows that the channels assigned to a group be non-contiguous but could be, though its not recommended, arbitrarily fragmented. Inbound and outbound groups may share the same numbers since the i_o field distinguishes domain (TRUE) from ranges (FALSE or 0) but contiguous groups should have ID numbers that differ in more than one so as to get a better color contrast on the Monitor..
RouteIdx |
RangeID |
Priority |
ReplaceWith |
ChargeOnNoAnswer |
Suffix |
RoutingSet |
107 |
1 |
1 |
0115937 |
0 |
|
0 |
107 |
5 |
0 |
07 |
0 |
|
0 |
151 |
1 |
1 |
0115913 |
0 |
|
0 |
151 |
3 |
0 |
|
0 |
|
0 |
170 |
2 |
0 |
|
0 |
|
0 |
171 |
2 |
1 |
1877 |
0 |
,# |
0 |
171 |
5 |
0 |
%03n90P(0,0) |
0 |
|
0 |
184 |
1 |
0 |
0P(2,1) |
0 |
|
0 |
185 |
1 |
0 |
P(3,1) |
40000 |
|
0 |
In the OmniBox routing scheme, in both static or dynamic, a ‘route’ is a number called the Route Index or RouteIdx for short. The RouteTable relates actual ranges to a RouteIdx. Each range assigned to a route has a Priority. If there’s no channel available in the lowest Priority then the next highest will be searched. Also, if ProcessDigits field is set to true and StaticRouteIdx set to -1 for the inbound Domain involved, the prefix associated with the RouteIdx through table IdxLookUp (see next table), will be replaced by the string in the ReplaceWith field.
For example, assume that 01159371234567 has been dialed in, OmniBox will strip the 011 (Strip field in the dia_InCh Table) and figure out that it belongs to route 107 to Cuenca and strip the matching substring 5937. This 107 route has its main priority as a direct link to a POP in a nearby city (range 5). To connect, the after the original 0115937 is stripped from the dialed string and a ‘0’ for long distance and a ‘7’ for Cuenca must be dialed before the bare number (1234567) at the POP. But if there where no available channels in range 5, the call may be routed into range 1, which is an international carrier to which the full dialed string , including 011, must be dialed, so a ReplaceWith string could be 0015937.
To avoid the need of entering a route for every different possibility, a wild card feature was implemented. Works as follows. Suppose there is a POP in Mexico DF, if you dial into Mexico DF, that is 525xxxxxxx then you must strip 525 and dial xxxxxxx, if dialing elsewhere say 52Xxxxxxxx, then the 52 must be striped and a 0 must be dialed before the X. Here you may use the P(S,L) expression, S is the start character in the dialed string and L the number of characters from this. The way to express the 0X is 0P(2.1), which means 0 followed by 1 character starting from the third (0,1 and 2).
Using the P formula, the Cuenca example could also be solved by 011P(0,4). A value 0 for L in P(S,L) formula is interpreted as "what ever length the prefix stripped by the idxLookUp process had". This give us another solution to the Cuenca example: 011P(0,0). But there's the S feature, the S stand for "Whatever was stripped before the idxLookUp process", which was the 011. This give us still another valid expression for the ReplaceWith field in the Cuenca example: SP(0,0). This is a very common expression meaning "put all the stripped numbers back".
Some VoIP gateways require that the dialed string be prefixed with a channel number to properly select the outbound channel at the remote site. For this kind of prefix, you may use the expression %0XnY1 Y2…YX, where Y is the offset and X is the character count of this offset number. In the example above, route 171, Range 5, a call to 187712334567 routed through the first channel in Range 5 will dial 09018771234567, if through the second channel the dial will go 09118771234567 and so on.
If something is needed to be appended at the end of a dialing string, for example “,#” (a 2 second delay and a pound), you may use the Suffix field. This may be useful when some switch, gateway, frame relay or IVR down the circuit is expecting a termination signal.
The EndWithPound field in the dia_InCh table will also terminate with a pound any string to be dial out any channels belonging to a Range. This will save you to add a # suffix to every route served by a range but still using the Suffix will have the advantage of not needing a Commit DB Changes command to put it in effect or take it away.
The are international routes that are known to have long post dial delays, also there are client carriers that set answer supervision timeouts as low as 45 seconds. Consider a post dial delay of 25 seconds, the ring cadence being 5-6 seconds, a call, that will otherwise connect, will drop on the fourth ring. In these cases, OmniBox can be set to return an early answer supervision to avoid the drop. In the table example above, route 185 will signal answer supervision at 40000 ms from the call start when it is in the Alerting state. 0 disables the feature for that route.
Is part of the RouteTable primary key. The purpose of this field is to provide the means to have an account depending routing. For instance, lets assume that there are two providers covering certain route, one is high quality and rates the other low quality and rates. Now there are clients with premium accounts while others have low cost ones, the premium accounts should have the quality provider Range as the first priority while the rest should have the low cost one as their first. In this case the RouteTable must have at least two Routing sets, one for each type of client with right priorities for each case.
RouteIdx | Prefix | PrefixLength | Description | MinDigits | MaxDigits |
---|---|---|---|---|---|
541 | 380482 | 6 | Ukraine Odessa | 9 | 12 |
542 | 971 | 3 | United Arab Emirates | 9 | 12 |
543 | 97150 | 5 | United Arab EmiratesCellular | 9 | 12 |
544 | 441 | 3 | United Kingdom | 10 | 13 |
544 | 442[3489] | 4 | United Kingdom | 10 | 13 |
545 | 44[3-9] | 3 | United Kingdom Cellular | 10 | 13 |
545 | 440 | 3 | United Kingdom Cellular | 10 | 13 |
545 | 442[12][0-9] | 5 | United Kingdom Cellular | 10 | 13 |
545 | 442[567][0-9] | 5 | United Kingdom Cellular | 10 | 13 |
545 | 4420[0-69] | 5 | United Kingdom Cellular | 10 | 13 |
546 | 4420[7-8] | 5 | United Kingdom London | 10 | 13 |
This table associates dialed numbers to the route indexes for the dynamic routing function. The look up query will return the RouteIdx that matched the longest prefix. This way, for example, 1442312345 will return 544 for UK while 3804821234 will return 541 for a number in the Odessa Ukraine.
PrefixLength is the length of the prefix, not the pattern descriptor. There is a trigger to this table (for DB Versión newer tha 2) that calculates the right figure for you when you update the pattern descriptor or append a new record..
The MinDigits and MaxDigits fields allow to filter wrong numbers before routing to any outbound channel, this save resources by not using them on calls that don’t have a chance to connect. These fields refers to the digit count in the bare number which is what’s left after stripping the prefix. For example a number like 38048212 won’t connect because is one number short, but it would still use an outbound channel for almost 20 seconds before an operator intercept is heard, then OmniBox will allow for 10 more seconds for the caller to listen to the message. Half a minute of a channel could be used in a call that it was obvious that couldn’t connect. If a 9 is set as a minimum count, a busy would be returned without routing in a case like the one in the example. A maximum number can also be set because to many digits may be an indication of a faulty dialup, also to many digits may jam a connection further on. Allowing two or three more digits is a fair setting.
OmniBox uses the Microsoft SQL server 'LIKE' operator's match definition, under which the following wild cards are allowed.:
Wildcard character | Description | Example |
---|---|---|
_ (underscore) | Any single character. | ‘_234’ finds all four-digit strings that end with 234 (5234, 1234, and so on). |
[ ] | Any single character within the specified range ([2-7]) or set ([234567]). | ‘3411[5-9]0’ finds 341160, 341180.... |
[^] | Any single character not within the specified range ([^2-7]) or set ([^234567]). | ‘341[^259]’ finds 3410, 3411, 3413, 3414, 3416, 3417 and 3418 |
.
All the characters in the prefix will be removed, if they are needed, they may be added back with the ReplaceWith operation. The Description text will show in the call descriptor on the Monitor.
Warning:
All routes should have an entry in this table even if the routing is to be
static.
RouteIdx |
Prefix |
Description |
106 |
9 |
Cellular
Ecuador |
107 |
9 |
Cellular
Ecuador |
-1 |
876700 |
Cellular
Jamaica |
-1 |
876707 |
Cellular
Jamaica |
Before any routing, static or dynamic, is done, the dialed numbers (without the StripPrefix of table dia_InCh if ProcessDigits in the dia_InCh table is set to TRUE) are checked against this table, if a 'LIKE' match is found, a busy signal is returned and the call is logged as “Blocked Number”. RouteIdx must match the StaticRouteIdx field of its corresponding inbound Domain in the dia_InCh table. This is necessary when you combine static with dynamic routes in the same box, static routes may not contain country or city codes, just exchanges, and some of these may match some non-to-be-blocked blocked international prefixes.
Part of the digit processing was already is done via dia_InCh and the RouteTable. The first table specifies if there’s a prefix that should not be analyzed any further and should be readily stripped, typically this is the 011 international prefix. This eases the population of the IdxLookUp table since you don’t need to specify prefixes both with and without the 011. In the RouteTable you may specify with what you want to replace the route’s Prefix with.
There
may be further processing needed for a route though. The firsts digits
(usually 3), in the bare number are called exchanges. It could happen that
some exchanges, when dialed from certain place, may need a to be preceded by a
long distance code while others don’t. To specify which do and which don’t
in this case you may use the tec_ExchCodes table.,
RouteIdx |
SetID |
Exchange_i |
Exchange_o |
170 |
1 |
_ |
1_ |
170 |
1 |
702 |
702 |
170 |
1 |
750 |
750 |
170 |
1 |
754 |
754 |
170 |
1 |
755 |
755 |
170 |
1 |
756 |
756 |
170 |
1 |
757 |
757 |
170 |
1 |
4_0 |
_00 |
The ‘exchange’ in a dialed string refers to the first 3 digits of the bare number, but the exchange digit processing in OmniBox deals with any count of digits. The largest match with the strings in the Exchange_i field for the corresponding RouteIdx and Set_ID (see ExchProcSet in table dia_OutCh), will trigger a removal that sub-string from the bare number and it will be replaced with the string in the Exchange_o field. An ‘_’ in the Exchange_i field is a wild card meaning any digit in that position whereas in the Exchange_o means to replace the first ‘_’ with the first character in the bare number, the second ‘_’ with the second character and so on.
Examples:
Inbound Bare Number Outbound Bare Number
750 1234 750 1234
915 1234 1915 1234
430
1234
400 1234
· Balances
· AuthorizationCodes
· LegBRateLookup
· LegBCostLookup
In order to support prepaid functions, OmniBox must allow for real time accounting. This implies that balances must be updated on every single call and if within one, the balance comes near zero, the caller must be prompted and the call eventually cut. For real time accounting, updated administrative tables must be accessible to the OmniBox app. For deferred accounting, these tables may reside at the server where the billing operations take place.
Keeps the account related information. OmniBilling can handle wholesale billing for applications like tandem switching or software answer supervision; retail long distance service accounts; similar prepaid services that implies real time accounting and Calling Card support.
cl_id |
ClientType |
RoutingSet |
LegAFactor |
CompanyID |
---|---|---|---|---|
1231422794 |
1 |
0 |
0 |
10 |
1231422795 |
1 |
0 |
0 |
11 |
1231422796 |
1 |
0 |
0 |
11 |
Wholesale accounting uses only the above fields the rest are ignored:
cl_id
is the account ID, it is text
field that allows up to 30 characters
ClientType
Clients are grouped into types to the effect of rates. This numeric field
specifies the Type ID. Values from 1 to 99 are reserved for prepaid account
types (client types 51-89 won’t take ##, this means only one call per login
is allowed).
RoutingSet The purpose of this field is to provide the means to have an account depending routing. For instance, lets assume that there are two providers covering certain route, one is high quality and rates the other low quality and rates. Now there are clients with premium accounts while others have low cost ones, the premium accounts should have the quality provider Range as the first priority while the rest should have the low cost one as their first. In this case the RouteTable must have at least two routing sets, one for each routing set with right priorities for each case.
LegAFactor When the leg A of a call comes through an 800 service or private link that involves a cost, a proportional amount may be charged to this account and is expressed as an integer percentage in this field.
CompanyID Is a link to the primary key of the Companies table. This is a report auxiliary table that holds all information about client and provider companies.
LanguageOffset | WelcomeID |
---|---|
0 | 5 |
1000 | 5 |
0 | 5 |
In retail business without real time billing, the accounts are invoiced after a specified period, so there is no need to keep a balance field updated to the last call, but since it involves PIN verification prompts it requires the above fields.
LanguageOffset is an integer that specifies the prompting language, 0 English, 1000 Spanish, etc A negative value means to keep the language specified for the default account, a negative in a default account will simply mean English.
WelcomeID This number refers to the ID in the Prompt table and specifies the welcome prompt to be played after a successful login. If set to zero, no prompt is played after login. In case of a Default Account to an inbound domain, the prompt specified is the one first played by the IVR upon seizure. Here, a zero will mean just prompt ID = 0 or ptGENERAL_ANOUNCE.WAV a music chord by default.
Last_Update |
balance | BalanceLimit | InUse | RealTimeBilling |
---|---|---|---|---|
6/18/01 2:18:17 PM |
$999.17 | $0.5 | 0 | 1 |
6/12/01 4:03:53 PM |
$99.8 | $0.5 | 0 | 0 |
6/12/01 4:06:34 PM |
$99.94 | $0.5 | 0 | 0 |
Last_Update is the date of the last time the balance field was changed.
Balance is a real number field expressing the balance.
BalanceLimit Threshold value that may serve several purposes depending on the Account type.
For a prepaid account, is the minimum value after which the balance will start being played.
For an automatically rechargeable account is the value to recharge
For a normal account it could be a value to issue an early invoice.
InUse Prepaid account types can not be used simultaneously by more than one caller at a time, when a first caller correctly accesses the account, OmniBox will set this field to 1, not allowing it to be accessed by a second caller.
RealTimeBilling A non prepaid account may require real time billing if you establish a credit limit or early invoice policy. If this is the case, you must set the field to 1 so that balance will be updated on every call.
Batch | First_Use | Expires | Maintenance_Fee | LifeSpan |
---|---|---|---|---|
1 | 5/10/01 5:15:10 PM | 5/10/02 | $.50 | 365 |
1 | 6/07/01 12:10:47 AM | 6/07/02 | $.50 | 90 |
1 | 6/05/01 2:12:23 PM | 6/05/02 | $.50 | 90 |
Batch is a numeric filed basic to the calling card business. Cards are sold and manufactured in batches. If a batch gets destroyed or stolen you should be able disable the associated accounts.
First_Use The first time a card is used may come several months after card generation and manufacture, it is this date that determines when a maintenance fee is applicable.
Expires holds the expiration date of the calling card.
Maintenance_Fee Since keeping an opened account involves resources of the service provider it can charge a monthly fee after first use.
LifeSpan: (days) There two ways in which a card may expire. There is an absolute date after which the card won't be honored that should be printed on the it. The second way, is that the card has a life span limit after first use. Algorithm goes like this: If the first use is less than Expire then the request is honored and Expire is set to the <current date> + LifeSpan. Default is 365 days
AuthorizationCodes
Table
Authorization_ |
cl_id |
95447345671111 |
9544734567 |
Each account may have one or more associated Authorization codes or PIN’s; that is what these are stored in a different table.
ClientType |
RouteIdx |
LegBRate |
MinCallSecs |
IncrementSecs |
ActivationDate |
RateID |
1 |
151 |
0.2 |
30 |
6 |
1/1/01 |
8 |
1 |
170 |
0.2 |
30 |
6 |
1/1/01 |
9 |
1 |
171 |
0.2 |
30 |
6 |
1/1/01 |
10 |
10 |
102 |
0.1 |
30 |
6 |
1/1/01 |
11 |
100 |
102 |
0.2 |
30 |
6 |
1/1/01 |
12 |
RateID |
Is an identity field, a primary key that identifies the record. |
ClientType |
Is the same ClientType in the Balances table |
RoutIdx |
Is the ID of a destination, the same that the IdxLookup table |
LegBRate |
Is a real number specifying a rate per minute |
MinCallSec |
If a call lasts less than this value in seconds, it will be charged this amount |
IncrementSecs |
Call length will be rounded to the nearest increment integer numbers of these increments, i.e. A 34 second call is charged for .6 minutes while a 32 seconds one only for .5 minute. |
ActivationDate |
These records are no to be edited or deleted, to change a rate you must append a new record. This field specifies when it goes in effect |
Provider |
RouteIdx |
LegBCost |
MinCallSecs |
IncrementSecs |
ActivationDate |
CostID |
1 |
102 |
0.01 |
0 |
1 |
1/1/01 |
1 |
RateID |
Is an identity field, a primary key that identifies the record. |
Provider |
IIs the same Provider field in the dia_OutCh table it must be the same ID in Companies |
RoutIdx |
Is the ID of a destination, the same that the IdxLookup table |
LegBCost |
Is a real number specifying a rate per minute |
MinCallSec |
If a call lasts less than this value in seconds, it will be charged this amount |
IncrementSecs |
Call length will be rounded to the nearest increment integer numbers of these increments. |
ActivationDate |
These records are no to be edited or deleted, to change a rate you must append a new record. This field specifies when it goes in effect |
There are three additional fields in both LegBRateLookup and LegBCostLookup to support peak time
rates.
PeakFactor | LoHour | HiHour |
---|---|---|
1 | 0 | 12 |
1 | 0 | 12 |
1 | 0 | 12 |
1 | 0 | 12 |
1 | 0 | 12 |
PeakFactor |
Is the factor that multiplies the rate during the period specified by the fields below. The number can be greater than one or less than one. |
LoHour |
Specifies the hour (0-23) at which the period starts |
ActivationDate |
Specifies the hour (0-23) at which the period ends |
LegBRateLookup has two additional field to support even more charging styles.
Tax | ConnectionFee |
---|---|
0.06 | .05 |
0 | 0 |
0.065 | -0.1 |
Tax |
would be a factor that applies to the total call price but that is not calculated when the maximum talk time is prompted to the caller. In Other words, assume that the a tax of 6% applies and that the balance to a given caller is $10 and the rate invloved is $0.10 per minute, he will be prompted to have 100 minutes to that destination but will actually be able to talk for only 94. (Warning: to use this feature for anything other than a tax could be ilegal) |
ConnectionFee |
Is a charge for establishing a connection, it will be added to the (Talk Time)x(Total rate) product. A call shorter than a minimum call, will be charged for the minimum call length plus the connection fee. This feature could be also use to deal with conflictive destinations frequently rendering CO messages or other false connections, these could be automatically credited by using a negative connection fee. |
Route indexes < 100, are reserved for payphone connection charges. When using feature Group D or PRI protocols it is possible to know the type of service that originated a call. There are info digits that relate to the type of service according to the following table:
00—Pots
01—Multiparty line
02—ANI failure
06—Station level rating
07—Special operator handling required
08—Inter-LATA restricted
10—Test call
20—AIOD-listed DN sent
23—Coin or non-coin on calls using database access
24—800 service call
25—800 service call from a pay station
27—Pay phone using coin control signaling
29—Prison/inmate service
30—Intercept (blank)
31—Intercept (trouble)
32—Intercept (regular)
34—Telco operator handled call
36—CPE
52—OUTWATS
60—TRS call from unrestricted line
61—Wireless/cellular PCS (type 1)
62—Wireless/cellular PCS (type 2)
63—Wireless/cellular PCS (roaming)
66—TRS call from hotel
67—TRS call from restricted line
68—Inter-LATA restricted hotel
78—Inter-LATA restricted coin-less
70—Private pay-stations
93—Private virtual network
Companies that offer an 800 number (like many calling cards or long distance services) are charged extra for the connection when called from payphones. Charges may change with the service type, but still OmniBox provides a way of transferring these charges to the caller.
When doing PIN verification, OmniBox IVR will check for payphone. By default Info-Digits 25, 27, 29 and 70 will be considered as chargeable payphones. You may override these defaults by entering your choice of values in the Prefix field of the tec_BlockList table with a RouteIdx of 0.
Abroad the US, Info-Digits are not used, but it is the ANI what identifies payphones. In this case you may describe the payphone ANI digit patterns in the Prefix field of the tec_BlockList table with a RouteIdx equal to a value greater or equal than 0 and less than 100.
If the call was actually made from one, it will look up RouteIdx = [Info-Digits] (or the chosen value in the above non US case) and the caller’s ClientType in the LegBRateLookup table, it will take the LegBRate field multiplied by the account’s LegAFactor and will charge the account right away. The LegAFactor is a field in the Balances table that specifies how much of the LegA cost (of which the connection charge is a part) is going to be passed onto this client’s account.
For accounts to be charged for payphone connections:
There must be a record for every chargeable Info-Digit in the LegBRateLookup table and for each client type;
The LegAFactor in the Balances table records, must be set to a value > 0.
Since OmniBox charges for the payphone before calculating the talk time, if the resulting balance for a prepaid caller is not enough to cover the connection charges, the call is terminated with an insufficient funds prompt. To highlight calls originating from a payphone, a "PayPh-" will precede the DialedStr_i in the Log_CDR table .
Though the above provisions help, payphones are still a nuisance for companies offering long distance services because connection charges apply even when PIN’s are not authorized and costs must then be assumed by the company offering them.
Hackers are not in short supply, OmniBox provides a means of defense against these parasites which is the ANI black list. If the ANI is not an empty string, it will be looked up in the ANIBlackList table:
ANI | AttemptCount | Status |
---|---|---|
6184522377 |
258 |
1 |
9544734567 |
3 |
0 |
If that particular ANI is not found, this is, it has not been registered yet, a new record will be added to the table with AttemptCount = 1 and a Status = 0 will be returned (Attempt Accepted). If it is found, then the AttemptCount will be incremented in 1 and its status returned. A status value of 1 will make OmniBox reject the call by playing no prompt but just a busy signal.
.
Diagram below can help understand how the routing tables work together.
DeMarco diagrams (that is the name
for the above type of diagrams) are better understood starting from end
towards the beginning. The process that finally picks a channel is the Hunting Procedure, what data does this procedure need? It needs a Free
Channel Set and the Hunting
Method to use. For instance, if Round Robin, the hunting procedure should
take the next free channel to the last one used. This information comes from
the Range Objects, these objects
reside only in OmniBox volatile memory (we are representing memory objects in
green) except for the outbound channel information that comes from the dia_OutCh
table. There’s one object per range ID, which object is to send the free
channel set is determined by the
Another DeMarco. This time to show how the routing and administration tables work together to figure how much to charge an account, only this time explanation is on you.
Still
another exercise, try modifying above DeMarco diagram to include the payphone
issue.
OmniBox makes two connections through ODBC to database objects. For this it uses two DNS sources: The OmniBoxSrc and the OmniBoxAccSrc
The tables in the upper block may reside in a different computer. The idea is to keep account and rates data in a common SQL server that can be accessed by more than one Box. There are two approaches here: The Centralized table approach in which the tables reside in a server accessed by every box for the routing and real time billing information; or the decentralized one in which copies of the tables should be moved into each of the OmniBox computers, these tables must be synchronized either manually or automatically by the SQL replication mechanism. To use the Centralized approach the ParamNumValue field of parameter 18 in the sys_Parameter table must be set to 1.
In order to describe in fewer works some of the PIN verification functions, we need to introduce the notion of AutoPIN. This AutoPIN, depending on the function, will be set equal to the ANI, the DNIS, the DNIS+ANI or could be left empty. The AutoPIN will be checked against the Authorization Codes if a match is found, the caller won't have to be prompted for any PIN. If it doesn't, then, also depending on the function, the caller may be prompted for its PIN or a PIN supplement.
FunctionID | Description |
---|---|
-2 |
OmniBox Determines which function to execute by matching the ANI with the DNIS field in the DNISLookup Table. If ANI where empty, the DomainID in four digits will be used |
-1 |
DNIS dependent function: OmniBox Determines which function to execute by matching the DNIS with the DNIS field in the DNISLookup Table. If DNIS where empty, the DomainID in four digits will be used |
0 | |
1 |
Long
Distance IVR AutoPIN = ANI: AuthorizationCode must equal ANI, if not the
caller will be prompted for the |
2 |
No attempt to read ANI or DNIS will be made, the caller must enter the full authorization code. |
3 | |
4 |
New Tandem proc, that retries all possible routes upon call failures. |
5 |
For static routes only. After seizure, an outbound channels is selected and route established, The input is sent a wink after it is received in the outbound or after a guard time. The inbound channel dials directly into the outbound saving the redial time. A voice resource is set to listen and answer supervision is returned only upon voice , recording or FAX detection. |
6 |
Upon seizure an outbound channel is selected, seized and routed to. Answer supervision is returned. A voice resource is set to listen everything else only to have a result to log. Useful to access IVR's. |
7 |
Answer and dial fixed number: Upon seizure, an outbound is selected and a fixed number dialed. Music is played while connecting (up to 3 attempts). If there is a DNIS, the number could be stored in the DNIS lookup or else the Account number of the default account will be dialed. |
8 |
Custom Proc |
9 |
Tandem switch through prepaid calling card Upon Seizure the outbound is selected according to the highest balance because the outbound call is done through a calling card service. |
10 |
No PIN verification (For testing purposes) |
11 |
Long Distance Serv. Delete ANI. Read DNIS and ANI but ignoret. |
12 |
ISDN check AuthorizationCode = ANI and if it matches, do Tandem Switch |
13 | |
14 |
LD IVR AutoPIN = DNIS+ANI: Same as function 1 but DNIS goes also into the match. Also, the default account can change with the DNIS through the Str2 field of the DNISLookup table (See below). If DNIS where empty, the DomainID in four digits will be used for the DNIS Lookup query. If Str1 is not empty, DNIS = Str1. |
15 |
LD IVR AutoPIN = DNIS: Same as function 14 but ANI is ignored. |
16 | Reserved for future use |
17 | Same as 15 with no DNIS reading attempt but set directly to 00xx, where xx is the DomainID. In CAS protocols, where the DNIS comes in MF tones, when tones are not present, this function avoids the 7 second timeout involved in the DNIS reading process that would otherwise delay the first prompt |
Functions -2,-1, 14, 15 and 17 will use the DNISLookup table. The name to this table was given before it was generalized to look up ANI values too, if not, a better name would have been found. All the functions that must look into this table, will replace the original FunctionID, the one read from the dia_InCh table, for the one referenced in field ServFunction, also will change the default account to the one referenced in the Str2 field and, once an outbound channel is selected, will replace its outbound mode (SoftwareAnsSup field in dia_OutCh) to the value in the Num2 field. For functions 1, 11, 14 and 16 the maximum digit count to be admitted, which is 15 by default, will be set to the value in the field Num1. If any of the mentioned DNISLookup fields were NULL, empty strings or 0, the original values will be kept in each case.
dnis |
ServFunct |
Str1 |
Str2 |
Num1 |
Num2 |
Description |
Float1 |
5555 |
14 |
100000000 |
9 |
Default account for the 5555 DNIS | 0.0 | ||
6666 |
14 |
|
200000000 |
|
Default
account for the 6666 DNIS |
0.05 | |
581[2-6] |
0 |
356789ALEX |
9 |
Do bogus Ans. Sup. for these ANI's | 0.0 | ||
0001 |
15 |
5555 |
100000000 |
15 |
|
In case there’s no matching DNIS for Domain 1 |
0.0 |
Functions 14-17 and -1 query the DNISLookup table for a DNIS match or a Domain match. If no DNIS could be read it will be replaced by the Domain number preceded by 0’s to the count of 4 characters. Same goes for function -2 and the ANI. Even if a DNIS or ANI were read but not listed, the query can still find the DomainID.
Float1 will carry an overriding value to the default LegACost of the Domain. So if, for example, you have both a local and 800 service accessing the same domain you may set the cost dynamically depending on the DNIS.
Looking up in this table allows you not only to change the function dynamically, but even when keeping the same function, you may also apply different legA factors and LegACost, play different Welcome prompts, the limit digit entry count, change the outbound modes, etc. depending on the DNIS or ANI. (Is this cool or what?)
Calling
Card
Simple calling card service may use function 2 (Disregards the ANI)
Several mutually exclusive calling card services should use:
· If readable DNIS, function 15 and authorization codes should be preceded by DNIS or Str1
· If no readable DNIS, then function 17 and authorization codes numbers preceded by DomainID
Long
Distance Service with PIN verification
the authorization code matches the ANI
it doesn’t, but then the caller is prompted for supplementary digits and ANI + Entry matches the authorization code.
No ANI, but entry matches the authorization code
Prevent ANI-less callers from dialing full authorization codes. Use Function -1 and add one or more records to the DNIS table, enter 1 in ServFunct and , for instance, 9 (one les than the ANI) in Num1.This way, the caller can only supplement the ANI with an entry of less than 6 digits or enter a valid 9 digit authorizarion code.
Clients calling from unregistered phones may use Function 2 that disregards ANI.
Normal features for mutually exclusive services may use Function 14. To disable ANI-less callers, limit the digit count to, for example, 9 in Str1.
Clients calling from unregistered phones in a mutually exclusive services scenario, may use Function 15, if DNIS is available or 17, if not.
Function 12. “No questions ask” service, if ANI matches, take DNIS as the Dialed Number and route accordingly.
Do no PIN verification but prompt for the number to dial (feature for testing), Function 10.
When using CAS protocols without DNIS, attempt to read it involves a timeout waiting for digits. This will delay the first prompt an unacceptable 4 seconds. So when you know there are going to be no digits dialed, use only functions 2 or 17.
If there’s no dynamic routing or digit processing, post dial delay can be reduced by avoiding the redial of the normal Tandem Switch function.
This function is very similar to Function 5, only that it delivers answer supervision as soon as there is an outbound channel available. This function is useful to connect a remote site to a local IVR or to a circuit with an almost certain connection.
This
function allows a remote site to connect to a Local IVR, it detects the Ring (or
seizure) at the remote site and generates a call to an IVR service through the
local PSTN.
|