[Frage] GotoIf im Dialplan

cybermanx

Neuer User
Mitglied seit
21 Aug 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Asterisk 1.8: Irgendwie funktioniert mein GotoIf im Dialplan nicht. Folgendes steht im Dialplan:
Code:
exten => _XX.,n,MYSQL(Connect connid 192.168.1.100 asterisk asterisk asterisk)
exten => _XX.,n,NoOP(Connid ist: ${connid})
exten => _XX.,n,GotoIf($["${connid}" = ""]?DB_Connect_Error)
exten => _XX.,n(DB_Connect_Error),NoOP(kein Connect zum SQL-Server mgl)

Wenn keine Verbindung zustande kommt sollte er also in NoOP(kein Connect zum SQL-Server mgl) reinrennen. Macht er auch, dummerweise aber auch wenn die Verbindung besteht.

Hier mal der Fall, dass MySQL erreichbar ist:
Code:
-- Executing [0712345@Ansage:2] MYSQL("SIP/qsc-00000021", "Connect connid 192.168.1.100 asterisk asterisk as   terisk") in new stack
-- Executing [0712345@Ansage:3] NoOp("SIP/qsc-00000021", "Connid ist: 1") in new stack
-- Executing [0712345@Ansage:4] GotoIf("SIP/qsc-00000021", "0?DB_Connect_Error") in new stack
-- Executing [0712345@Ansage:5] NoOp("SIP/qsc-00000021", "kein Connect zum SQL-Server mgl") in new stack

und der Fall wenn ich MySQL deaktiviert habe
Code:
-- Executing [0712345@Ansage:2] MYSQL("SIP/qsc-00000022", "Connect connid 192.168.1.100 asterisk asterisk asterisk") in new stack
[Apr  9 08:49:47] WARNING[6742]: app_mysql.c:358 aMYSQL_connect: mysql_real_connect(mysql,192.168.1.100,asterisk,dbpass,asterisk,...) failed(2003): Can't connect to MySQL server on '192.168.1.100' (111)
-- Executing [0712345@Ansage:3] NoOp("SIP/qsc-00000022", "Connid ist: ") in new stack
-- Executing [0712345@Ansage:4] GotoIf("SIP/qsc-00000022", "1?DB_Connect_Error") in new stack
-- Goto (Ansage,0712345,5)
-- Executing [0712345@Ansage:5] NoOp("SIP/qsc-00000022", "kein Connect zum SQL-Server mgl") in new stack

Man sieht also ganz deutlich, dass er in beiden Fällen den NoOP(kein Connect zum SQL-Server mgl) ausführt, obwohl bei einen Mal die Condition "0?DB_Connect_Error" und bei anderen mal "1?DB_Connect_Error" ist. Das selbe ist auch bei anderen Applikationen wie z.B. Playback. Er führt es immer aus, obwohl er es eigentlich lt. GotoIf ignorieren müsste.
 
Hi!

Man sieht also ganz deutlich, dass er in beiden Fällen den NoOP(kein Connect zum SQL-Server mgl) ausführt, obwohl bei einen Mal die Condition "0?DB_Connect_Error" und bei anderen mal "1?DB_Connect_Error" ist.
Ist das jetzt eine Fangfrage?

Anders rum gefragt, was sollte deiner Meinung nach als nächstes ausgeführt werden, wenn weder das WENN zutrifft und es aber auch keine Anweisung für ELSE angegeben wurde (wie bei dir)?

Du solltest schon wenn du die NoOp-Zeile überspringen willst, nach dem 'DB_Connect_Error' eine Anweisung angeben, sonst wird IMMER die nächste Zeile ausgeführt! Ein mal weil du dahin springst und ein mal weil es einfach der nächste Befehl in der Kette ist.
Z.B. so:
Code:
exten => _XX.,n,GotoIf($["${connid}" = ""]?DB_Connect_Error:DB_Connected)
Gruss
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.