Skip to content

Como cortar una variable en el dialplan de Asterisk

by Gonzalo on 22 noviembre, 2011

Me preguntan como cortar una variable en el dialplan de Asterisk para hacer algo tan sencillo como que si el número es un fijo nacional (de España) y empieza por 9 lo mande por un troncal y si es un móvil que empieza por 6 lo mande por otro troncal (enlaces gsm).
Esto en Asterisk es muy fácil.
Supongamos que previamente en el dialplan hemos definido la variable de número a llamar en la variable TELF, like así:

exten => [69]XXXXXXXX,n,Set(TELF=${EXTEN})

Luego podríamos quedarnos con el primer número de la variable $TELF y decidir si sale por un lado o por otro:

exten => s,1,NoOp(Definimos si es una llamada a la exten SIP/moviles o SIP/fijos)
   same => n,ExecIf($[${TELF:0:1} = 9]?Set(SIPTRUNK=SIP/fijos):Set(SIPTRUNK=SIP/moviles))
   same => n,Dial(${SIPTRUNK}/${TELF},20)

Explico:

  • same => – es la nueva forma (mucho más cómoda) de especificar extensiones en el dialplan desde la 1.6
  • ${TELF:0:1} – tómalo como un array. Empezando por el primer elemento de la variable (0) cogen el siguiente número de elementos (solo 1 en este caso). Osea el primer número. Si pusiésemos ${TELF:0:3}, serían los tres primeros (por ej el prefijo 981) y si pusiésemos ${TELF:-9:1} sería el primer número también, ya que empezaría por el final hasta el 9º elemento y cogería a partir de ahí el primero.
  • ExecIf($[${TELF:0:1} = 9] – Si el primer número de la variable $TELF es 0 =9 ejecuta…
  • Set(SIPTRUNK=SIP/fijos):Set(SIPTRUNK=SIP/moviles) – …ejecuta que definas la variable SIPTRUNK=SIP/fijos o si no es = 9 que la variable SIPTRUNK=SIP/móviles
  • Dial(${SIPTRUNK}/${TELF},20) – Haz la llamada por el troncal adecuado
  • Fácil, no?

    Comments are closed.