Chapter 4

 

 

Group Definition and Routing tables

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.

 

 

 

Group Definition Tables

 

Dia_OutCh

 

RangeID

Description

OutHunting

MinIdleTime

EndWithPound

Provider

SoftwareAnsSup

ExchProcSet

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

 

WD_MaxGrpBadInARow

WD_MaxChBadInARow

WD_SampleSize

WD_MinCompletion

WD_BalanceChOffSet

15

10

50

20

-1

15

5

50

20

-1

15

5

50

20

-1

 

WD_ShortsAreBad

WD_RecheckMins

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:

RangeID:

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.

 

Description:

The name you set here will show in the Monitor.

 

OutHunting:

0 for Round Robin; 1 for Fixed and –1 for Random.

 

MinIdleTime:

Time to wait after call drop for the channel become available for routing again.

 

EndWithPound:

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


Provider:

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.

 

SoftwareAnsSup:

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

 

ExchProcSet:

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.

 

WD_ MaxGrpBadInARow:

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)

 

WD_MaxChBadInARow:

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.

 

WD_SampleSize:

                Completion rate is calculated using this number of the last calls.

 

WD_MinCompletion:

                Minimum completion rate, below this number an alarm is issued  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)

 

WD_BalanceChOffSet:

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:

WD_ShortsAreBad:

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.

 

WD_RecheckMins:

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.

 

Dia_InCh

 

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.

 

StaticRouteIdx:

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.

 

Function:

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   

 Call Back

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.

 

StartAnalysis

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.

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. 

 

WD_Tolerance:

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.

 

 

Dia_GroupDefs

 

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..

 

Routing Tables

 

RouteTable

   

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.

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.

Suffix

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.

ChargeOnNoAnswer:

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.

 

RoutingSet  

 

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.

 

IdxLookUp

 

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.

 

Tec_BlockList

RouteIdx

Prefix

Description

106

9

Cellular Ecuador1

107

9

Cellular Ecuador 2

-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.

 

Digit Processing

 

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.,

Tec_ExchCodes

 

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

 

Administrative Tables

·         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.

 

Balances  

 

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. 

 

Wholesale billing fields

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.

 

Retail IVR fields

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.

 

Prepaid or credit with real time billing  IVR fields

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.

 

Calling card fields

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.

 

LegBRateLookup

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

 


LegBCostLookup

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.

 

Payhones

 

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:

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.

 

ANIBlackList Table

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.

                                  .

How is an Outbound Channel Selected for a call

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 Find Ranges procedure and it depends on which Range Options exists for the Routing Set of the RouteTable that is in effect. The first option is going to be the range with the highest priority, if no channel is available, then the next in line and so on. It is the Route Index that determines the range options and this data can come from either from the Inbound Ch  Information, in the case of static routing or from the Find Destination procedure, if doing Dynamic Routing, that will provide a Route Index based on the Dialed Number. The routing set comes Account Info, a field in the Balance table and which account? That will depend on either a PIN entry validated through Check PIN or the Default Account in the Inbound Ch Information (dia_InCh). This last one has an object for each DomianID which domain ID is in effects depends on the Inbound Channel Number that call came in and the Group Definitions (GroupDefs table).

 

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. 

 

 

The double database feature

 

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.


APPENDIX A

 

OmniBox Built-in Functions as for 10/2002

 

AutoPIN

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. 

 

Function Description

 
FunctionID Description
-2

ANI dependent function

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

Tandem Switch

1

Long Distance IVR AutoPIN =  ANI: 

AuthorizationCode must equal ANI, if not the caller will be prompted for the

 supplement digits (up to 5), if more are entered (but less than DigitMax = 15 or Num1 in DNISLookup), the ANI will be disregarded and the entry must match the whole PIN
 2

Long Distance IVR w/o ANI:

No attempt to read ANI or DNIS will be made, the caller must enter the full authorization code.

3

Test and Monitoring IVR

4

New Tandem proc, that retries all possible routes upon call failures.

5

Dial through:

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

Connect straight:

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

Call Back

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.

DNISLookup Table 

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?)  

 

Long Distance Service Scenarios and Which Function to use.

 

 Calling Card

  1. Simple calling card service may use function 2 (Disregards the ANI)

  2. 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

  1. Normal features. Function 1 grants access if:

    1. the authorization code matches the ANI

    2. it doesn’t, but then the caller is prompted for supplementary digits and ANI + Entry matches the authorization code.

    3. No ANI, but entry matches the authorization code

  2. 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.

  3. Clients calling from unregistered phones may use Function 2 that disregards ANI.

  4. 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.

  5. Clients calling from unregistered phones in a mutually exclusive services scenario, may use Function 15, if DNIS is available or 17, if not.  

  6. Function 12. “No questions ask” service, if ANI matches, take DNIS as the Dialed Number and route accordingly.

  7. Do no PIN verification but prompt for the number to dial (feature for testing), Function 10.

  8. 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.

Flow Diagrams for Built-in Functions 

Function 0: General Tandem Switch

 


Function 5: Dial Through

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.

 

 


Function 6: Connect Straight

 

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.

 

 

Function 7: Answer Ring

 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.

Text Box:

 


 

Standard IVR for Long distance Service: Function 1:

 

Function 13: Call Back