Professional Documents
Culture Documents
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Centrales Asterisk
CONCEPTO
SERVIDOR
LINEAS Y ANEXOS
TERMINALES
DIAL PLAN
ASTERISK GUI
1 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
p.e. context=from-internal
Todas las instrucciones por debajo del nombre del contexto son asignadas a ese mismo contexto hasta que un
nuevo contexto sea declarado.
Al inicio del archivo extensions.conf, existen dos contextos especiales
-[General]
-[Globals]
La seccin general, contiene los parmetros generales del dial plan.
La seccin globals, contiene las variables globales del sistema, las cuales irn siendo utilizadas por los contextos
siguientes.
EXTENSIONES:
Normalmente conocemos con el nombre de extensin, al numero que se le asigna a los terminales telefnicos,
sin embargo en asterisk una extensin es mucho mas que un nmero _ telefnico, ya que define una serie de
pasos (donde cada paso contiene una aplicacin) que asterisk realizara durante una llamada.
La sintaxis usada para declarar una extensin es la palabra exten, seguido de una flecha formada por una
signo igual y un signo mayor
p.e. exten =>
Esto va seguido por el numero de la extensin.
exten => name,priority,application()
Una extensin completa esta compuesta de:
El nombre (o numero) de la extensin.
La prioridad (cada extensin puede incluir mltiples pasos, el numero del paso es llamado prioridad)
La aplicacin (o comando) es el que realiza la accin en la llamada.
PRIORIDADES:
Cada extensin puede tener multiples pasos, llamados prioridades, cada prioridad es numerada
secuencialmente, comenzando con 1, y ejecutando una aplicacin especifica.
Existe un tipo de prioridad no numerada que se representa con la letra n y permite evitar problemas generados
por la numeracin secuencial.
Esta prioridad no numerada significa que cada prioridad es igual a la prioridad anterior +1
Por lo tanto: n=n+1
p.e. exten => 123,1,Answer()
exten => 123,n,do something
exten => 123,n,do something else
exten => 123,n,do one last thing
exten => 123,n,Hangup()
PRIORIDADES - ETIQUETAS:
Desde asterisk 1.2, es muy comn asignar etiquetas de texto (labels), a las prioridades. Esto es para
asegurarnos que podremos referirnos a esa prioridad por un valor distinto a su numero, el cual probablemente
no se conozca (prioridad n), y dado que actualmente el uso de prioridades no numeradas es muy usual en el
diseo de una dial plan.
Para asignar una etiqueta de texto a una prioridad, solo basta con agregarla entre parntesis justo despus del
numero de la prioridad.
p.e. exten => 123,n(label),application()
APLICACIONES:
2 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Las aplicaciones son el caballito de batalla del dial plan, cada aplicacin realiza una accin especifica sobre el
canal actual, como por ejemplo, tocar una meloda, aceptando entradas de tono, marcar un canal, colgar una
llamada, y as sucesivamente.
Algunas aplicaciones como Answer() o Hangup(), no requieren mayor informacin para hacer su trabajo, sin
embargo existen otras aplicaciones que si requieren de cierta informacin adicional para procesarla, a esta
informacin adicional se le conoce como parmetros, y para pasarle los parmetros a la aplicacin deben
colocarse entre los parntesis.
Ocasionalmente podramos ver el pipe entre los parntesis, y es que este signo es utilizado para separar mas de
un parmetro.
CONSTRUYENDO UN DIAL PLAN SIMPLE:
Answer(), Playback(), Hangup()
Vamos a construir un dial plan que consista en que , asterisk contesta la llamada, toca una meloda, y luego
cuelga.
Para este ejemplo vamos a asumir que ya hemos creado la extensin y que tiene como nombre de contexto
from-internal
Para la construccin de este dial plan utilizaremos las siguientes aplicaciones:
Answer()
Playback()
Hangup()
Answer(), es la aplicacin que se utiliza para que la central conteste una llamada que esta timbrando.
Se puede utilizar al inicio de la configuracin del contexto para una extension, pero en algunas ocasiones no es
necesario.
Como ya mencionamos, Anwser() no tiene argumentos
Playback(), es la aplicacin que se utiliza para reproducir un sonido grabado previamente en un archivo o a
travs de un canal.
Cuando utilizamos playback, las entradas (inputs) del usuario desde la extension son ignoradas.
Para utilizar playback() se debe ingresar el nombre del archivo sin la extension (p.e. .wav o .mp3) como
argumento entre los parntesis.
Por defecto playback buscara el archivo ingresado como argumento en la ruta /var/libs/asterisk/sounds
Si se desea hacer referencia a un archivo ubicado en otra ruta, se deber ingresar la ruta completa entre los
parntesis
Playback(/home/john/sounds/filename)
Lo mas comun es crear una carpeta para estos archivos dentro de la ruta por defecto
Playback(custom/filename)
Ahora si vamos a crear nuestro dial plan
[from-internal]
exten => 1234,1,Answer()
exten => 1234,n,Playback(hello-world)
exten => 1234,n,Hangup()
CONSTRUYENDO UN DIAL PLAN INTERACTIVO:
Background(), WaitExten(), and Goto()
La aplicacin background, es la pieza vital para un dial plan interactivo.
El background(), al igual que playback() reproduce una grabacin, pero a diferencia de playback(), esta
aplicacin si permite al usuario ingresar entradas (inputs) desde el teclado del telfono, estas entradas
interrumpen la reproduccin y se dirige a la extensin correspondiente.
3 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
El uso mas comn que suele drsele a la aplicacin background, se encuentra en la construccin de mens de
voz.
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
En el ejemplo anterior por defecto se cortara la llamada, pero si lo que queremos es esperar a que el usuario
ingrese o marque algun codigo podemos agregarle la aplicacin waitexten() al final.
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
La aplicacin WaitExten(), le indica al sistema que espere por el ingreso de una extensin, la cual deber estar
dentro del contexto.
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)
Que ocurre cuando, tenemos un duplicado entre los primeros digitos de las extensiones disponibles:
p.e.
exten
exten
exten
exten
exten
exten
exten
=>
=>
=>
=>
=>
=>
=>
123,1,Answer()
123,n,Background(main-menu)
123,n,WaitExten()
1,1,Playback(digits/1)
2,1,Playback(digits/2)
3,1,Playback(digits/3)
4,1,Playback(digits/4)
Del ejemplo anterior si llamamos al 123, y luego presionamos la opcin 123, volveremos a ir al men, pero que
ocurre si solo presionamos 1.
Como se puede comprobar en la practica asterisk esperara unos segundos cuando se encuentra con mas de una
alternativa posible.
Luego de este tiempo ejecutara la extensin segn los dgitos que fueron ingresados.
Finalmente vamos a mencionar que la aplicacin WaitExten() soporta como argumento el tiempo en segundos
que esperara para que el usuario ingrese una extensin valida, luego de este tiempo terminara esta aplicacin, y
pasara a la siguiente prioridad si existiera.
Ahora vamos a utilizar la aplicacin Goto().
La aplicacin Goto(), es utilizada para enviar una llamada a otra parte del dial plan, la sintaxis de la aplicacin
Goto(), requiere los argumentos contexto, extensin y prioridad.
exten => 123,n,Goto(context,extension,priority)
Background(), WaitExten(), and Goto()
[from-internal]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)
MANEJANDO INPUTS Y TIMEOUTS
[from-internal]
exten => 123,1,Answer()
4 de 15
18/02/2015 13:23
exten
exten
exten
exten
exten
exten
exten
exten
exten
exten
exten
exten
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
123,n,Background(enter-ext-of-person)
123,n,WaitExten()
1,1,Playback(digits/1)
1,n,Goto(from-internal,123,1)
2,1,Playback(digits/2)
2,n,Goto(from-internal,123,1)
3,1,Playback(digits/3)
3,n,Goto(from-internal,123,1)
i,1,Playback(pbx-invalid)
i,n,Goto(from-internal,123,1)
t,1,Playback(vm-goodbye)
t,n,Hangup()
5 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
6 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
[globals]
TELEFONICA=ZAP/1
1977=ZAP/2
BASE CLARO=ZAP/3
JESUS=SIP/201
JUAN=SIP/202
Este tipo de esquema nos permite elaborar un dial plan en funciona a variables y si se produce alguna
modificacin en el esquema, solo bastara con cambiar el valor de la variable y no ser necesario modificar todo
nuestro dial plan.
Variable de canal, esta variable se asocia solamente con una llamada, y a diferencia de las variables globales, las
variables de canal se definen solo para la duracin de la llamada actual, y solo estn disponibles para los canales
que participan de esa llamada.
Existen varias variables de canal predefinidas y estn disponibles para ser utilizadas durante la marcacin.
p.e.
exten => 125,1,Set(MAGICNUMBER=42)
Las variables de entorno, son una forma de acceder a las variables del entorno unix desde asterisk, podemos
hacer referencia a estas variables a travs de la funciona de marcacin env(), la sintaxis de esta variables es:
${ENV(var)} ; donde var es una variable del entorno de linux o unix a la cual queremos referenciar.
Este tipo de variables no son de uso comn en el dial plan pero estn disponibles si fuesen necesarias.
Patrones de Marcado y Variable ${EXTEN}
Los patrones de marcacin son comodines que nos permiten simplificar un grupo de extensiones, con este tipo
de comodines podemos crear reglas que agrupen grandes conjuntos de nmeros en unas cuantas lneas.
X : equivale a un digito 0 9
Z : equivale a un digito 1 9
N : equivale a un digito 2 9
[15-7] : equivale a los dgitos 1, 5, 6, 7.
. : Este comodn equivale a un o mas dgitos sin importar el valor
Patrones de Marcado y Variable ${EXTEN}
La variable EXTEN, toma el mismo valor que el numero de la extensin.
exten => _XXXX,1,SayDigits(${EXTEN})
A partir de esta variable tambin podemos mutilar el numero marcado, por ejemplo si seguimos la siguiente
sintaxis conseguiremos recortar los primeros dgitos del numero.
${EXTEN:x:y} ; X es la posicin donde comenzara el numero resultante y Y es la cantidad de dgitos que
sern retornados
exten => _XXXX,1,SayDigits(${EXTEN:2})
Patrones de Marcado y Variable ${EXTEN}
Los siguientes ejemplos ayudaran a comprender mejor las opciones:
exten
exten
exten
exten
exten
exten
exten
=>
=>
=>
=>
=>
=>
=>
_273443,1,SayDigits(${EXTEN:2}); ${EXTEN:2}=3443
_273443,1,SayDigits(${EXTEN:1}); ${EXTEN:1}=73443
_9388211,1,SayDigits(${EXTEN:3}); ${EXTEN:3}=8211
_9388211,1,SayDigits(${EXTEN:3:2}); ${EXTEN:3:2}=82
_9388211,1,SayDigits(${EXTEN:0:1}); ${EXTEN:0:1}=9
_9388211,1,SayDigits(${EXTEN:0:2}); ${EXTEN:0:2}=93
_9388211,1,SayDigits(${EXTEN:-4:2}); ${EXTEN:0:2}=82
exten => _XXXX,1,SayDigits(${EXTEN:2}), devolver los ltimos 3 dgitos que se hallan marcado
7 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
exten => _9.,1,SayDigits(${EXTEN:1}), de esa manera se devolver el numero que se halla marcado pero sin el
9, listo para salir a la red publica de telefona.
Patrones de Marcado y Variable ${EXTEN}
Habilitando una ruta saliente:
OUTBOUNDTRUNK=ZAP/1
[outbound-local]
exten => _9NXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _9NXXXXX,n,Congestion()
exten => _9NXXXXX,n,Hangup()
Habilitando una llamada a Numero Fijo Local sin prefijo 9:
OUTBOUNDTRUNK=ZAP/1
[fijo-local]
exten => _[2-8]XXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _[2-8]XXXXXX,n,Congestion()
exten => _[2-8]XXXXXX,n,Hangup()
Patrones de Marcado y Variable ${EXTEN}
Habilitando una ruta saliente a nmeros Fijos LDN:
OUTBOUNDTRUNK=ZAP/1
[outbound-local]
exten => _0[4-8]X[2-8]XXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _0[4-8]X[2-8]XXXXX,n,Congestion()
exten => _0[4-8]X[2-8]XXXXX,n,Hangup()
Habilitando una llamada a Numero LDI:
OUTBOUNDTRUNK=ZAP/1
[fijo-local]
exten => _00.,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _00.,n,Congestion()
exten => _00.,n,Hangup()
Includes
Es posible concatenar los contexto mediante el comando include, de echo lo mas comn es disear distintos
contextos para diferentes funciones de la central y luego enlazarlos para formar unos pocos para asignar a los
diferentes tipos de extensiones segn los privilegios o caractersticas que les queremos asignar a cada uno.
Sintaxis:
[contextoA]
include => contextB
Funciones:
Las funciones nos premitiran aumentar el potencial de nuestro dial plan, exiten varias funciones disponibles y
trataremos de explicar las mas utilizadas.
Sintaxis:
FUNCTION_NAME(argument)
Al igual que muchas funciones podemos referenciar a la funcion tal como esta escrito en la sintaxis, sin embargo
tambien podemos hacer referencia del valor de dicha funcion de la siguiente manera:
${FUNCTION_NAME(argument)}
Funciones:
8 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
=>
=>
=>
=>
=>
=>
345,1,Set(TEST=1)
345,n,GotoIf($[${TEST} = 1]?uno:dos)
345,n(uno),Saydigits(12)
345,n,Hangup()
345,n(dos),Saydigits(34)
345,n,Hangup()
9 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Una de las caractersticas mas populares de los telfonos modernos es el sistema de buzn de voz, y
naturalmente asterisk tenia que contar con un sistema de voz muy flexible, algunas de las principales
caractersticas del buzn de voz que nos ofrece asterisk son las siguientes:
Contiene distintos flderes para organizar los mensajes en el buzn.
Saludos distintos para los estados Ocupado
Saludos por defecto, y personalizados
Posibilidad de asociar varios telfonos con un buzn y varios buzones con un telfono
Indicador de mensaje de espera, visual con luz intermitente, y audible con tren de tonos Directorio de la
compaa, basado en el buzn de voz.
El archivo de configuracin se llama voicemail.conf
Creando un Buzn:
Dentro de cada contexto del correo de voz, definiremos distintos buzones de voz, la sintaxis para definir un
buzn de voz es la siguiente:
mailbox => password,name[,email[,pager_email[,options]]]
Pero que funcin cumple cada uno de estos parmetros?
Mailbox: es el numero del buzn de voz, usualmente lleva el mismo numero que la extensin a la que esta
asociado.
Password: es la contrasea numrica que el propietario del buzn de voz utilizara para ingresar a su buzn. Si el
propietario cambia su contrasea el sistema la actualizara en este archivo (voicemail.conf)
Name: Es el nombre del propietario del buzn de voz, el directorio de la compaa utiliza este campo para
realizar la bsqueda del usuario.
Email: Aqu va la direccin de correo electrnico del propietario del buzn de voz, Asterisk puede enviar mensaje
al correo, incluyendo el mismo audio del mensaje.
Pager email: direccin de correo del localizador o celular del propietario donde se enviara un mensaje corto.
Options: en esta campo pueden ir una lista de opciones que permitirn afinar la configuracin del buzn de voz
del propietario del buzn y prevalecen sobre la configuracin global. Hay nueve opciones validas: adjuntar,
servermail, tz, saycid, review, operator, callback, dialout, y exitcontext.
Estas opciones deber ingresarse respetando el formato opcin=valor y separadas por el signo pipe |, la
opcin tz permite definir la zona horaria, a las zonas previamente definidas en la seccin [zonemessages] en el
mismo archivo (voicemail.conf),
Una definicin tpica para un buzn de voz es la siguiente:
101 => 1234,Joe Public,jpublic@somedomain.com,jpublic@pagergateway.net,tz=central|attach=yes
El buzn de voz utiliza la aplicacin voicemail(), esta aplicacin enva al llamante a una especifico buzn de voz
para que pueda dejar el mensaje, el buzn de voz debe ser especificado como mailbox@context donde
context es el nombre del contexto del correo de voz, opcionalmente se puede agregar las letra b y u, para
diferencias los tipos de saludo (ocupado y no disponible).
Vamos a poner algunos ejemplos de cmo configurar el buzn de voz en nuestro dial plan
exten => 201,1,Dial(${JOHN})
; esta extensin permite llamar a la extensin de Jhon.
10 de 15
18/02/2015 13:23
exten
exten
exten
exten
exten
exten
=>
=>
=>
=>
=>
=>
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
201,1,Dial(${JOHN},10)
201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
201,n(unavail),Voicemail(101@default,u)
201,n,Hangup()
201,n(busy),VoiceMail(101@default,b)
201,n,Hangup()
=>
=>
=>
=>
=>
=>
201,1,Dial(${JOHN},10)
201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
201,n(unavail),Voicemail(101@default,u)
201,n,Hangup()
201,n(busy),VoiceMail(101@default,b)
201,n,Hangup()
En el hemos automatizado la forma como las llamadas ingresaran directamente al buzn de voz dependiendo del
estado de la extensin utilizando la variable ${STATUS}, sin embargo as como esta tendramos que agregar
estas lneas por cada extensin en la central ya que esta extensin estar siempre ligada hacia el usuario Jhon o
sea la extensin 201.
Utilizaremos las macros para mostrar cual es la mejor manera de configurar una buzn de voz para varias
extensiones.
Definiendo la macros
La macros se definen de una manera muy similar a los contextos,
debemos definir una macros entre corchetes y anteponiendo la palabra
macro- antes del nombre de la macro que vamos a crear.
Ejemplos:
[macro-prueba]
[macro-voicemail]
De esta manera el sistema podr diferenciar una macro de un contexto
normal
11 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Definiendo la macros
Veamos un ejemplo con el buzn de Jhon pero ahora dentro de una
macros
[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(101@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(101@default,b)
exten => s,n,Hangup()
Uno punto importante es mencionar que las macros solo soportan la
extensin S
Todo va bien solo que aun seguimos amarrados al buzn de Jhon.
Definiendo la macros
Sin embargo las macros tienen propiedades importantes a comparacin
de un contexto comn corriente. Y es que permiten trabajar con algunas
variables adicionales e incluso soportan el envi de argumentos
Incorporando una macros al Dial Plan:
exten => 201,1,Macro(voicemail)
Las aplicacin macro define variables especiales, para su utilizacin:
${MACRO_CONTEXT}, contiene el contexto original desde donde fue ejecutada la macro
${MACRO_EXTEN}, contiene el valor de la extensin original donde fue ejecutada la macro
${MACRO_PRIORITY}, contiene la prioridad original desde donde fue ejecutada la macro
${ARGn}, contiene el n mismo argumento ingresado a travs de la macro, por ejemplo, el primer argumento
ser ${ARG1}, el segundo argumento ser {ARG2} y as sucesivamente.
En el siguiente ejemplo trataremos de explicar como se pueden utilizar esta variables especiales:
[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
Usando argumentos en las macros
Ahora vamos a prepara una macros genrica gracias a los argumentos, observemos el siguiente ejemplo donde
por fin separamos la macros del numero de la extensin, para poder utilizarla desde cualquier extensin.
[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()
De esta manera podemos llamar a la macros desde el dial plan
[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
12 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
13 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Realizar una transferencia atendida, consiste en llamar al destino para confirmar la transferencia, antes de
realizarla.
Este tipo de transferencia suele ser necesario para trabajadores que no acostumbran contestar ni llamar
directamente de su extensin, tales como funcionarios, gerentes, ejecutivos, etc.
El siguiente grafico nos ilustrara el proceso de comunicacin.
Se puede habilitar una combinacin para la transferencia atendida, por ejemplo *2 para simular la tecla flash
PARQUEO DE LLAMADAS
En algunas ocasiones durante una conversacin telefnica es necesario movilizarnos ( para ir a conseguir un
archivo, documento, o realizar alguna consulta), pero lamentablemente no es posible ni practico que todos los
usuario cuenten con un anexo inalmbrico, en estos casos es ideal contar con la funcin de parqueo de llamadas.
Esta funcin consiste en aparcar una llamada en una extensin virtual dentro de nuestra central telefnica, de
esta manera podremos recuperar esa llamada simplemente llamando a la extensin virtual creada en el
momento que aparcamos la llamada
14 de 15
18/02/2015 13:23
http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html
Esta opcin tambin se encuentra en la seccin general y podemos definir o modificar el cdigo por defecto *8
en el parmetro:
Pickupexten = *8
Pero ser necesario tambin que asignemos los grupos a cada extensin en el archivo sip.conf.
El grupo puede asignarse mediante los parmetros:
Callgroup=1, donde 1 es el nmero del grupo de llamada
Pickupgroup=1, donde 1 es el nmero del grupo para pickup
|
Entrada ms reciente
Pgina principal
Entrada antigua
Copyright emeese 2008 Centrales Asterisk | Diseo de Arcsin Web Templates - Plantilla blogger por Blog and Web
15 de 15
18/02/2015 13:23