Move to next trunk on fail

We have 3 trunks in our long distance outbound route. First is a dundi trunk, then a sip provider then our local zap channels.

When dialing out the call will move from trunk to trunk until it finds a match. Works Great! My question is if my sip provider goes down (as they did for 5 minutes this morning) or my internet goes down the call finds a match with my Sip trunk tries it then dies. How can you get it to move to the next trunk. Is there a time out setting that after 10 seconds of no connection on trunk move to the next one?

Or do I have something set wrong.


Looking at the extensions_additional.conf I see in the macro-dialout-trunk a section that grabs the dialstatus and sends it to a goto

exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($["${the_num}" = “OUTNUM”]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(chanfull),Noop(max channels used up)
exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Busy(20)
exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,n,Playtones(congestion)
exten => s-NOANSWER,n,Congestion(20)
exten => s-CANCEL,1,Noop(Dial failed due to trunk reporting CANCEL - giving up)
exten => s-CANCEL,n,Playtones(congestion)
exten => s-CANCEL,n,Congestion(20)
exten => s-CHANUNAVAIL,1,GotoIf($[“x${OUTFAIL_${ARG1}}” = “x”]?noreport)
exten => s-CHANUNAVAIL,n,AGI(${OUTFAIL_${ARG1}})
exten => s-CHANUNAVAIL,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} (hangupcause: ${HANGUPCAUSE}) - failing through to other trunks)
exten => s-.,1,GotoIf($["x${OUTFAIL${ARG1}}" = “x”]?noreport)
exten => s-.,n,AGI(${OUTFAIL${ARG1}})
exten => s-.,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} - failing through to other trunks)
exten => disabletrunk,1,Noop(TRUNK: ${OUT
${DIAL_TRUNK}} DISABLED - falling through to next trunk)
exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
exten => h,1,Macro(hangupcall,)

And yes the last line of this section has a fail over to other trunks. But the section after is confusing to me. I cant seem to follow where it is going. To me (yes I’m new to this) it seems to just hang up the call. Could this be a problem in my trunk? Any help to dicipher this would be great. I have my zap as my last trunk in my long distance route. So when my sip trunk failed I figured it would just go out the zap, but all we received was fast busy.