IF, ELSEIF and ELSE condition in dialplan

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
}

use sequentials GotoIf()

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)

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

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.

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)