Pattern matching bei CALLTHROUGH

dynamic

Aktives Mitglied
Mitglied seit
1 Apr 2006
Beiträge
1,154
Punkte für Reaktionen
0
Punkte
36
Ist es möglich exten Pattern Matching gegen den Inhalt einer Variable durchzuführen ?

Hintergrund:
Ich nutze callthrough ohne DISA. Die zu wählende Nummer wird über folgende Schleife ermittelt und via "#" abgeschlossen, wonach die Nummer in $NR gewählt wird:
Code:
[callthrough]
exten => s,1,Set(NR=)
exten => s,2,Background(vm-enter-num-to-call)
exten => s,3,Set(TIMEOUT(response)=30)
exten => s,4,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,2,Goto(s,4)
exten => *,1,Goto(s,1)
exten => #,1,NoOp(${NR})
exten => #,2,Playback(vm-dialout)
exten => #,3,Dial(CAPI/ISDN1/${NR},55,bd)
Ich möchte aber das Rauswählen z.B. auf Festnetznummern entsprechend Pattern "_0[2-4]X." einschränken, was man normalerweise via folgender exten erreichen würde:
Code:
exten => "_0[2-4]X.,1,Dial(CAPI/ISDN1/$NR,55,bd)
aber meine EXTEN ist ja auf "#" gesetzt ist ( letzte gewählte "Nummer" ), weshalb obige exten nichts nützt.
Über welchen Weg kann ich denn gegen eine dynamisch ermittelte Extension matchen, bzw. ist dies überhaupt möglich ?

Gruß
dynamic
 
Einfach nach #,2 per GotoIf() oder ExecIf() die Variable NR auf "01" zu Beginn prüfen, wenn ja: Playback(beeperr) und kein Dial()
 
Die Idee, das ganze mit "IF" Abfragen zu lösen hatte ich auch, aber:
1) z.B. einfach auf != "01" Beginn zu prüfen reicht nicht, da man ja 00491xxxx wählen könnte, daher wären mehrere solche Abfragen nötig
2) eigentlich die Liste der Zulässigen Nummern größer ist und ich hier der Einfachheit halber nur den _0[2-4]X. Kreis genommen habe

Mit IF Abfragen wäre das sicherlich über Umwege möglich aber halt nicht so elegent und sehr Pflegeaufwendig.

Gibt es denn keine Möglichkeit EXTEN vorzubelegen oder einen anderen Weg ?
 
Dein Problem hat mit Asterisk eigentlich gar nichts zu tun, Dir geht es eher darum die perfekte Liste der verbotenen Vor- und Vorvorwahlen zu erhaschen. ;-)

Zu Deiner Frage: Ersetze Dial(CAPI...) durch Dial(Local/.../n) und verzweige so wieder in den dialplan. Allerdings wird dies Deine CDRs etwas verkomplizieren.
 
Dein Problem hat mit Asterisk eigentlich gar nichts zu tun, Dir geht es eher darum die perfekte Liste der verbotenen Vor- und Vorvorwahlen zu erhaschen.
Was für verbotene Vor- und Vorvorwahlen ? Es geht nur um gewisse Sicherheitsaspekte, um für mich kostenpflichtige Vorwahlen auch via Callthrough zu sperren :rolleyes:
Ersetze Dial(CAPI...) durch Dial(Local/.../n) und verzweige so wieder in den dialplan.
Hast Du mal ein ein Beispiel ?
 
Zuletzt bearbeitet:
Oder so (schöner und einfacher)

Benutze:
Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])
und Goto

[callthrough]
exten => s,1,Read(NR|vm-enter-num-to-call|||10|30)
; Der read wartet 30 sekunden auf eine eingabe (auch nach jeder eingabe)
; sollte aber die erste eingabe nicht nach 30 sekunden erfolgt sein
; ist NR ja leer, in diesem Fall fängt er nochmal an (attempt = 10)
; wenn nach 10*30 sek immer noch nix eingegeben wurde, steigt
; read aus und die folgende Abfrage killt das ganze
exten => s,n,ExecIF($[ ${LEN(${NR})} = 0 ]|Hangup)
exten => s,n,NoOp(${NR})
exten => s,n,Playback(vm-dialout)
exten => s,n,Goto(${NR},1)
exten => _0[2-4]X.,1,Dial(CAPI/ISDN1/$NR,55,bd)
;...
; weitere pattern matches...

Achja, Read interpretiert die # als Abschlusszeichen und nicht als Teil der
Variable, also so wie du es willst.
 
Zuletzt bearbeitet:
@jobisoft
Das ist eine Lösung ganz nach meinem Geschmack :-)

Ich finde, der Casus Knacktus dabei ist die unscheinbare Zeile
Code:
exten => s,n,Goto(${NR},1)
Thanks!

Gruss
dynamic
 
Kostenlos!

Statistik des Forums

Themen
248,888
Beiträge
2,303,994
Mitglieder
378,568
Neuestes Mitglied
me2k