Tipps für Rufnummernplan

Kermit23

Neuer User
Mitglied seit
31 Okt 2004
Beiträge
117
Punkte für Reaktionen
0
Punkte
16
Hallo,

nachdem meine Frau nun zwei Minuten nach Niger in Afrika angerufen hat (eine Null zu viel vorgewählt), was ich jetzt auf der Rechnung gesehen habe, habe ich erst mal alle Auslandsrufe gesperrt:

exten => _00.,1,Answer()
exten => _00.,n,Playback(ausland)
exten => _00.,n,Hangup

Jetzt würde ich aber gerne _0049 Anrufe durchlassen. Dazu möchte ich jetzt aber nicht wieder eine neue exten _0049. vor der _00. schreiben, sondern meine (ziemlich umfangreiche) default nutzen, die zum Schluss kommt

exten => _X.,1,.....

Kann man das irgendwie so schreiben, dass bei _0049. auch die _X. genutzt wird, also quasi die _00. übersprungen wird? Möchte die ungern noch mal komplett kopieren.

Die ist im übrigen so aufgebläht, weil ich mit GotoIf bekannte Nummern abprüfe und dann exten => _X.,24,Set(CALLERID(num)=anonymous) überspringe. Z.B.
exten => _X.,2,GotoIf($["${EXTEN}" = "069123456788"]?25)

Kann man vielleicht auch alle bekannten Nummern in einer Textdatei schreiben, so dass er nur die Datei irgendwie nach der Nummer auswertet (quasi ein grep Befehl)?


Danke im voraus,
Kermit
 
Kurz: ja, das geht alles.

Da Du aber Tipps haben wolltest: eventuell organisierst Du Deinen Rufnummernplan ein wenig um? Die Arbeit ist zwar momentan größer, lohnt sich aber langfristig.
 
Wie würdest Du denn den Rufnummernplan Organisieren/Strukturieren? Link?
 
Hm, vertstehe deinen Einwand mit 0049 nicht recht.
Wählst du etwa Deutschland intern immer die 0049 davor mit?
Du hast doch mit _00. eine Regel für das Ausland.
Darunter fällt auch 0049..., na und?
Trotzdem kannst du doch 069... für z.B. F-furt in D wählen;
ohne 0049 vorweg geht das doch, da greift die AuslandsRegel nicht.
AmKopfKratz
 
Wie würdest Du denn den Rufnummernplan Organisieren/Strukturieren? Link?

Ich habe einen Kontext lcr. Dort regle ich global über welchen Provider welches Ziel geroutet wird.
Alles was in lcr nicht geregelt ist, geht in den Kontext verboten. Dort erfolgt eine Ansage und es wird aufgelegt.

Das Vorgehen hat den Nachteil, dass ich ein nicht geregeltes Ziel nicht einfach anrufen kann, aber es bietet mir die Sicherheit vor Kostenfallen. Und ein neuer Eintrag ist in ein paar Sekunden gemacht.

Wenn du öfter Exoten hast, kannst du dir ja eine Spezialvorwahl generieren, über die du alles wählen kannst, bist aber immer noch vor dem Verwählen geschützt.
 
Wie würdest Du denn den Rufnummernplan Organisieren/Strukturieren? Link?

Da gibt es viele Möglichkeiten:
  1. Du machst ein generelles Pattern und machst die ganze Überprüfungsarbeit in einem AGI.Skript (oder einem Systemaufruf, z.B. grep). Dann kannst Du Deine "zugelassnen Nummern" wirklich in eine Textdatei schreiben. Ob das aber schick und für Dich machbar ist, sei dahingestellt.
  2. Du machst ordentliche Patterns. Da solltest Du aber selbst wissen, was Du wie ausgewertet haben möchstest.
  3. Du machst es, wie kombjuder vorgeschlagen hat.

Was das Schreiben eines Wählplans angeht, hat da jeder seinen Stil, wie seine Handschrift. Deshalb tue ich mich auch schwer, Dir da etwas Konkretes vorzugeben. Links allgemeiner Art findest Du im Forum zu Hauf, Links spezieller Art wüsste ich nicht, welche ich Dir angeben soll. Mir hat beim Schreiben intensives Nachdenken geholfen, zusammen mit Probieren und dann im Asterisk-Buch (das wäre ein Kink allgemeiner Art) nochmal überprüfen.

Im Übrigen habe ich mir dieselbe Frage wie Numsi gestellt: warum Du 0049 für deutsche Gespräche wählst. (Idee: Du bist gar nicht in Deutschland...? Aber das kann ich nicht wissen.)
 
Also ich mache es ja so ähnlich wie kombjuder. Ich nutze zwei VOIP-Anbieter. Sipgate nutze ich für Mobilnetze und Servicenummern (vorher nur Mobil, aber da mir GMX für eine Servicenummer mal mehrere Stunden berechnet hat, wo der erste Anruf abbrach und tatsächlich nur wenige Sekunden dauerte):
exten => _01[5-8].,n,Dial(SIP/${EXTEN}@sipgate,120,tT)

