Crear un Fail Over Trunk en Asterisk
Llevo tiempo queriendo compartir este post, el Fail Over Trunk es una de las macros en Asterisk que más hemos utilizado y la que más nos ha servido. Aunque es muy sencillo, te puede ayudar en casos que tu troncal por algún motivo deje de funcionar y tengas que sacar las llamadas por otro lado, sin tener que hacer cambios en el Dialplan.
Supongamos que tenemos dos troncales Trunk 1 y Trunk 2 podemos configurar hasta Trunk n, las especificaremos como variables globales ya que no van hacer modificadas y utilizaremos otra variable que nos dirá el total de troncales que tenemos definidos, en el extensions.conf lo ponemos de la siguiente manera:
[globals] TRUNK_1=10.10.50.50 TRUNK_2=10.10.50.51 TOTAL=2
En el Dialplan escribiremos una Macro con el nombre de “salida” enviando como parámetros la extensión a marcar y el tiempo de marcado:
[macro-salida]
;ARG1 Numero a marcar
;ARG2 Tiempo de marcado
exten => s,1,NooP(Numero a marcar -> ${ARG1} | tiempo de marcado -> ${ARG2} )
exten => s,n,Set(CONTADOR=1)
exten => s,n(while),GotoIf($["${CONTADOR}" > "${TOTAL}"]?fin)
exten => s,n,Dial(SIP/${ARG1}@${TRUNK_${CONTADOR}}|${ARG2}|g)
exten => s,n,NooP(DIAL STATUS -> ${DIALSTATUS})
exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?fin)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?fin)
exten => s,n,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?fin)
exten => s,n,Set(CONTADOR=$[${CONTADOR} + 1])
exten => s,n,Goto(while)
exten => s,n(fin),MacroExit
Con las variables del DIALSTATUS podemos saber si la llamada ha fallado o si ha tenido un resultado satisfactorio, por lo que si el dialstatus retorna un CHANUNAVAIL, es posible que este caído nuestro Carrier asignado a ese troncal, con lo que intentará utilizar el segundo troncal especificado.