GotoIf mit mehreren Argumenten?

Mansaylon

Neuer User
Mitglied seit
7 Mai 2007
Beiträge
158
Punkte für Reaktionen
1
Punkte
18
Hallo Zusammen

Bin gerade an einem Makro, welches ich universell gestalten möchte.
Dabei möchte ich für eine bestimmte eingehende Nummer ein weiteres Argument übergeben, welches mir dann die einen Sprung ausführen soll.

Beispiel:
exten => 101,1,Macro(anruf,SIP/101,201,1)
exten => 102,1,Macro(anruf,SIP/102,202,0)
exten => 103,1,Macro(anruf,SIP/103,203,1)


[macro-anruf]
exten => s,1,Dial(${ARG1},10,tr)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${ARG2},u)
exten => s-BUSY,1,VoiceMail(${ARG2},b)
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)

Soweit macht das Macro genau das was es soll.
Nun möchte ich aber vor dem Dial(${ARG1} noch das 3. Argument inkl. die ankommende Rufnummer überprüfen, ob sie von einem unbekannten Anrufer ist.

Wenn also das ${ARG3} = 0 ist, soll ein unbekannter Anrufer direkt auf VoiceMail, resp. auf NOANSWER umgeleitet werden.

exten => s,1,GotoIf($["${CALLERID(num)}" = ""]?NOANSWER)
Denke, das wäre mal der richtige Ansatz. Nur wird mir da das 3. Argument nicht mit ausgelesen.
Kann man 2 Bedingungen im GotoIf() abfragen? Ich brauchte da noch und 'Wenn ${ARG3} = 0' ist.
 
Probier mal so:

Code:
exten => s,1,GotoIf($["${CALLERID(num)}"=""]?${IF($["${ARG3}"="0"]?NOANSWER)})

In diesem speziellen Fall könnte das auch klappen:

Code:
exten=>s/,1,GotoIf($["${ARG3}"="0"]?NOANSWER)
exten=>s,1,Noop()
exten=>s,n,Dial ...
 
Zuletzt bearbeitet von einem Moderator:
aber must du dann nicht dort anstelle von "", anonymous eintragen?
 
Das kommt auf den Provider an, manche übermitteln "anonymous", manche gar nichts.
 
Und genau so ist es in der Schweiz ;)
 
Probier mal so:

Code:
exten => s,1,GotoIf($["${CALLERID(num)}"=""]?${If($["${ARG3}"="0"]?NOANSWER)})

bekomme folgendes:

== Using SIP RTP CoS mark 5
-- Executing [840@via-isdnrouter:1] Macro("SIP/ISDN-Router-00000029", "anruf,SIP/211,210") in new stack
-- Executing [s@macro-anruf:1] GotoIf("SIP/ISDN-Router-00000029", "0?") in new stack


Irgendwie funktioniert wohl die Rufnummerabfrage mit CALLERID(num) im Makro nicht. :neutral:
 
Doch, das sollte IMHO auch im Macro klappen. Kannst Du ganz einfach testen, mit Noop(${CALLERID(num)})
Gäb's das im Macro nicht, wäre es erst recht ="" gewesen.

Ich verstehe das Log so, als hättest Du nicht als Unbekannt angerufen, und zudem war ARG3 nicht 0.
 
Das ist richtig... ich habe mit meinem Handy angerufen und habe natürlich einen Clip mitgegeben. Aber aber ARG3 ist 0, wie man ja auch im Log vor dem Fragezeichen sieht.
 
Ich brauchte da noch und 'Wenn ${ARG3} = 0' ist.

Meinst Du damit ein logisches Und (Goto wenn beides zutrifft), oder meinst Du eigentlich Oder (Goto wenn mindestens eins von beiden zutrifft)?

Die 0 vor dem Fragezeichen heißt soweit ich weiß, dass die erste Bedingung Falsch war. Mit ARG3 hat das nichts zu tun.
 
Ein logisches UND... also sowohl unbekannt als auch Argument3 = 0.
 
== Using SIP RTP CoS mark 5
-- Executing [840@via-isdnrouter:1] Macro("SIP/ISDN-Router-00000046", "anruf,SIP/211&SIP/216,210,0") in new stack
[Nov 26 15:13:20] ERROR[27103]: pbx.c:3484 ast_func_read: Function If not registered
-- Executing [s@macro-anruf:1] GotoIf("SIP/ISDN-Router-00000046", "0?") in new stack
-- Executing [s@macro-anruf:2] Dial("SIP/ISDN-Router-00000046", "SIP/211&SIP/216,25,tr") in new stack
== Using SIP RTP CoS mark 5
-- Called 211
== Using SIP RTP CoS mark 5
-- Called 216
-- SIP/216-00000048 is ringing
-- SIP/211-00000047 is ringing
== Spawn extension (macro-anruf, s, 2) exited non-zero on 'SIP/ISDN-Router-00000046' in macro 'anruf'
== Spawn extension (via-isdnrouter, 840, 1) exited non-zero on 'SIP/ISDN-Router-00000046'

Langsam komme ich dem wohl dahinter.... da ist ein Error betr. IF Funktion ?!?!

Die Anrufe, wo das ARG3 = 1 ist, gehen problemlos. Lediglich dort, wo ich dann das ARG3 auf 0 setze geht es nicht.
 
Da es offenbar keine logische UND Verknüpfung bei der GotoIF Abfrage gibt, habe ich es nun wie folgt gelöst... und es macht nun das, was ich will ;-)
[macro-anruf]
exten => s,1,GotoIf($["${CALLERID(num)}" = "anonymous"]?CHECK2:OK)
exten => s,n(CHECK2),GotoIf($["${ARG3}" = "1"]?s-NOANSWER,1)
exten => s,n(OK),Dial(${ARG1},25,tr)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${ARG2},u)
exten => s-BUSY,1,VoiceMail(${ARG2},b)
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)

Im übrigen... da ich das einkommende Gespräch über einen ISDN-Router (Patton 4552) empfange, muss ich für den Unbekannten Anrufer doch mit 'anonymous' abfragen. Über eine ISDN Karte wäre es in der Schweiz jedoch ""

@rentier-s:
Vielen Dank für Deine Unterstützung.
 
Danke... werde das auf die todo Liste setzen, damit ich die Funktion doch mit einer Zeile bewältigen kann.... aber bis dahin werde ich mich erst mit den wichtigen Dingen weiter beschäftigen, da ja nun genau das erreicht wird, was ich wollte. :rolleyes:
 
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.