Hallo Günter,
Ich habe jetzt mal in den Quellcode von DISA geschaut, der liegt in /usr/src/asterisk/asterisk/apps/app_disa.c , die Timeouts sind dort hardgecoded drin, deswegen nutzt auch kein ResponseTimeout und/oder DigitTimeout etwas im context. Die 2 Werte sind:
-int firstdigittimeout = 20000; /* 20 seconds first digit timeout */
-int digittimeout = 10000; /* 10 seconds subsequent digit timeout */
+static int firstdigittimeout = 20000; /* 20 seconds first digit timeout */
+static int digittimeout = 10000; /* 10 seconds subsequent digit timeout */
Was soviel heißt wie: Zur Eingabe der ersten Zahl hast Du theoretisch 20 Sekunden Zeit, danach, zwischen den einzelnen Zahlen der Rufnummer immer 10 Sekunden. Man könnte jetzt hingehen und den Wert für firstdigittimeout auf z.b. 60000 (enstrpicht 60 Sekunden) setzen in app_disa.c und dann Asterisk neu kompilieren, dann hättest Du zukünftig 60 Sekunden Zeit bis zur Eingabe der ersten Zahl.
Als ich das erste Mal DISA zwecks callthrough benutzte, fiel mir auch auf, dass die Zeit für die Eingabe der ersten Ziffer zu kurz bemessen war, das kam bei mir dadurch, dass DISA schon ausgeführt wurde, bevor ich den Rückruf auf das Handy überhaupt erhalten hatte - die Zeit (20 Sekunden bis zum timeout) also schon tickte, bevor ich überhaupt verbunden war.
Durch Einbau des ersten Wait(15) in [dialout] habe ich das verhindert. Er springt also erst nach 15 Sekunden in DISA, was ungefähr der Zeit entspricht bis der Rückruf auf mein Handy erfolgt ist und die Verbindung steht. So habe ich immer ungefähr 20 Sekunden bis ich die erste Zahl eingeben muß. Zwischen den weiteren Zahlen dann aber natürlich nur immer 10 Sekunden.
Ohne Änderung des Quellcodes und Neukompilierung von Asterisk läßt sich das nicht ändern. Wenn Du die 10 Sekunden Eingabemöglichkeit zwischen den einzelnen Zahlen der Nummer auch erhöhst auf z.B. 20 Sekunden (digittimeout = 20000), dann wird es allerdings auch 20 Sekunden dauern, bis Asterisk loswählt, weil er natürlich 20 Sekunden wartet, ob da evtl. noch eine Zahl von Dir kommt.
So, jetzt aber zu einer anderen möglichen Lösung. Statt mit DISA kann man auch mit der Funktion WaitExten arbeiten, dann könnte [dialout] folgendermassen aussehen:
Code:
[dialout]
exten => 666,1,Answer
exten => 666,2,SetVar(NR=)
exten => 666,3,ResponseTimeout(60)
exten => 666,4,WaitExten
exten => _X,1,SetVar(NR=${NR}${EXTEN})
exten => _X,2,Goto(666,3)
exten => *,1,Goto(666,2)
exten => #,1,Dial(SIP/${NR}@gmx,60,tr)
exten => t,1,Hangup
exten => h,1,Hangup
ACHTUNG: Das Verhalten ist hier anders als bei der DISA Methode, Du mußt nach Eingabe aller Zahlen der Rufnummer die # Taste drücken, erst dann wählt Asterisk los. Die * Taste kannst Du nutzen um alle bisherigen Zahlen Eingaben zu löschen und die Nummer von vorne einzugeben.
Wenn diese Methode klappt, dann ist der context [dialout_now] überflüssig.
Gruß,
Tin