und den Rest habe ich über GMX geroutet, wo ich auch die Nummernprüfung mache:

exten => _X.,25,Dial(SIP/${EXTEN}@gmx,120,tT)


Davor habe ich jetzt einige sperren eingebaut (wie _00 _0900). Wie kann ich denn sonst regeln, dass gewöhnlich Festnetznummern nur über GMX geroutet werden? Also ich meine, dann müsste ich ja eine positive Bewertung aufstellen und das ist schwierig bzw. umfangreich? Dann müsste ich je eine exten aufstellen für
_01[0-4]
_019
_0[2-8]
_09[1-9]

Oder kann man das irgendwie in einem Pattern kombinieren?

Vielen Dank,
Kermit

Achja: Die 0049 möchte ich vor allem für Telefonbucheinträge meiner Telefonanlage. Aber auch so möchte ich gerne, dass es möglich ist. Wozu weiß ich selber nicht genau*g*. Aus Zeiten, als ich noch einen Festnetzanschluss hatte, brachte es vielleicht etwas, um ggf ein Gassenbesetzt zu umgehen. Seit dem die Vermittlungen nahezu alle auf digital umgestellt sind, gibt es sowas aber wahrscheinlich gar nicht mehr...
 
Bin gerade unter Zeitdruck, weswegen ich mich mit Deinen Patterns nicht intensiv beschäftigen kann.

Frage: Warum änderst Du Dein "Gute Nummer"-Pattern nicht ab, so dass es lautet:
Code:
exten => .X.,1(LABELNAME),...

Oben, über Deinem _00-Verbots-Pattern fügst Du dann ein:
Code:
exten => _0049X.,1,Goto(LABELNAME)

Um die lustigen Sprünge zu umgehen könntest Du auch die "Gut"-Behandlung in einen separaten Kontext auslagen (oder meinetwegen zwei: einer für sipgate, einer für GMX). Ein weiterer Kontext wäre für die abzulehnenden Nummern. Per Pattern-Matching könntest Du dann in den jeweiligen Kontext springen. Vorteil: die Gut- und die Schlecht-Nummern sind an einer Stelle, die aufgeblähte Behandlung (=Abarbeitung des Wählplans) in anderen Kontexten.

Beispiel (ungetestet, nur mal so eben hingeschrieben, beachte die Umschreibung im 0049-Fall):
Code:
[Kontext_von_intern_nach_extern]
exten => _0049.,1,Goto(Gut,0${EXTEN:4},1)
exten => _01[0-4].,1,Goto(Schlecht,${EXTEN},1)
exten => _019.,1,Goto(Schlecht,${EXTEN},1)
exten => _0[2-8].,1,Goto(Schlecht,${EXTEN},1)
exten => _09[1-9].,1,Goto(Schlecht,${EXTEN},1)

exten => .X.,1,Goto(Gut,${EXTEN},1)

[Gut]
exten => _01[5-8].,1,Dial(SIP/${EXTEN}@sipgate,120,tT)
exten => _X.,1,Dial(SIP/${EXTEN}@gmx,120,tT)

[Schlecht]
exten => _X.,1,Answer()
exten => _X.,n,Playback(ausland)
exten => _X.,n,Hangup
 
Code:
[Kontext_von_intern_nach_extern]

exten => _09[1-9].,1,Goto(Schlecht,${EXTEN},1)

exten => .X.,1,Goto(Gut,${EXTEN},1)

[/QUOTE]

Die zwei machen aber nicht was sie sollen. 
Der erste muß so aussehen:

09ZX.,1,Goto(Gut,${EXTEN},1)
090[6-9].,1,Goto(Gut,${EXTEN},1) ;Es gibt die Vorwahlen 0906-9

die zweite funktioniert nicht. Ein Pattern, der keine komplette Nummer ist, muss immer mit _ anfangen.

exten => _Z.,1,Goto(Gut,${EXTEN},1); alles was nicht mit 0 anfängt

zudem fehlt als erste Zeile in dem Kontext
include => Schlecht

sonst wird ein Anruf nach 00 als Fehler abgebrochen.
 
Dank an Dich, kombjuder, fürs Korrekturlesen. Ich habe es einfach mal so hingeschrieben.

Zu Deinen Anmerkungen:
ad 1) da hatte ich einfach das von Kermit23 gelieferte Pattern übernommen. Ich sah Deinen Einwand auch, aber vielleicht will er ja gar nicht nach 090X telefonieren?

ad 2) mit dem Pattern .X. geht die volle Punktzahl an Dich. Fehler von mir.

ad 3) 00 soll in der Tat einen Fehler liefern - er wollte ja Auslandsgespräche sperren. Vielleicht sollte dann in den initialen Kontext noch die Zeile
Code:
exten => _00.,1,Goto(Schlecht,${EXTEN},1)
rein, dann kann man sich das include sparen. Funktionieren würde es selbstverständlich auch mit include, aber wenn ich schon in einem Kontext die Patterns nach gut und schlecht sortiere, hielte ich es aus Lesbarkeitsgründen mit der expliziten _00.-Zeile für besser.

