home *** CD-ROM | disk | FTP | other *** search
- ; c a l l b y c a l l
- ;
- ; A dialing script that selects an access code by time of day to get
- ; the lowest rate (this script is used in Muenchen/Munich, Germany).
- ;
- ; Sample usage:
- ; set dial macro call-by-call
- ; dial <phone-number>
- ;
- ; Illustrates:
- ; An application for SET DIAL MACRO.
- ; Regular expressions as SWITCH labels.
- ; Word splitting.
- ;
- ; Version 1: 16 July 1999
- ; Provider arrays are hardwired.
- ; A future version will construct the provider arrays dynamically from
- ; current rate tables, and possibly account for weekends/holidays.
- ;
- ; From: Peter Eichhorn <petere@assyst-intl.com>
- ; Organization: assyst GmbH
- ; URL: http://www.assyst-intl.com/
- ; Subject: Call-By-Call demo script
- ; Date: Fri, 16 Jul 99 18:34:32 MESZ
- ;
- ; Declare arrays with an element for each hour.
- ; \&d for the normal days and \&w for the weekend.
- ; (&w is currently not used. We don't work on summer weekends :-)
- ; (Hint: use \v(nday) to get day of week: 0 = Sunday, 1 = Monday, ...)
- ;
- ; Each array element is a list of access codes to be dialed in that hour.
- ; The elements of the list are separated by spaces. The first one is called
- ; on the first DIAL attempt; the second one on the second attempt, and so on.
- ;
- declare \&d[24] ; Weekdays
- declare \&w[24] ; Weekend (not used)
-
- .\&d[7] = 01040 01078 01079 ; For 07:00-08:00
- .\&d[8] = 01079 01030 01051 ; For 08:00-09:00
-
- for \%i 9 16 1 { .\&d[\%i] = 01051 010050 01030 } ; For 09:00-17:00
-
- .\&d[17] = 01066 01051 010050 ; For 17:00-18:00
- .\&d[18] = 01066 01030 01085 ; For 18-19
- .\&d[19] = 01019 01050 01066 ; For 19-20
- .\&d[20] = 01078 01015 01019 ; For 20-21
- .\&d[21] = 01011 01090 01040 ; For 21-22
-
- for \%i 22 24 1 { .\&d[\%i] = 01050 01019 01011 } ; For 22:00-07:00
- for \%i 1 6 1 { .\&d[\%i] = 01050 01019 01011 }
-
- ; In this example, we have three provider numbers in each time slot,
- ; so we set the retry limit to 4, so on the 4th try we dial without
- ; specifying a provider.
- ;
- set dial retries 4
-
- ; Since we are dialing a different number each time, there is no need to
- ; wait between dial attempts.
- ;
- set dial interval 2
-
- ; Select and insert a provider access number depending on the current hour.
- ; Note that we skip all local calls (1-9*) and all calls that go to a nearby
- ; area (08*).
- ;
- define Call-By-Call {
- ; First split the current number at 'w' or 'W' into two parts.
- ; BUT put the 'W' back in the first part!
- ; (W = "wait for secondary dialtone")
- assign d_pre \fword(\%1,1,wW)W
- assign d_num \fltrim(\%1,\m(d_pre))
- ;;; echo \%1 \m(d_pre) \m(d_num) ; (debugging)
-
- ; For local calls or near-local calls use default provider.
- ; Just return the number as given
- switch \m(d_num) {
- :[1-9]*, :08*, return \%1
- }
-
- ; Get the current hour and if we have 00:xx make it 24.
- assign hour \fword(\v(time))
- if = 0 \m(hour) assign hour 24
-
- ; Finally return the original number including the dialing code
- ; for the new provider. NOTE: A different access code is selected
- ; for each dial attempt, \v(dialcount).
- return \m(d_pre) \fword(\&d[\m(hour)],\v(dialcount)) \m(d_num)
- }
-