vinsbg
March 15, 2018, 10:47am
1
I know and I’ve read about IF/ELSE in dialplan with GotoIf but what about if, elseif, else? Is there a way to have this kind of condition? For example I want to check the length of the incoming extension, like:
if(extenLength == 13)
{
// goto this context
}
elseif(extenLength == 14)
{
// goto another context
}
elseif(extenLength == 15)
{
// goto third context
}
else
{
// goto fourth context
}
vinsbg
March 15, 2018, 10:58am
3
Do you mean something like this?
[context]
exten => s,1,Set(foo=${LEN(${CALLER(num)})})
exten => s,2,GotoIf($["${foo}" = "13"]?context1:contextLength13)
[contextLength13]
///
[context1]
exten => s,1,Set(foo=${LEN(${CALLER(num)})})
exten => s,2,GotoIf($["${foo}" = "14"]?context2:contextLength14)
[contextLength14]
///
[context2]
exten => s,1,Set(foo=${LEN(${CALLER(num)})})
exten => s,2,GotoIf($["${foo}" = "15"]?context3:contextLength15)
[contextLength15]
///
For sequential GotoIf() I mean all on the same context, for example
same=>n,GotoIf($["${confirm}"=“1”]?a)
same=>n,GotoIf($["${confirm}"=“2”]?b)
same=>n,GotoIf($["${confirm}"=“3”]?c)
same=>n,GotoIf($["${confirm}"=“2”]?d)
same=>n,goto(f)
vinsbg
March 15, 2018, 11:03am
5
Sorry, I’m not sure I understand it. In the example
same=>n,GotoIf($["${confirm}"=“1”]?a)
What is “a”? And is {confirm} the callerid(num)?
Sorry I just tried to ilustrate my point, but I assumed you know how to use GotoIf()
${confirm}== is the variable to evaluate in this case you can substitute it for your own variable ${LEN(${CALLER(num)})}.
1== is the value for this particular case
a== is the destination, in this case a label on the current context you can also specify a different context
vinsbg
March 15, 2018, 11:10am
7
Thank you very much. Is a bit clearer now. Will try it a bit later and will write here to let you know if anything goes wrong or if is working.
Edit:
It is working that way. Thanks!
Are you using AEL? That is more structured, but few people use it.
vinsbg
March 15, 2018, 1:00pm
9
Hm, no, I don’t use it. I just googled it and seems really a bit better. I might try to switch to it once I get this ready.
Assuming your data is always going to be valid you can fake a switch statement with code like:
exten => s,1,Goto(LEN${extenLength})
same => n(LEN13),Goto(context1,s,1)
same => n(LEN14),Goto(context2,s,1)
same => n(LEN15),Goto(context3,s,1)