Hola.
Aqui estoy de nuevo con otra pequeña aportación para la comunidad, esta vez les voy a mostrar como hacer un plan de marcado de Asterisk a prueba de bombas ( o casi jeje).
En este caso lo que vamos a hacer es trabajar con 2 troncales de 2 operadores SIP. Intentaremos sacar la llamada 3 veces por el primero, y si no lo conseguimos, reintentamos otras 3 veces más con el segundo, es muy sencillo.
; Definimos variables. Numero de intentos y proveedores
exten => s,1,Set(INTENTOS=3)
exten => s,n,Set(PROVEEDOR1=SIP/proveedor1)
exten => s,n,Set(PROVEEDOR2=SIP/proveedor2)
Con este parrafo definimos todas las variables que vamos a utilizar. En la primera linea, declaramos una variable llamada INTENTOS que valdrá 3, serán los intentos a realizar para cada proveedor. PROVEEDOR1 y PROVEEDOR2 estan definidos en mi archivo sip.conf.
; Intentamos sacar llamada por TRUNK 1
exten => s,n(llamar),Set(REALIZADOS=0)
exten => s,n(dial),Dial(${PROVEEDOR1}/${MACRO_EXTEN},30)
exten => s,n,Set(REALIZADOS=$[${REALIZADOS}+1])
exten => s,n,GotoIf($[${REALIZADOS} < ${INTENTOS}]?dial:proveedor2)
Con esto, intentamos sacar la llamada. La primera linea «setea» la variable REALIZADOS en 0 y a continuación se ejecuta el Dial, si ocurre algún problema sigue a la siguiente linea, en la que, incrementamos el valor de REALIZADOS en 1. Abajo comparamos si REALIZADOS es MENOR que INTENTOS, como si que lo es, ejecutará dial (volver a ejecutar de nuevo el Dial()). Esto ocurria 3 veces, a la 3º el plan de marcado seguirá hasta la etiqueta proveedor2.
; Reintentamos sacar llamada por TRUNK 2
exten => s,n(proveedor2),Set(REALIZADOS=0)
exten => s,n(redial),Dial(${PROVEEDOR2}/${MACRO_EXTEN},30)
exten => s,n,Set(REALIZADOS=$[${REALIZADOS}+1])
exten => s,n,GotoIf($[${REALIZADOS} < ${INTENTOS}]?redial)
exten => s,n,Goto(ERROR,1)
exten => ERROR,1,Playback(beep)
exten => ERROR,n,Hangup
En la primera linea volvemos a setear REALIZADOS en 0 y a continuación intentamos marcar de nuevo pero esta vez con $PROVEEDOR2.
Si falla, sigue su camino y incrementa la variable REALIZADOS. El gotoIf hará la misma comparación y mientras REALIZADOS sea menor que INTENTOS (3) seguirá intentandolo.
Si en esta ocasión falla al intentar sacar la llamada 3 veces, irá a parar a ERROR, el cual, hará que en el telefono suene un pitido y colgará.
Esto es todo, espero que les sirva.
Un saludo 😀