2016-10-21 3 views
0

Ich habe einen Asterisk Server mit einem (meist) funktionierenden Dialplan laufen.Asterisk - Wie man mit mehrstelligen Eingängen arbeitet

Ich habe dieses Szenario:

An einem Punkt hört der Anrufer „eine beliebige Zahl eingeben“. Er gibt dann eine Nummer auf seinem Telefon ein.

Wenn er 0 tritt i im Wählplan ‚Context0‘ springen möchten. Wenn er eine Zahl von 1 bis 10000 eingibt, möchte ich zu 'Context1' springen. Wenn die eingegebene Zahl größer als 10000 ist, möchte ich zu 'Context2' springen.

Der Kontext, die dieses Szenario behandelt sieht wie folgt aus:

[Context] 
exten => 100,1,Background(/var/lib/asterisk/sounds/sound) 

exten => 0,1,Goto(Context0,100,1) 
exten => _Z,1,Goto(Context1,100,1) 
exten => _ZX,1,Goto(Context1,100,1) 
exten => _ZXX,1,Goto(Context1,100,1) 
exten => _ZXXX,1,Goto(Context1,100,1) 
exten => 10000,1,Goto(Context1,100,1) 

exten => i,1,Goto(Context2,100,1) 

Dies funktioniert, wenn ich nur 5 Ziffern eingeben. Wenn ich z. 123456, dann nach 12345 gibt es die 'i-Erweiterung' ein, geht zu Context2 und wendet in diesem Kontext die letzte Ziffer (in diesem Fall Nummer 6) an.

Also meine Frage ist, wie kann ich die dialplan Prüfung machen, wenn der Eingang größer als 10000 ist, und wenn sie größer Sprung zu Kontext2?

Ich hoffe, dass Sie mein Problem verstehen, ist mein Englisch nicht so gut .. :)

Vielen Dank und viele Grüße

Antwort

0

Sie Read Funktion nutzen zu können und tun, was Sie wollen, überprüft:

[Context] 
exten => 100,1,Read(mynumber,/var/lib/asterisk/sounds/sound,10,skip,1,5) 
same => n,GotoIf($[${mynumber} = 0]?Context0,100,1) 
same => n,GotoIf($[${mynumber} <= 10000]?Context1,100,1:Context2,100,1) 

Der obige Code wurde nicht getestet und erfordert möglicherweise einige Optimierungen.

+0

Aber wenn ich dies mit Read versuche, legt es immer auf.In den Protokollen sehe ich immer das: [Oct 24 11:34:57] WARNUNG [1356] [C-00000000] pbx.c: Keine Anwendung 'Lesen' für die Erweiterung (Kontext, s, 1) ich auch versuchte etwas so einfaches: [link] (https://wiki.asterisk.org/wiki/display/AST/The+Read+Application) Aber es gibt mir den gleichen Fehler ... Muss ich etwas konfigurieren dass ich die Anwendung 'Lesen' benutzen kann? – simplex

+0

@simplex Stellen Sie sicher, dass 'app_read.so' geladen ist. Wenn Ihr Stern nicht so konfiguriert ist, dass er automatisch geladen wird, können Sie ihn manuell mit dem Befehl 'module load app_read.so' laden und den Test erneut ausführen. –

0

Sie können nur die Inter-digit Timeout müssen oder drücken Pfund (#), wenn Sie fertig. Das Timeout kann unter Verwendung eingestellt werden:

Set(TIMEOUT(digit)=5) 

oder auf ältere Versionen (< 1.2):

DigitTimeout(5) 

Es soll vor dem Hintergrund cmd im Dialplan eingestellt werden.

0

123456 ist ungültig, da Ihre Muster keine 6-stelligen Zahlen zulassen. (Ihr Muster nicht erlauben, für 5-stellige Zahlen mit Ausnahme von 10000 entweder.)

würde ich vorschlagen, Sie überdenken, was Sie tun und warum.

Meinst du wirklich "irgendeine Nummer?" Was passiert, wenn ich versuche, 100.000 Ziffern einzugeben?

Wäre es möglich, „Geben Sie eine beliebige Zahl“ ändern „um x Ziffern durch die Raute-Taste gefolgt Geben Sie auf?“

Sie könnten dann mit der ‚read()‘ Anwendung und ein paar ‚gotoif() s‘ Route der Anrufer zu den verschiedenen Kontexten.

Vielleicht, wenn Sie erklären, was Sie erreichen möchten, könnte eine bessere Methode vorgeschlagen werden.