For reference, here is the same IVR dialplan as output by FreePBX
asterisk -x "dialplan show ivr-4" [ Context 'ivr-4' created by 'pbx_config' ] '*' => 1. Set(__ivrreturn=0) [extensions_additional.conf:4167] [ivrsel-*] 2. Goto(app-blackhole,hangup,1) [extensions_additional.conf:4168] '0' => 1. Set(__ivrreturn=0) [extensions_additional.conf:4164] [ivrsel-0] 2. Goto(ivr-4,s,1) [extensions_additional.conf:4165] '9' => 1. Set(__ivrreturn=0) [extensions_additional.conf:4170] [ivrsel-9] 2. Goto(um-vm,s,1) [extensions_additional.conf:4171] 'fax' => 1. Goto(${CUT(FAX_DEST,^,1)},${CUT(FAX_DEST,^,2)},${CUT(FAX_DEST,^,3)}) [extensions_additional.conf:4149] 'h' => 1. Hangup() [extensions_additional.conf:4192] 'hang' => 1. Playback(vm-goodbye) [extensions_additional.conf:4194] 2. Hangup() [extensions_additional.conf:4195] 'i' => 1. Set(INVALID_LOOPCOUNT=$[${INVALID_LOOPCOUNT}+1]) [extensions_additional.conf:4173] 2. GotoIf($[${INVALID_LOOPCOUNT} > 3]?final) [extensions_additional.conf:4174] 3. Set(IVR_MSG=no-valid-responce-pls-try-again&custom/client_main) [extensions_additional.conf:4175] 4. Goto(s,start) [extensions_additional.conf:4176] [final] 5. Playback(no-valid-responce-transfering) [extensions_additional.conf:4177] 6. Goto(app-blackhole,hangup,1) [extensions_additional.conf:4178] 'return' => 1. Set(_IVR_CONTEXT=${CONTEXT}) [extensions_additional.conf:4187] 2. Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT_${CONTEXT}}) [extensions_additional.conf:4188] 3. Set(IVR_MSG=custom/client_main) [extensions_additional.conf:4189] 4. Goto(s,start) [extensions_additional.conf:4190] 's' => 1. Set(TIMEOUT_LOOPCOUNT=0) [extensions_additional.conf:4151] 2. Set(INVALID_LOOPCOUNT=0) [extensions_additional.conf:4152] 3. Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT}) [extensions_additional.conf:4153] 4. Set(_IVR_CONTEXT=${CONTEXT}) [extensions_additional.conf:4154] 5. Set(__IVR_RETVM=) [extensions_additional.conf:4155] 6. GotoIf($["${CHANNEL(state)}" = "Up"]?skip) [extensions_additional.conf:4156] 7. Answer() [extensions_additional.conf:4157] 8. Wait(1) [extensions_additional.conf:4158] [skip] 9. Set(IVR_MSG=custom/client_main) [extensions_additional.conf:4159] [start] 10. Set(TIMEOUT(digit)=3) [extensions_additional.conf:4160] 11. ExecIf($["${IVR_MSG}" != ""]?Background(${IVR_MSG})) [extensions_additional.conf:4161] 12. WaitExten(10,) [extensions_additional.conf:4162] 't' => 1. Set(TIMEOUT_LOOPCOUNT=$[${TIMEOUT_LOOPCOUNT}+1]) [extensions_additional.conf:4180] 2. GotoIf($[${TIMEOUT_LOOPCOUNT} > 3]?final) [extensions_additional.conf:4181] 3. Set(IVR_MSG=no-valid-responce-pls-try-again&custom/client_main) [extensions_additional.conf:4182] 4. Goto(s,start) [extensions_additional.conf:4183] [final] 5. Playback(no-valid-responce-transfering) [extensions_additional.conf:4184] 6. Goto(app-blackhole,hangup,1) [extensions_additional.conf:4185] Include => 'ivr-4-custom' [pbx_config] Include => 'from-did-direct-ivr' [pbx_config]