Asterisk simulator Nederlandse telefooncentrale (voor 1995)

Het leek me wel leuk om een Nederlandse telefooncentrale van voor 1995 na te doen, met de juiste tonen. Dat viel in de praktijk toch even tegen: tonen correct aan en uit zetten is wat lastiger dan gedacht. Maar uiteindelijk is het me toch gelukt. Ik gebruik de simulator om Collectors' Net nummers te bellen. Het nadeel daarvan is dat er niet zo heel veel Nederlandse Collectors' Net nummers zijn. Maar de ervaring blijft grappig. Omdat ik nogal eens gebruik maak van de Asterisk functie WaitExten heb ik relatief veel contexten nodig: je kunt per context maar een keer deze functie gebruiken. En in iedere context moet ik controleren op ongeldige keuzes of een timeout.

De code

Het geheel wordt aangeroepen door te springen naar de context 'nederlands'. In mijn dialplan voor gebruikers die interne scripts mogen gebruiken heb ik dus staan:
exten => 8020,1,Answer
exten => 8020,n,Wait(1)
exten => 8020,n,Goto(nederlands,s,1)
En in nederlands gaan we de originele kiestoon afspelen, en daarna begint het...
[nederlands]

; eerste kiestoon
exten => s,1,PlayTones(150)
exten => s,n,WaitExten(20)

; 0: stop kiestoon, ga netnummer vragen
exten => 0,1,StopPlayTones
exten => 0,n,Goto(nederlands-wilnet,s,1)

; ander cijfer: stop kiestoon en onthou eerste cijfer
exten => _Z,1,StopPlayTones
exten => _Z,n,Set(FIRSTDIGIT=${EXTEN})
exten => _Z,n,Goto(nederlands-wilrestabo,s,1)

; timeout/invalid: sit tone
exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)
Hier vraag ik maar een cijfer (een 0 of een 1-9) zodat ik na ontvangst van dit cijfer de kiestoon weer uit kan zetten en afhankelijk van het cijfer verder ga.

Eerst de optie dat er een netnummer gaat komen. Dan verzamel ik cijfers van het netnummer en als die er zijn ga ik over naar een functie om de cijfers van het abonneenummer te vragen. Eerst wilde ik dat met een macro doen die het aantal gewenste cijfers verwerkte maar WaitExten werkt weer niet goed in een macro functie.

09 is makkelijk (buitenland). Dan hoef ik geen moeite meer te doen voor tonen...

[nederlands-wilnet]

; de rest van het netnummer
exten => s,1,WaitExten(20)

; bekende netnummers: hoeveel cijfers wil ik nog
exten => 2200,1,Set(NETNUMMER=${EXTEN})
exten => 2200,n,Goto(nederlands-wilabonanet5,s,1)
exten => 3402,1,Set(NETNUMMER=${EXTEN})
exten => 3402,n,Goto(nederlands-wilabonanet5,s,1)
exten => 3494,1,Set(NETNUMMER=${EXTEN})
exten => 3494,n,Goto(nederlands-wilabonanet5,s,1)
exten => 5712,1,Set(NETNUMMER=${EXTEN})
exten => 5712,n,Goto(nederlands-wilabonanet4,s,1)
; voorbeeld korter netnummer
exten => 78,1,Set(NETNUMMER=${EXTEN})
exten => 78,n,Goto(nederlands-wilabonanet6,s,1)
; (tijd voor een database lookup?)

; buitenland: 0 eraf, rest landnummer+net+abo
exten => _9X.,1,Macro(dialcnet,+${EXTEN:1})

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

Dus moet ik alle varianten uitprogrammeren. Ik heb nog even geen rekening gehouden met netnummer gebieden met variabele lengte abonnee nummer. Die waren er toen wel, in ieder geval Hilversum. Maar die zijn er nog niet binnen Collectors' Net.
[nederlands-wilabonanet4]

exten => s,1,PlayTones(450)
exten => s,n,WaitExten(20)
exten => _X,1,,StopPlayTones
exten => _X,n,Set(FIRSTDIGIT=${EXTEN})
exten => _X,n,,Goto(nederlands-restabonanet4,s,1)

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

[nederlands-restabonanet4]

; een cijfer binnen, rest vragen

exten => s,1,WaitExten(20)
exten => _XXX,1,Macro(dialcnet,+31${NETNUMMER}${FIRSTDIGIT}${EXTEN})
; NETNUMMER is al zonder 0 omdat die eerder opgegeten is

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

[nederlands-wilabonanet5]

exten => s,1,PlayTones(450)
exten => s,n,WaitExten(20)
exten => _X,1,StopPlayTones
exten => _X,n,Set(FIRSTDIGIT=${EXTEN})
exten => _X,n,Goto(nederlands-restabonanet5,s,1)

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

[nederlands-restabonanet5]

; een cijfer binnen, rest vragen

exten => s,1,WaitExten(20)
exten => _XXXX,1,Macro(dialcnet,+31${NETNUMMER}${FIRSTDIGIT}${EXTEN})
; NETNUMMER is al zonder 0 omdat die eerder opgegeten is

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

[nederlands-wilabonanet6]

exten => s,1,PlayTones(450)
exten => s,n,WaitExten(20)
exten => _X,1,StopPlayTones
exten => _X,n,Set(FIRSTDIGIT=${EXTEN})
exten => _X,n,Goto(nederlands-restabonanet6,s,1)

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

[nederlands-restabonanet6]

; een cijfer binnen, rest vragen

exten => s,1,WaitExten(20)
exten => _XXXXX,1,Macro(dialcnet,+31${NETNUMMER}${FIRSTDIGIT}${EXTEN})
; NETNUMMER is al zonder 0 omdat die eerder opgegeten is

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)
De andere situatie is dat ik binnen mijn 'eigen' Collectors' Net netnummer gebied blijf. Ik routeer wel via een enum lookup zodat het zeker goed gaat.
[nederlands-wilrestabo]

; dit is 'Nieuwegein', nog 4 cijfers na firstdigit
exten => s,1,WaitExten(20)
exten => _XXXX,1,Macro(dialcnet,+313402${FIRSTDIGIT}${EXTEN})

exten => t,1,PlayTones(info)
exten => t,n,Wait(20)
exten => i,1,PlayTones(info)
exten => i,n,Wait(20)

Creative Commons License
Op dit werk is een Creative Commons Licentie van toepassing.
Commentaar over en updates voor deze pagina zijn welkom. E-mail is de beste manier van contact.
Koos van den Hout (koos+website@idefix.net)
Other webprojects: Camp Wireless The Virtual Bookcase