Skip to content

SWML offers a lot of flexibility in how you control program flow with its control methods. Of these, goto, execute, and transfer allow you to unconditionally control program flow.

goto

The goto method is designed to allow you to jump to particular labels within a section. Use this method to simulate more complex loops like while and for loops.

You cannot jump to sections using goto. Use execute described further below to jump sections.

YAMLJSON

version: 1.0.0
sections:
  main:
    - play:
        url: 'say:Entering infinite loop'
    - label: loop
    - play:
        url: 'say:Looping ...'
    - goto:
        label: loop

goto

loop

main

execute

The execute method allows you to invoke a subsection as a function. You can pass parameters to the function and receive a return value.

YAMLJSON

version: 1.0.0
sections:
  main:
    - play:
        url: 'say:Transferring you to another section'
    - execute:
        dest: subsection
    - play:
        url: 'say: ${return_value}'
  subsection:
    - play:
        url: 'say:inside a subsection'
    - return: back!

Output transcript:

"Transferring you to another section"

"inside a subsection"

"back!"

back!

main

subsection

Or in a more complex example:

YAMLJSON

version: 1.0.0
sections:
  main:
    - play:
        url: 'say:Transferring you to another section'
    - execute:
        dest: subsection
        params:
          a: 1
          b: 2
    - play:
        url: 'say: ${return_value}'
  subsection:
    - return: '${params.a+params.b}'

a:1, b:2

12

main

subsection

transfer

YAMLJSON

version: 1.0.0
sections:
  main:
    - play:
        url: 'say:Transferring you to another section'
    - transfer:
        dest: subsection
    - play:
        url: 'say:Back!'
  subsection:
    - play:
        url: 'say:inside a subsection'

Output transcript:

"Transferring you to another section"

"inside a subsection"

Notice how we aren’t going back to the calling section at all.

params, vars, etc

main

subsection

Conclusion

gotoexecutetransfer
UseJump between labels within a sectionInvoke a subsection with params, then returnInvoke a subsection with params
Scopewithin a sectionFrom one section to another, or to another SWML fileFrom one section to another, or to another SWML file

SignalWire Developer Documentation