DIAL ist durchgeführt, der Rest wird nicht verarbeitet sondern "gespawned"

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,844
Punkte für Reaktionen
0
Punkte
36
Hallo Zusammen,

ich habe ein einfaches GotoIf gesetzt um mehrere IAXModem´s anzusprechen, wird das erste angesprochen wird ein Wert um 1 erhöht, bei einem neuen anruf wird nachgesehen wie hoch der wert steht und das nächste modem angesprochen, ich möchte so gerne 3 iaxmodem´s laufen lassen - das funktioniert auch bisher.

Mein Problem ist das - wenn der IAX2-Dial aus irgendeinem Grund endet (aufgelegt, abgebrochen ...) sofort die "spawn extension" greift und der sache ein ende macht - obwohl ich n+1 und n+101 belegt habe :

Code:
exten => _X.,2,Set(LEITUNG=${DB(fax/status)})           ; Faxwert holen
exten => _X.,3,GotoIf($["${LEITUNG}" = "0"]?10:20)      ; Umleiten falls der Wert nicht 1

exten => _X.,10,Set(LEITUNG=$[${LEITUNG} +1])           ; Fax 1 ist frei, ich belege es nun
exten => _X.,11,Set(DB(fax/status)=${LEITUNG})          ; Fax in der DB als belegt markieren
[B]exten => _X.,12,Dial(IAX2/iaxmodem)[/B]
exten => _X.,13,Goto(,_X.,113)
exten => _X.,113,Set(LEITUNG2=${DB(fax/status)})          ; Nochmals den aktuellen Wert holen
exten => _X.,114,Set(LEITUNG2=$[${LEITUNG2} -1])           ; Fax freigeben
exten => _X.,115,Set(DB(fax/status)=${LEITUNG2})          ; Fax in der DB als frei vermerken
exten => _X.,116,Hangup()

(das ganze sieht natürlich mit n+101 und goto nicht ideal aus - aber das ist eher aus der not entstanden)

Der Rest nach dem fettmarkierten wird einfach nicht abgearbeitet, oder in meinem Fall, der Wert wird nicht mehr verringert.

Siehe hier :

Code:
    -- IAX2/iaxmodem-1 is ringing
    -- IAX2/iaxmodem-1 answered SIP/40-08169d40
    -- Hungup 'IAX2/iaxmodem-1'
  == Spawn extension (mailfax_eingehend, _X., 12) exited non-zero on 'SIP/40-08169d40'


Ich habe nichts dergleichen in voip-info.org (dial) gefunden und bin ehrlich gesagt etwas ratlos. Ich würde gerne dieses Modell zum Erfolg bringen.


Über Hilfe sehr dankbar (!),

Stefan
 
Ohne der Sache jetzt weiter auf den Grund zu gehen, würde ich mal sagen, daß der Abbruch der Verarbeitung einfach darin begründet ist, daß die Syntax in Deinem Goto falsch ist.

Probier doch mal

Code:
goto(113)
 
Hi Beta,

leider nein.

Ich habe die Zeilen "113" aus der einfachen Abfolge der"13" im Kontext gemacht, s.h. auch ohne Goto wurde nicht weiter versucht der Nummerierung zu folgen.

Das Goto so wie es steht habe ich aus einer anderen Schleife herauskopiert wo es so funktionierte.

Es sollte doch so sein das DIAL bei einem normalen Hangup während des Dials im Kontext weiterläuft, und zwar mit n+1 - wieso springt er dort direkt weg ?

Grüsse, Stefan
 
HobbyStern schrieb:
wieso springt er dort direkt weg ?

Wir müssen uns als erstes mal auf einheitliche Begrifflichkeiten einigen. Der Asterisk springt nicht einfach weg. Er macht schlichtweg nicht so weiter, wie es sich gehört.

Genausowenig gibt es das hier:

Mein Problem ist das - [...] sofort die "spawn extension" greift und der sache ein ende macht

Es gibt keine "spawn extension" ;)

Kannst Du mal bitte testen, ob das Verhalten auch auftritt, wenn sich das DIAL nicht auf iaxmodem bezieht, sondern eine "normale" Nebenstelle angerufen wird?
 
HobbyStern schrieb:
Es sollte doch so sein das DIAL bei einem normalen Hangup während des Dials im Kontext weiterläuft, und zwar mit n+1 - wieso springt er dort direkt weg ?

IAX2/iaxmodem-1 answered SIP/40-08169d40


