Dial wird zu früh ausgeführt

exciler

Neuer User
Mitglied seit
4 Nov 2007
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich hab hier ein Problem, wo ich nicht weiß, ob es wirklich mit dem Dialplan zusammen hängt, oder ob es andere Gründe hat, aber ich hab es mal hier reingestellt.

Ich habe analoge Telefone über eine ISDN-TK-Anlage und ein USB-HFC-Adapter im NT-Mode am Asterisk angeschlossen. Außerdem eine Fritz PCI dann am PSTN. Beide ISDN-Karten laufen über mISDN. Also insgesamt wie folgt:

Analog-Telefon -> TK-Anlage -> HFC-S-USB -> ASTERISK -> Fritz PCI -> PSTN.

Wenn ich nun mit meinem analogen Telefon eine nummer wähle wie 0173XXXXX bekomme ich leider folgendes Problem:

Bereits nach 01 wird Dial() ausgeführt, obwohl ich beispielsweise folgende extensions definiert habe.

exten => _01[5-7],1,Dial(SIP/XXX)
exten => _X.,1,Dial(mISDN/1/XXX)

Also bei 01 würde ja die _X. extension passen.
Wenn ich aber mit meinem analogen Telefon die 0173XXX wähle, dann würde ja nach der Pattern-Matching-Regel das erste Pattern besser passen als das zweite und damit würde über SIP gewählt. Das funktioniert aber nicht, weil ja bereits nach 01 schon über mISDN gewählt wird. Warum? Es muss doch eigentlich erstmal gewartet werden, was denn nach der 01 noch kommt, oder wo liegt mein Denkfehler?

Ich habe mir schon überlegt, dass man das Problem ja lösen könnte, indem man die zweite extension ersetzt durch:

exten => _XX.,1,Dial(mISDN/1/XXX)

Damit würde das Pattern erst matchen, nachdem die dritte Ziffer gewählt ist und dann das richtige ausgewählt. Aber dies kann ja auch nicht die Lösung sein, denn mal extrem, wenn ich ein recht spezielles Pattern habe für das ich mind. 5 Ziffern brauche (z.B. eine bestimmte Vorwahl) dann kann ich keine 4stelligen Ortsrufnummern mehr wählen, weil ja keiner der Pattern passen würde.

Wie löst man diesen Fall denn professionell in dem Dialplan, oder liegt der Fehler sogar ganz woanders, weil er eben nicht auf die komplette Rufnr. wartet?

Grüße
Andi
 
Also bei 01 würde ja die _X. extension passen.
Wenn ich aber mit meinem analogen Telefon die 0173XXX wähle, dann würde ja nach der Pattern-Matching-Regel das erste Pattern besser passen als das zweite und damit würde über SIP gewählt.

Wie kommst Du denn auf das dünne Brett? Das erste Pattern ist exakt ausschließlich für folgende drei Rufnummern gültig.

015
016
017

Code:
exten => _01[5-7],1,Dial(SIP/XXX)

Da feht nämlich ein Punkt nach der eckigen Klammer :wink: Außerdem solltest Du besser folgendes verwenden:


Code:
exten => _01[5-7][COLOR="Red"]X.[/COLOR],1,Dial(SIP/XXX)
 
Hallo exciler

ich denke, du findest die Antwort zu deinem Problem in der Funktion WaitForDigits. Wenn du das als Suchbegriff eingibst, findest du mehr Informationen.

Gruss,
Sachmet.
 
es geht doch hier gar nicht um die EIngabe und Verarbeitung von DTMF Tönen sondern um die Abarbeitung von Rufnummern - da hilft kein Wait weiter :confused:
 
Er wählt von Analog->ISDN->mISDN->Asterisk. Ohne WaitForDigits wählt mISDN schon nach zwei Ziffern und wartet nicht auf mehr. In diesem Forum taucht dieses Problem mehrfach auf.

Wir werden hoffentlich mitkriegen, was es dann war.

Gruss,
Sachmet.
 
sorry, hatte überlesen das er mISDN hat

bei HFC-S denke ich immer an bristuff
 
ich bin begeistert...

Also zunächst mal bin ich begeistert wie schnell ich hier soviel hilfe bekommen hab. Wie schon in einem anderen Thread erwähnt, hab ich hier im Forum schon ernorm viel Hilfe über die Suche gefunden. Schonmal Vielen Dank dafür.

bei
exten => _01[5-7] ...
fehlte natürlich der . dahinter, der ist aber nur beim abtippen abhanden gekommen.
Ich mache mich mal anhand eurer Tipps etwas schlau und melde mich dann nochmal.

Grüße
Andi
 
bin schlauer :)

Okay, also nach etwas Lesen bin ich auch der Meinung, dass waitfordigits mein Problem lösen wird, da ich damit warte bis alle Ziffern gewählt sind und erst dann erst das pattern-matching beginnt.

Mir ist nur noch nicht klar, wie ich das jetzt am besten anstelle, dass bei allen Wählversuchen über mISDN erst waitfordigits aufgerufen wird und dann mit der passenden extension fortgefahren wird.

wenn ich

exten => _X.,1,Waitfordigits(1000)

mache, dann wird zwar immer waitfordigits aufgerufen, aber wie bringe ich ihn dazu, dass er anschließend die passende exten aufruft? in ${EXTEN} stehen trotzdem nur die ersten beiden ziffern drin.

Grüße
Andi
 
Das müsste folgendermaßen funktionieren:
In misdn.conf definierst du einen den Incoming-Context für den entsprechenden Port/Karte, z.B. "myphones-in".

dann in der extenstions.conf (ich arbeite mit ael, daher bitte auf Syntaxfehler prüfen):
Code:
[myphones-in]
[FONT=monospace]exten => _X.,1,Waitfordigits(4000)[/FONT]
[FONT=monospace]exten => _X.,2,Goto(mycontext|${EXTEN}|1)

[mycontext]
[/FONT]exten => _01[5-7],1,Dial(SIP/${EXTEN})
exten => _X.,1,Dial(mISDN/1/${EXTEN})
Gruss,
Sachmet.
 
Kostenlos!

Statistik des Forums

Themen
248,855
Beiträge
2,302,948
Mitglieder
378,504
Neuestes Mitglied
Hallo61Hallo