Mis apuntes sobre el dialplan - Freeswitch

El dialplan de freeswitch se basa en expresiones regulares.

A regular expression,regex or regexp.

http://wiki.freeswitch.org/wiki/Regular_Expression
Info: http://www.regular-expressions.info/
http://www.regular-expressions.info/numericranges.html

Ejemplos de expresiones regulares:

^(0034\d+)$    numeros que empiezan por 0034 y al menos contienen algun digito mas

^(0031\d*)$    num. que empiezan por 0034 aunque no tengan ningun digito mas.

^(0\d+)$    para que todas las llamadas que empiecen por 0

^(\d{9})$    para todos los numeros marcados de 9 cifras

^9(\d{9})$    para los numeros de 9 cifras que comienzan por 9 (el 9 primero no se marca)

^(0\d+)$    para los numeros que empiezan por 0 y luego cualquier numero de cifras (el 0 no se envia)

^6(\d+)$    empiezan por 6 y cualquier numero de cifras

^(1{0,1}\d{10})$  numero que empieza por 1 y le sigue un digito 0 o un digito  1 (10 u 11)

ademas de cualquier numero de 10 digitos

(^\d{4}|\d{3}$)    cadena de exactamente 4 o 3 digitos

Example: 1001 will match with $1 having "1001"
         102 will match with $1 having "102"
         *9999 will not match
         *98 will not match

^(9\d+|6\d+)$  Para numeros de cualquier numero de cifras que empiezan por 9 o por 6

^(9\d{8}|6\d{8})$  numeros de 9 cifras que empiezan por 9 o por 6
El numero 9 y 6 se incluye en la cadena, por eso 8 cifras mas 1 = 9 cifras

Notas:

Cuando los numeros estan antes y fuera del parentesis, despues del ^, no se incluyen en el numero marcado.

Lo que va entre parentesis se mete en vbles, $0, $1, ... automaticamente por freeswitch

El primer parentesis es $1, y asi sucesivamente.

\d escapa la letra d que significaria eso mismo, letra d

Pero lo que queremos decir es digito, hay que ponerla con la \ para escaparla.

Ejemplo bestia (de la wiki del principio):
^(\+?1)?(8(00|55|66|77|88)[2-9]\d{6})$
Example: 8005551212 or 18005551212 or +18005551212 will match and in each case $2 is populated with "8005551212"

^ - indicates the beginning of a regular expression (required);

( - indicates the beginning of a regular expression block - blocks are important to define inner expressions so they can be referenced by the variables $1, $2, $3, etc;

\+1|1? - indicates an optional digits '+1' or '1' (the ? sign defines the literal as optional);

) - closes the block;

8 - matches the literal '8';

( - another block starting;

00|55|66|77|88 - matches 00 or 55 or 66 or 77 or 88 (you guessed right, the | sign is the OR operator);

) - closes the inner block;

[2-9] - matches one number in the range from 2 to 9 (2, 3, 4, 5, 6, 7, 8 and 9), and as you also guessed the [] pair defines a range (other range examples: [0-9] matches 0 to 9; [a-z] matches a, b, c, ..., z);

\d - matches any valid digit (same as [0-9]);

{6} - defines a number of occurrences for the previous definition i.e. exactly 6 digits in the range 0-9. This can also contain a variable number of occurrence, for example to match a sequence of 6 to 9 digits: {6,7,8,9};

) - closes the other block;

$ - indicates the end of the regular expression required;

Estas se meten en el archivo /usr/local/freeswitch/conf/dialplan/default.xml o mejor en
/usr/local/freeswitch/conf/dialplan/default/   para tenerlo mas modular y ordenado.

Aqui tendremos ficheros extension_name.xml

Sentencias en default.xml incluyen todos los archivos .xml del subdirectorio default

Por ejemplo para configurar un trunk de salida con freecall (o cualquier clon de betamax)

<extension name="freecall">
   <condition field="destination_number" expression="^(0\d+)$">
       <action application="bridge" data="sofia/gateway/freecall/$1"/>
   </condition>
</extension>

Es decir, todos los numero que empiecen por 0 se envian por freecall, con el 0 incluido a menos que use $0 en vez de $1
Si pongo ^0(\d+)$ trata cualquier cadena, pero marca sin el 0:
0952223344 marcaria 952223344
Puedes jugar con la vble $0 o $1 o con el dialplan.

Si en vez de poner sofia/gateway/freecall/$1 pones  sofia/gateway/freecall/34$1
añadira al principio del numero a marcar el prefijo 34 (necesario para morrotel)

Juanjo A.

Un saludo

Distribuir contenido Distribuir contenido