Da der Anruf angenommen wurde wird nicht bei n+1 weiter gemacht sondern die h extension gesucht. ${DIALSTATUS} steht dann auf ANSWER
Das ist die default Einstellung.
 
Wir können uns auf einheitliche Begrifflichkeiten einigen. ;) Kein Problem.

Kannst Du mal bitte testen, ob das Verhalten auch auftritt, wenn sich das DIAL nicht auf iaxmodem bezieht, sondern eine "normale" Nebenstelle angerufen wird?
Kann und habe ich - nehme ich nun einen SIP Kanal bleibt es sich gleich, Asterisk macht nicht das was er soll :

Code:
/fax/status                                       : 1
Es wird nicht weitergemacht und der Status bleibt bei +1.

@ Thomas

Das hat sich nun überschnitten - ich sehe Deine Antwort gerade per Mail ankommen.

Die "h"-Extension scheint das zu sein was ich suche - jedoch sehe ich das doch richtig das ich in einem Kontext nur eine "h" Extension nutzen kann, richtig ?

EDIT : Getestet , leider passt auch dies hier nicht. Kein Erfolg.

EDIT2 : Ich setze mal den gesamten Kontext hier ein - so sehen wir alle das gleiche (anbei : DANKE für eure Zeit !)

Code:
[mailfax_eingehend]                    

exten => _X.,1,misdn_set_opt(!e:vt0)                    ; mISDN veranlassen die ECs auszumachen
exten => _X.,2,Set(LEITUNG=${DB(fax/status)})           ; Faxwert holen
exten => _X.,3,GotoIf($["${LEITUNG}" = "0"]?10:20)      ; Umleiten falls der Wert nicht 1

exten => _X.,10,Set(LEITUNG=$[${LEITUNG} +1])           ; Fax 1 ist frei, ich belege es nun
exten => _X.,11,Set(DB(fax/status)=${LEITUNG})          ; Fax in der DB als belegt markieren
exten => _X.,12,Dial(IAX2/iaxmodem)
exten => _X.,13,Goto(103)
exten => _X.,103,Set(LEITUNG2=${DB(fax/status)})          ; Nochmals den aktuellen Wert holen
exten => _X.,104,Set(LEITUNG2=$[${LEITUNG2} -1])           ; Fax freigeben
exten => _X.,105,Set(DB(fax/status)=${LEITUNG2})          ; Fax in der DB als frei vermerken
exten => _X.,106,Hangup()

exten => _X.,20,GotoIf($["${LEITUNG}" = "2" ]?40:30)    ; Umleiten falls Fax 2 auch besetzt ist...

exten => _X.,30,Set(LEITUNG=$[${LEITUNG} +1])           ; Fax 2 ist frei, ich belege es nun
exten => _X.,31,Set(DB(fax/status)=${LEITUNG})          ; Fax in der DB als belegt markieren
exten => _X.,32,Dial(IAX2/iaxmodem2)
exten => _X.,33,Goto(133)
exten => _X.,133,Set(LEITUNG3=${DB(fax/status)})                ; Nochmals den aktuellen Wert holen
exten => _X.,134,Set(LEITUNG3=$[${LEITUNG3} -1])           ; Fax freigeben
exten => _X.,135,Set(DB(fax/status)=${LEITUNG3})          ; Fax in der DB als frei vermerken
exten => _X.,136,Hangup()

exten => _X.,40,Dial(Zap/4,,)                           ; Auf das analoge Faxgeraet ausweichen...

Grüsse, Stefan
 
HobbyStern schrieb:
jedoch sehe ich das doch richtig das ich in einem Kontext nur eine "h" Extension nutzen kann, richtig ?

ja,
Da kommen die Sachen rein die auf jeden Fall ausgeführt werden soll. Auch wenn der Anruf ANSWER war oder der Anrufer aus einem anderen Grund aufgelegt hat.

EDIT: Was hast Du denn getestet? Deine Lösung ist etwas komplizierter da man immer in h landet, Du aber nur einmal zurücksetzen möchtest. Alternative zur Vermeidung von komplizierten Abfragen ist ein Goto Sprung in einen anderen Context, da kann man dann eine andere h extension verwenden.
 
Zuletzt bearbeitet:
...ist ein Goto Sprung in einen anderen Context...

Gut, so ginge es auch, jedoch springt er in meinem Fall noch nicht einmal den einen "h" den ich zum Test eingebaut und habe und mit einem "Goto(113)" versehen habe an - er meint es gibt nichts mehr zu tun und beendet den kontext.

