Ich spende mal (m)ein macro aus *1.4 dafür.
Sicherlich einfach einzubauen auch wenn es aus der Umgebung herausgerissen ist.
Ich habe es damals ausgiebig getestet, sollte es so tun.
Die preisliche Staffelung hatte ich noch nicht angefangen.
Zur Info, jede Nebenstelle hier hat ein Bit, welches die ausgehenden Anrufe regelt.
[macro-check-permission]
;prueft ob ausgehende Rufnummer erlaubt ist fuer die Nebenstelle
;ARG1=Firma
;ARG2=Nummer der Nebenstelle
;ARG3=gewaehlte Nummer
; Die "Gassen" sind basierend auf dem Dokument:
; "Nummernraum fuer das oeffentliche Telefonnetz/ISDN in Deutschland"
; der Bundesnetzagentur (RegTP) vom Stand 25.06.2007
;---------------------Kurze Uebersicht-------------------------------------
;0=nationale Gasse ;00=international Gasse
;010ZX.=CBC ;0100XX.=CBC
;0137.=TeleVotum
;015[01267][012567].=Mobilfunk
;016X.=Mobilfunk ;017X.=Mobilfunk
;0180Z.=SharedCostService
;0181XXX.=IVPN ;018NX.=geschlossene Nutzergruppen
;0190.=gibbet nicht mehr
;019[1-3]X.=Online Dienste ;019[1-4]XXX.=Online Dienste
;0NX.=Ortsvorwahlen ;032.=VoIP Vorwahl
;0700.=Vanity ;0800.=Free-Call -Phone
;0900[1359].=Premium Rate-Dienste
;116116=Sperrrufnummern
;118ZX=Auskunftdienste ;1180XX=Auskunftdienste
;Die Anschlussnummern mit 3 oder 4 Stellen sind auslaufend!
;Die Anschlussnummern beginnen immer mit 1-9...
;Alle anderen Kombinationen sind nicht frei, also ungueltig!
; Es sind auch nicht alle abgebildet, nur die wichtigsten.
exten => s,1,NoOp(${ARG1},${ARG2},${ARG3}) ;nix
exten => s,2,Macro(check-db,${ARG1},${ARG2}) ;Bits der Nebenstelle besorgen
;mit der zu waehlenden Rufnummer springen wir in den Dialplan
; in der Hoffnung das uns eine der Regeln auffaengt
; wenn nicht, dann Pech (INVALID)
exten => s,3,GoTo(,${ARG3},1) ; jump
;Regel0
;0800 darf jeder mit 0+
;R-Calls sind so auch moeglich wenn der Depp die annimmt
exten => _0800.,1,NoOp(FreeCall:${EXTEN}) ;kost nix
;Bits mit Vorgabe 0 vergleichen
exten => _0800.,2,GoToIf($[${my_bit3}>=0]?,ok,1:,nok,1) ; true=ok
;Regel1
;Ortsgespraeche & Sperrnummer brauchen 1+ als Erlaubniss
;Notrufe werden vorher durchgelassen, NICHT HIER!!!
exten => _ZXX.,1,NoOp(Ort:${EXTEN}) ;1...-9... Ortsgespraeche
;Bits mit Vorgabe 1 vergleichen
exten => _ZXX.,2,GoToIf($[${my_bit3}>=1]?,ok,1:,nok,1) ; true=ok
;116116=Sperrrufnummer
exten => 116116,1,NoOp(Sperrdienst:${EXTEN}) ;ohne fuehrendes "_" !!!
;Bits mit Vorgabe 1 vergleichen
exten => 116116,2,GoToIf($[${my_bit3}>=1]?,ok,1:,nok,1) ; true=ok
;Regel2
;Ferngespraeche brauchen 2+ als Erlaubniss
;Basierend auf der AVON Liste (
www.gidf.de)
;Fern- und VoIP-Vorwahl
exten => _0[2-8]X.,1,NoOp(Fern:${EXTEN}) ;02...-08... Ferngespraeche
exten => _0[2-8]X.,2,GoToIf($[${my_bit3}>=2]?,ok,1:,nok,1) ; true=ok
;nun der 090'er Bereich
exten => _090[6-9].,1,NoOp(Fern:${EXTEN}) ;0906-9... Ferngespraeche
exten => _090[6-9].,2,GoToIf($[${my_bit3}>=2]?,ok,1:,nok,1) ; true=ok
;immer noch der 09'er Bereich
exten => _09[1-9][0-9].,1,NoOp(Fern:${EXTEN}) ;09... Ferngespraeche
exten => _09[1-9][0-9].,2,GoToIf($[${my_bit3}>=2]?,ok,1:,nok,1) ; true=ok
;Regel3
;Mobilfunkrufnummern & CBC brauchen 3+ als Erlaubniss
;015[01267][012567].=Mobilfunk
exten => _015[01267][012567].,1,NoOp(Mobil:${EXTEN}) ;Handy
exten => _015[01267][012567].,2,GoToIf($[${my_bit3}>=3]?,ok,1:,nok,1) ; true=ok
;016X.=Mobilfunk
exten => _016X.,1,NoOp(Mobil:${EXTEN}) ;Handy
exten => _016X.,2,GoToIf($[${my_bit3}>=3]?,ok,1:,nok,1) ; true=ok
;017X.=Mobilfunk
exten => _017X.,1,NoOp(Mobil:${EXTEN}) ;Handy
exten => _017X.,2,GoToIf($[${my_bit3}>=3]?,ok,1:,nok,1) ; true=ok
;010ZX.=CBC
exten => _010ZX.,1,NoOp(CBC1:${EXTEN}) ;CBC
exten => _010ZX.,2,GoToIf($[${my_bit3}>=3]?,ok,1:,nok,1) ; true=ok
;0100XX.=CBC
exten => _0100XX.,1,NoOp(CBC2:${EXTEN}) ;CBC
exten => _0100XX.,2,GoToIf($[${my_bit3}>=3]?,ok,1:,nok,1) ; true=ok
;Regel4
;4+ als Erlaubniss ist noch zu haben
;Regel5
;Mehrwertrufnummern 0180'er & TeleVotum brauchen 5+ als Erlaubniss
;0180Z.=SharedCostService
exten => _0180Z.,1,NoOp(Mehrwert:${EXTEN}) ;0180... Mehrwert
exten => _0180Z.,2,GoToIf($[${my_bit3}>=5]?,ok,1:,nok,1) ; true=ok
;0137.=TeleVotum
exten => _0137.,1,NoOp(TeleVote:${EXTEN}) ;
exten => _0137.,2,GoToIf($[${my_bit3}>=5]?,ok,1:,nok,1) ; true=ok
;Regel6
;6+ als Erlaubniss ist noch zu haben
;Regel7
;Vanity-Rufnummern brauchen 7+ als Erlaubniss
exten => _0700.,1,NoOp(Vanity:${EXTEN}) ;Vanity-Rufnummern
exten => _0700.,2,GoToIf($[${my_bit3}>=7]?,ok,1:,nok,1) ; true=ok
;Regel8
;Auslandsgespraeche brauchen 8+ als Erlaubniss
exten => _00ZX.,1,NoOp(Ausland:${EXTEN}) ;00... Auslandsvorwahlen
exten => _00ZX.,2,GoToIf($[${my_bit3}>=8]?,ok,1:,nok,1) ; true=ok
;Regel9
;Mehrwertnummern 0900'er brauchen 9 als Erlaubniss
;0900[1359].=Premium Rate-Dienste
exten => _0900[1359].,1,NoOp(Teuer:${EXTEN}) ;0900... fuer richtig teuer
exten => _0900[1359].,2,GoToIf($[${my_bit3}=9]?,ok,1:,nok,1) ; true=ok
;hier wird der "Durchfall" ausgewertet
;also alles was vorher nicht "haengen" blieb, kommt hier rein
;zugegeben nicht schoen aber Funktionell
exten => _X.,1,NoOp(Reinfall) ;oops, einer kam durch...
exten => _X.,2,GoTo(,nok,1) ;...ist so wie verboten
;Auswertung (ok/nok)
exten => ok,1,NoOp(Anruf von ${ARG2} an ${ARG3} erlaubt) ;
exten => nok,1,NoOp(Anruf von ${ARG2} an ${ARG3} verboten) ;
;Ende Auswertung