Synopsis
Conditional gotoDescription
GotoIf(condition?label1[[:label2])
GotoIf(condition?[context1],[extension1],[priority1]:[context2],[extension2],[priority2])
Go to label1 if condition is true or to next step (or label2 if defined) if condition is false, or
GotoIf(condition?[label1]:label2)
Go to next step (or label1 if defined) if condition is true or to label2 if condition is false.
Either label1 or label2 may be omitted (in that case, we just don't take the particular branch), but not both.
condition is just a string. If the string is empty or "0", the condition is considered to be false. If it is anything else, the condition is true. This is designed to be used together with expression syntax.
Labels take the form '[[context,]extension,]priority', so they can be (a) a priority, (b) an extension and a priority, or (c) a context, an extension and a priority. This is the same syntax as for the Goto command.
Example 1
exten => 206,1,GotoIf($["${CALLERID(num)}" = "303"]?dial1)
exten => 206,n,GotoIf($["${CALLERID(num)}" != "304"]?moh:dial2)
exten => 206,n(dial1),Dial(${SPHONE1},15,rt)
exten => 206,n,Hangup()
exten => 206,n(dial2),Dial(${PHONE2},15,rt)
exten => 206,n,Hangup()
exten => 206,n(moh),MusicOnHold(default)
20050427 - Note that ${CALLERID(num)} can contain spaces (e.g. "No CID available" from some Zap channels), and the example above has been corrected to cope with this situation - without the quotes around ${CALLERID(num)} it doesn't work!
Example 2
; Are the first three digits of the returned value of ${ENUM} are
; either SIP or IAX? If not, we ignore and pass to normal
; dialing path at priority 4.
;
exten => _011X.,2,GotoIf($[$["${ENUM:0:3}" = "SIP"] | $["${ENUM:0:3}" = "IAX"]]?3:4)
Example 3
; This example checks for blank caller ID or 800 numbers.
; Callers from 800 numbers (usually telemarketers) or those
; with no caller ID are asked to press 1 to speak with me.
exten => s,1,NoOp(${CALLERID}) ; log callerID string
; check for callerID. If none, make them hit 1.
exten => s,n,GotoIf($["${CALLERID(num)}" = ""]?1000)
; If 800 number, make them hit 1.
exten => s,n,GotoIf($["${CALLERID(num):0:3}" = "877"]?1000)
exten => s,n,GotoIf($["${CALLERID(num):0:3}" = "800"]?1000)
; OK, we have valid caller ID and it's not an 800 number.
; Let's ring our phones now:
exten => s,n,Dial(SIP/604&SIP/602,25,tr)
exten => s,1000,Background(press1tospeaktome)
Example 4 (by Tikal Networks )
Important!!!
If from any reason gotoif dose not work with floating numbers try to cut the floating number and compare it with the first argument
exten => charge_set_up_fee,1,Noop(=== NOW STARTING 'set up fee' ===)
exten => charge_set_up_fee,n,Set(fee_credit=20.36)
exten => charge_set_up_fee,n,ExecIf($[${fee_credit} < 0.50],Playback,custom/credit_less_then_0_5)
exten => charge_set_up_fee,n,ExecIf($[${fee_credit} < 0.50],Macro,hangupcall,EXIT); play msg and exit if user have lass the 0.5 cent
;exten => charge_set_up_fee,n,GotoIf($[${fee_credit} > 20]?continue) ; this will not work
exten => charge_set_up_fee,n,GotoIf($[${CUT(fee_credit,\.,1)} > 20]?continue) ; this will work
exten => charge_set_up_fee,n,Set(lala=blabla)
exten => charge_set_up_fee,n(continue),Set(CALL_START_DATE=${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})
~pp~
!!Example 5 with ((Asterisk func func_odbc|func_odbc))
__in func_odbc. ...