Also, was das ganze Ding im Endeffekt leisten soll ist - wenn iaxmodem1 belegt ist, gehe auf iaxmodem2 - leider bekomme ich bei einem besetzten iaxmodem hier kein BUSY, sonst wäre die Sache einfacher..

Stand bis jetzt , nach dem DIAL wird einfach beendet, egal was in der anschliessenden Exten n+1 oder n+101 oder auch "h" steht.

Das ganze ist mit IAX2 und SIP reproduzierbar.

Hast Du ggf. eine alternative Lösung um dieses Problem zu umschiffen ?!

Grüsse, Stefan
 
Ich würde erst mal mit n arbeiten und mir das durchzählen sparen was eine zusätzliche Fehlerquelle ist.

Dann würde ich zur Lösung GROUP_COUNT nehmen. Das funktioniert mit Ausnahme von local channels problemlos. Dann brauche ich mich auch nicht um das zurücksetzen kümmern.

Wenn das Modem immer answer macht geht es NIE weiter im Dialplan, jedenfalls nicht bei dem default DIAL Befehl.
 
Hallo Thomas,

Danke - so hat es geklappt, ich habe mal die AstDB aus dem Spiel gelassen und das ganze mit Group_Count gelöst, ist stabil und macht das was es soll, für alle nach mir die ggf. auch so etwas benötigen hier der gesamte kontext (der beachtlich kleiner wurde)

Code:
[mailfax_eingehend]
exten => _X.,1,misdn_set_opt(!e:vt0)                    ; mISDN veranlassen die ECs auszumachen
exten => _X.,n,Set(GROUP()=faxleitungen)                ; Gruppe setzen und Hallo sagen , also 0 + 1 usw
exten => _X.,n,GotoIf($["${GROUP_COUNT()}" = "2"]?20)   ; wir fragen von hinten nach vorne - ist hier schon jemand in der Gruppe, also 1 ?
exten => _X.,n,GotoIf($["${GROUP_COUNT()}" = "1"]?30)   ; Ist denn niemand da ?
exten => _X.,n,Dial(ZAP/4,,)                            ; Alles voll? Meine Guete... Nehme das analoge Fax
exten => _X.,n,Hangup()
exten => _X.,20,Dial(IAX2/iaxmodem)                     ; nehmen wir das letzte Fax auch noch zum empfangen..
exten => _X.,n,Hangup()
exten => _X.,30,Dial(IAX2/iaxmodem2)                    ; Niemand in der Gruppe, also kann ich das erste Fax nehmen welches keiner braucht!
exten => _X.,n,Hangup()

Ich habe mich auch endlich mal gezwungen mit "n" anstatt der zeilennummern zu arbeiten, fällt mir immer noch schwer - bin halt ein gewohnheitstier ;)

So ! Ich wünsche Dir und Beta ein ruhiges WE und Danke euch beiden!

Stefan
 
Hi Leute,

ich weiss nich ob genau das euer Problem ist...

Aber habe ich es richtig verstanden das du moechtest das der Waehlplan NACH dem Dial Kommando weiterlaeuft?

Sprich, wenn aufgelegt wird, wenn keiner abhebt, oder whatever?

Falls ja sollte das die Loesung sein:

Es gibt ein Flag fuer die DIAL Applikation, welche dafuer sorgt das der Waehlplan nach dem DIAL Kommando weiterhin abgearbeitet wird:

Code:
Dial(Tech/Resource,Timeout,Optionen,URL)

Option:

  g
    Geht weiter im Context, wenn der Zielkanal aufgelegt wird.

z.B. DIAL(SIP/[email protected],20,g)

http://www.das-asterisk-buch.de/stable/applikationen-dial.html

ansonsten greift die Regel n+101 bzw. 102.

Gruß cheGGo
 
cheGGo schrieb:
wenn der Zielkanal aufgelegt wird.

...wenn es aber gar keinen Zielkanal gibt, der aufgelegt werden kann, hilft Deine tolle Idee auch nicht weiter ;)
 
huu,

hab ich wohl in der eile uebersehen :rolleyes:

haett ja sein koennen ....

sorry :(

Gruß cheGGo
 
Kostenlos!

Statistik des Forums

Themen
248,872
Beiträge
2,303,471
Mitglieder
378,532
Neuestes Mitglied
Nik320