# Asterisk Project : AEL goto, jump, and labels

Added by mdavenport , edited by mdavenport on Aug 31, 2010

This is an example of how to do a goto in AEL.

    context gotoexample {
        s => {
            begin:
                NoOp(Infinite Loop! yay!);
                Wait(1);
                goto begin; // go to label in same extension
        }
        3 => {
            goto s,
            begin; // go to label in different extension
        }
        4 => {
            goto gotoexample,s,begin; // overkill go to label in same context
        }
    }

    context gotoexample2 {
        s => {
            end:
                goto gotoexample,s,begin; // go to label in different context
        }
    }

You can use the special label of "1" in the goto and jump statements. It means the "first" statement in the extension. I would not advise trying to use numeric labels other than "1" in goto's or jumps, nor would I advise declaring a "1" label anywhere! As a matter of fact, it would be bad form to declare a numeric label, and it might conflict with the priority numbers used internally by asterisk.

The syntax of the jump statement is: jump extension[,priority][@context] If priority is absent, it defaults to "1". If context is not present, it is assumed to be the same as that which contains the "jump".

    context gotoexample {
        s => {
            begin:
                NoOp(Infinite Loop! yay!);
                Wait(1);
                jump s; // go to first extension in same extension
        }
        3 => {
            jump s,begin; // go to label in different extension
        }
        4 => {
            jump s,begin@gotoexample; // overkill go to label in same context }
        }

    context gotoexample2 {
        s => {
            end:
                jump s@gotoexample; // go to label in different context }
    }

Goto labels follow the same requirements as the Goto() application, except the last value has to be a label. If the label does not exist, you will have run-time errors. If the label exists, but in a different extension, you have to specify both the extension name and label in the goto, as in: goto s,z; if the label is in a different context, you specify context,extension,label. There is a note about using goto's in a switch statement below...

AEL introduces the special label "1", which is the beginning context number for most extensions.