let's say your providers are set to variables like VOIPOUT1 VOIPOUT2 VOIPOUT3 etc [macro-voip_call] exten => s,1,set(CALLERID(num)=55555555555) exten => s,n,set(PROV_COUNT=1) exten => s,n(start),dial(${VOIPOUT${PROV_COUNT}}/${ARG1},60) exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status exten => s-BUSY,1,playback(busy) exten => s-BUSY,n,wait(10) exten => s-BUSY,n,hangup exten => s-NOANSWER,1,hangup ;if the DIALSTATUS var comes back as CHANUNAVAIL or anything else ;that can possibly be resolved by using a different provider... exten => _s-.,1,set(PROV_COUNT=$[${PROV_COUNT}+1]) exten => _s-.,n,gotoif($[${PROV_COUNT}<4]?s,start) exten => _s-.,n,playback(please-hold) exten => _s-.,n,macro(pots_call,${ARG1})