Каждую подветку IVR оформляете отдельным контекстом, далее в каждом контексте примерно так:
[ivr-main]
exten => s,1,Answer()
same => n,Background(ivr-menu-main)
same => n,WaitExten(5)
exten => i,1,Playback(key-invalid)
same => n,Goto(somewhere)
exten => t,1,Playback(go-to-operator)
same => n,Goto(somewhere)
exten => 1,1,Goto(ivr-menu-1,s,1)
...
Второй вариант - через Read, тогда можно всё в одном контексте
[ivr]
exten => s,1,Answer()
same => n,Read(KEY,ivr-menu-main,1,,1,3)
same => n,GotoIf($["${KEY}"=""]?error,1:ivr${KEY},1)
exten => ivr1,1,Read(KEY,ivr-menu-1,1,,1,3)
...