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

Comentarios

Enviar un comentario nuevo

CAPTCHA
Esta pregunta es para averiguar si eres un humano (aunque troll)
Image CAPTCHA
Enter the characters shown in the image.
Distribuir contenido Distribuir contenido