@Kermit23: Jetzt solltest Du aber hinreichend Anregungen und Tipps haben, oder?
 
rein, dann kann man sich das include sparen.

Das include hat aber den Vorteil, es fängt alles was nicht geregelt ist, also auch ein 010 oder 012 oder ein 000.

Wenn du alleine telefonierst, ist das ja nicht schlimm, wenn der Anruf einfach nicht funktioniert, aber wenn das deiner Frau passiert ...
 
Ja, da hab ich in der Eile eine Null vergessen:
_09[1-9] -> _090[1-9]

Oder verbergen sich da auch noch teure Servicenummern hinter, dass ihr _090[6-9] vorschlagt?

Über die Vorschläge für den Rufnummernplan werde ich mir noch mal ausführlich Gedanken machen. Vielen Dank erstmal dafür!
 
J
Oder verbergen sich da auch noch teure Servicenummern hinter, dass ihr _090[6-9] vorschlagt?

0901 ist als Erweiterung für 0900 vorgesehen, 2-5 ist nicht vergeben, damit ist ein Anruf an diese Rufnummern sicher fehlerhaft.
 
Der kombjuder isch doch a Clerverle, oder? (keine Ironie-Tags!)

Im Ernst: Danke für die InNformationen. Zu Deinem früheren Einwand mit dem include: dann würde es genügen, im initialen Kontext von Kermit die "guten" Nummern rauszusuchen und den Rest über das include, das die "schlechten" behandelt, behandeln zu lassen. Wenn das stimmt, dann könnte der Wählplan wie folgt aussehen:

Code:
[Kontext_von_intern_nach_extern]
include => Schlecht ; der "Catch all"-Fall

exten => _0049.,1,Goto(Gut,0${EXTEN:4},1) ; falls mal 0049 davor geaehlt wurde
exten => _090[6-9].,1,Goto(Gut,${EXTEN},1) ;Es gibt die Vorwahlen 0906-9
exten => _09ZX.,1,Goto(Gut,${EXTEN},1) ; Spezielles fuer die Vorwahlen aus Franken
exten => _0Z.,1,Goto(Gut,${EXTEN},1) ; fuer Anrufe auf Handys und Ferngespraeche, falls nicht 09Z...
exten => _Z.,1,Goto(Gut,${EXTEN},1) ; fuer das lokale Festnetz

[Gut]
exten => _01[5-8].,1,Dial(SIP/${EXTEN}@sipgate,120,tT)
exten => _X.,1,Dial(SIP/${EXTEN}@gmx,120,tT)

[Schlecht]
exten => _X.,1,Answer()
exten => _X.,n,Playback(ausland)
exten => _X.,n,Hangup

Damit wären die "Guten" benannt und alle anderen würden durch das include als "Schlechte" behandelt. Wenn ich jetzt keinen Tippelfehler gemacht habe, dann hätten wir's, glaube ich. Oder, Kermit23?
 
[Gut]
exten => _01[5-8].,1,Dial(SIP/${EXTEN}@sipgate,120,tT)
exten => _X.,1,Dial(SIP/${EXTEN}@gmx,120,tT)

Damit bekommst du aber vmtl. keinen Sipgate-Anruf hin, da 01 Bestandteil von X. Mach mal statt dessen XXX, dann sollte es gehen.

01 sollte man etwas mehr zerlegen. Ich weiss jetzt nicht, was alles gmx an 01ern zulässt, aber 010 wird nicht funktionieren, 013 kann teuer werden bis 1¤ pro Anruf, bei 0180 schauen ob sigate nicht billiger ist, als gmx. Das gleiche gilt für 0700 und 0800.
 
Code:
[Gut]
exten => _01[5-8].,1,Dial(SIP/${EXTEN}@sipgate,120,tT)
exten => _X.,1,Dial(SIP/${EXTEN}@gmx,120,tT)
Damit bekommst du aber vmtl. keinen Sipgate-Anruf hin, da 01 Bestandteil von X.

@kombjuder: da das Pattern 01[5-8]. spezifischer ist als _X. sollte es doch "gewinnen", falls es zutrifft. Oder habe ich da etwas übersehen?
 
Oder habe ich da etwas übersehen?

Probiere es aus. Es kann sein, dass die Asteriskroutinen in den aktuelleren Versionen verbessert wurden. Früher war das immer ein wenig ein Lotteriespiel.

Es kommt darauf an, wie Asterisk das gerade einsortiert. Theoretisch hast du recht, aber _X. ist sehr global und wird beim ersten Durchlauf gefunden, ohne dass das nachfolgende überprüft wird und damit das speziellere erkannt wird.
 
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
 
@anhalter42: Vielen Dank! So funktioniert's prima!
Auch noch mal danke an alle anderen für die Tipps und Ratschläge
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.