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