1/24/2012

Plan de Marcado (Dialplan)



Dialplan Básico


El dialplan es el corazón  de su sistema Asterisk. Este define como el flujo el de llamada entra y sale de su sistema. Es una forma de lenguaje de scripting, el dialplan contiene instrucciones que Asterisk sigue en repuesta a eventos externos. Al contrario de un sistema de teléfono tradicional, el dialplan de Asterisk es completamente personalizable.

Sintaxis del Dialplan.


El dialplan es especificado en el archivo de configuración extensions.conf. Este archivo usualmente reside en el directorio /etc/asterisk, pero esta localización puede variar dependiendo de cómo usted instalo Asterisk. Otras localizaciones comunes para este archivo son /usr/local/etc/asterisk y /opt/etc/asterisk.


El dialplan está compuesto por cuatro conceptos fundamentales: contexts (contextos), extensions (extensiones), prorities (prioridades) y Applications (aplicaciones). Después de explicar el papel que cada uno de esto elemento juega en el dialplan, construiremos un dialplan básico pero funcional.

Contextos

Los dialplan son divididos en secciones más pequeñas llamadas contexto. Los contextos evitan que las diferentes partes del dialplan interactúen una con otra. Una extensión que es defina en un contexto es completamente aislada de cualquier otra extensión en otro contexto, a menos que la interacción sea especialmente permitida.


Los contextos son definidos por poner en nombre del contexto encerrado en corchetes ([]). Los nombres pueden estar compuestos por letras de la A hasta la Z (mayúscula y minúscula), números del 0 al 9, guión (-) o la raya baja (_). Un contexto para una llamada entrada podría ser al como esto:


[entrante]  


Los nombres de contexto tienen una longitud máxima de 79 caracteres.


Todas las instrucciones puestas después de la definición de un contexto son parte de este contexto, hasta que el próximo contexto es definido. Al principio del dialplan, hay dos nombre de contextos muy especiales [general] y [globals]. La sección [general] contiene una lista setting o configuración que afectan el dialplan en general. Evite el uso de [general], [default] y [global] como nombre de contexto, por lo contrario puedes usar cualquier cosa que desee como nombre de contexto.


Cuando usted define un canal (channel) (lo cual no es definido en el archivo en el archivo extensions.conf, sino más bien en archivos tales como sip.conf, iax.conf, chan_dahdi.conf, etc.), uno de los parámetros requerido en cada definición de canales es el contexto. El contexto es el punto dentro del dialplan donde las conexiones de un canal se iniciaran.


Extensiones


En el mundo de las telecomunicaciones, la palabra extensión usualmente se refiere a un identificador numérico que, cuando es marcado, hará sonar un teléfono (o recursos del sistema, tales como correo de voz). En Asterisk, una extensión es mucho más poderosa, ya que esta define una serie de pasos único a través de los cuales Asterisk llevara las llamadas.


Dentro de cada contexto, nosotros podemos definir tanta (o pocas) extensiones como sean requerida. Cuando una extensión particular es activada (por una llamada entrante o porque los dígitos han sido marcados  sobre un canal), Asterisk sigue los pasos definidos para esta extensión. Es la extensión, por lo tanto, que específica que pasa con la llamada a medida que hace su recorrido  a través del dialplan. Aunque las extensiones pueden, por supuesto, ser usado para especificar la extensión telefónica en el sentido tradicional, en el dialplan de Asterisk, pueden ser usadas para hacer mucho más cosas.


La sintaxis de una extensión es la palabra exten, seguida por una flecha formada por un signo de igualdad (=) y el signo de mayor que (>). Ejemplo


exten=>


Esta (=>) es seguida por el nombre (o número) de la extensión. Cuando tratamos con sistema de teléfono tradicional, nosotros tendemos a pensar en extensión como un número que usted marcaria para hacer  que otro teléfono suene. En Asterisk, extensión es un concepto mucho más amplio; por ejemplo, un nombre de extensión puede ser cualquier combinación de números y letras.


Cada paso en una extensión se compone de tres componentes:
  • El nombre (o numero) de la extensión
  •   La prioridad (cada extensión puede incluir múltiples pasos; los números número de paso es llamado prioridad.)
  • La aplicación (o comando) que toma lugar en cada paso.
Estos tres componentes van separados por comas, como este:


 exten => name,priority,application()

Este es un ejemplo simple de cómo podría lucir una extensión real:

exten => 123,1,Answer()

En este ejemplo, el nombre de la extensión es 123, la prioridad es 1, y la aplicación es Answer().


Prioridad

Cada extensión puede tener múltiples pasos, llamado prioridad. Las prioridades son numeradas secuencialmente, iniciando con 1, y cada una ejecuta una aplicación específica. Como un ejemplo, la siguiente extensión contestaría el teléfono (en la prioridad número 1), y  después cuelga el teléfono (en la prioridad número 2):

exten => 123,1,Answer()
exten => 123,1,Hangup()

Es bastante obvio que este código no hace nada realmente útil. El punto clave para notar aquí es que, para una extensión particular, Asterisk sigue el orden de prioridades. Este estilo de sintaxis de dialplan es todavía visto de vez en cuando, aunque no suele utilizarse más para los nuevos código.

exten => 123,1,Answer()
exten => 123,2,hacer algo
exten => 123,3,hacer otra cosa
exten => 123,4,hacer una última cosa
exten => 123,5,hangup()


Prioridades sin numerar

En las versiones anteriores, la numeración de prioridades causo muchos problemas. Imagine tener una extensión  que tenga 15 prioridades, y después necesitar agregar alguna cosa en el paso 2: todas las prioridades subsecuentes tendría que ser reenumerada manualmente. Asterisk no maneja los pasos erróneos o prioridades mal numeradas, y la depuración de este tipo de errores era inútil y frustrante.

A partir de la versión 1.2, Asterisk abordó este problema: se introduce el uso de las prioridades n, lo cual significa “next” (siguiente). Cada vez que Asterisk encuentra una prioridad n, toma el número de la prioridad anterior y le agrega 1. Esto hace que sea fácil realizar cambios en su dialplan, como usted no tiene que tener reenumerado todos sus pasos. Por ejemplo, su dial plan podría ser algo asi:

exten => 123,1,Answer()
exten => 123,n,hacer algo
exten => 123,n,hacer otra cosa
exten => 123,n,hacer una última cosa
exten => 123,n,hangup()

Internamente, Asterisk calcula el próximo número de prioridad cada vez que encuentra una n. Recuerde que usted debe siempre especificar la prioridad número 1. Si usted pone n en vez de 1 para la primera prioridad, cuando vuelva a cargar el dialplan encontrara que la extensión no existe.  
  
Nota: Este tema continua en la próxima entrega




Aprende a Implementar Asterisk paso a paso y en español
Libro: Asterisk PBX: Instalación, implementación y puesta en marcha.
Descargar Ahora

1/19/2012

Archivos de configuración de Asterisk



En esta sección, voy a presentar a los archivos de configuración de Asterisk, y le mostrará cómo utilizar algunas características avanzadas.
Asterisk es un sistema de telefonía muy flexible. Sin embargo, aun con esta flexibilidad, es un poco complejo. Asterisk tiene unos pocos archivos de configuración los cuales controlan casi todos los aspectos de como este opera. El formato de estos archivos de configuración, sin embargo, es muy simple. Los archivos de configuración son archivos de texto plano, y pueden ser editado con cualquier editor de texto.
Secciones y configuración
Los archivos de configuración son cortados dentro de varias secciones, los nombres de las secciones son encerrados en corchetes. Los nombres de secciones no pueden contener espacios, y son sensibles a minúscula y mayúscula. Dentro de cada sección, usted puedes asignar valores para varias configuraciones. En general,  la configuración en una sección es independiente de los valores de en otra sección. Algunas configuraciones toman valores tales como falso y verdadero, mientras que otras tienen valores más específicos.  La sintaxis para asignar un valor para una configuración es escribir el nombre de la configuración, un signo igual y el valor, así:


[nombre-sección]
setting=true

[otra_sección]
setting=false
setting2=true

Algunos archivos de configuración de Asterisk también pueden crean objetos. La sintaxis para un objeto es ligeramente diferente, de la sintaxis para la configuración. Para crear un objeto, usted debe especificar el tipo de objeto, una flecha formada por el signo igual (=>), un  signo de mayor que, y la configuración de ese objeto.

[sección-nombre]
algun_objeto => settings

[sección-nombre]
etiqueta1=valor1
etiqueta2=valor2
objeto1 => nombre1

etiqueta1=valor0
etiqueta3=valor3
objeto2  => nombre2 
Para hacerle la vida más fácil a los usuarios que se inician con Asterisk y que no tienen ninguna experiencia con los archivos de configuración, los desarrolladores han hecho que usted también pueda crear objetos con el signo de igual. Por lo tanto, las siguientes líneas son también funcionalmente equivalentes.

algún_objeto => settings

algún_objeto = settings

Es común ver ambas versiones de sintaxis, especialmente en la documentación en línea de Asterisk.
En el ejemplo anterior, objecto1 hereda tanto a etiqueta1 y etiqueta2.  Es importante señalar que el objecto2 también hereda etiquta2, junto con etiqutal1 (con el nuevo valor remplazan el valor de valor0) y etiquta3.
En resumen, todos los objetos heredan los valores definidos por encima de ellos en la sección actual.


Comentarios

Podemos agregar comentarios en los archivos de configuración de Asterisk. Los comentarios hace los archivos de configuración  mas fácil de leer, y pueden ser usado para temporalmente deshabilitar ciertas configuración.

Comentarios en una sola línea

Los comentarios en una sola línea comienzan con el carácter (;)  punto y coma. El analizador de configuración de Asterisk trata todo después del punto y coma como un comentario. ver el siguiente ejemplo:

[nombre-contexto]
setting=true

[otro_contexto]
setting=false      ; este es un comentario
; esta linea es un comentario
;awesome=true  ; el punto y coma al principio de la linea convierte 
;la instrucción en comentario.




Bloques de Comentarios

Asterisk también permite crear bloques de comentarios. Un bloque de comentario es un comentario que comienza con una secuencia de carácter.


;--




 y continua a través   de múltiples líneas .

--;


hasta que el carácter que cierra el comentario es encontrado. Los bloque de comentarios finalizan inmediatamente después que --; es encontrado.

Usando el constructor Include y  Exec.

El constructor #include le dice a Asterisk para leer el contenido de otro archivo de configuración, y actúa como si el contenido estuviera localizado en el archivo de configuración principal. La sintaxis es #include nombre-archivo, donde nombre-archivo es el nombre del archivo que usted quiere incluir. Este constructor es mayormente usado para cortar un archivo de configuración grande en piezas más pequeñas, por que es mas manejable.  

El #exec va un paso mas adelante. Este permite ejecutar un programa externo, y poner la salida de este programa dentro del archivo de configuración actual. La sintaxis es #exec programa, donde programa es el nombre del programa que usted quiere ejecutar. 


Habilitando la Funcionalidad #exec

El constructor #exec no esta habilitado por defecto, porque tiene alguno riesgo en termino de rendimiento y seguridad. Para habilitar esta funcionalidad, edite el archivo de configuración asterisk.conf (localizado por defecto en /etc/asterisk) y localice la sección [options], cambie la opción  execincludes=yes. Por defecto el encabezado de la sección [options] y la opción execincludes=yes son marcados como comentarios, usted debe remover el punto y coma del comienzo ambas lineas.

Veamos un ejemplo de ambos constructores en acción.

[nombre-contexto]
setting=true
#include  otro archivo.conf      ; Incluye otro archivo de configuración.
# exec otroprograma               ; ejecutar otro programa


  
Agregando Configuración para una Sección Existente


Si usted quiere agregar parámetros de configuración para una sección que ya existe de un archivo de configuración (o mas adelante, o cuando se usan los constructores  #include y #exec), agregue un signo de (+) encerrado paréntesis, después del encabezado de la sección, como se muestra abajo:

[nombre-contexto]
setting=value1

[nombre-contexto](+)
setting2=value2


El ejemplo muestra que el parámetro setting2 fue agregado para una sección existente del archivo de configuración. 

Los Templates (o plantillas)

Otro constructor que podemos usar dentro de la mayoría de los archivo de configuración de Asterisk son los templates. Un template es una sección de un archivo de configuración que es unicamente usado como una base para crear otras secciones desde esta.

Sintaxis de las Plantillas


Para definir una sección como un template, ponga un signo de exclamación (!) dentro de paréntesis después del encabezado de la sección, como se muestra en el ejemplo siguiente:


[nombre-plantilla](!)
setting=value

Usando Plantillas (Templates)

Para usar una plantilla cuando crea otro contexto, simplemente debe poner el nombre de la plantilla dentro paréntesis después del nombre del encabezado del contexto a crear, como se muestra. Si usted quieres heredar múltiples plantillas, use coma para separar los nombres de las misma. Ejemplo.

[nombre-contexto1](!)          ; esto define el nombre de contexto como una plantilla
setting=value

[nombre-contexto2](!)        ;le indica al contexto 2 que herede los parámetros del contexto 1
settting=value2

[nombre-contexto3](nombre-plantilla1,nombre-plantilla2)      ; Aqui indicamos al contexto 3 que herede los   parámetros de la plantilla 1 y 2.

 La nueva sección creada heredara todos los valores y objetos definidos en las plantilla(s), como también cualquier nueva configuración o objetos definido en los nuevo contexto creado.

Los parámetros y objetos nuevos creados sobrescriben los que son definidos con el mismo nombre en la plantilla. Considere este ejemplo: 

















La sección [test-three] será procesada ​​como si se hubiera escrito de la siguiente manera: 



Aprende a Implementar Asterisk paso a paso y en español
Libro: Asterisk PBX: Instalación, implementación y puesta en marcha.
 

1/17/2012

Que es Asterisk?






Es cierto que Asterisk comenzó como un sistema telefónico para una pequeña empresa (ver la "Breve Historia" para los jugosos detalles) pero en la década desde que se publicó por primera vez se ha convertido en una herramienta universal para la construcción de aplicaciones de comunicaciones. Hoy en día el poder de Asterisk no es sólo por que es un sistema PBX IP, sino, también puerta de enlace VoIP (gateway VoiP), sistema de call center, puente de conferencia (conference bridges), servidor de correo de voz (voicemail server) y todos los tipos de aplicaciones que incluyen las comunicaciones en tiempo real.


Asterisk no es una PBX, pero es el motor que impulsas las centrales PBXs. Asterisk no es una IVR, pero es el motor que impulsas IVRs. Asterisk no es un call center, pero es el motor que impulsa los sistema ACD/queueing.

Asterisk es una aplicación para la comunicaciones. como lo es el servidor web Apache para la aplicaciones web. Apache es un servidor web. Asterisk es un servidor de comunicación. Apache maneja todos los detalles de bajo nivel de envió y recepción de datos usando el protocolo HTTP. Asterisk maneja todos los detalles de bajo nivel de envió y recepción de datos usando muchos protocolos de comunicación diferentes. Cuando usted instala apache, usted tiene un servidor web, pero depende de usted para crear la aplicación web. Cuando usted instala asterisk usted tiene un servidor de comunicaciones, pero depende de usted para crear la aplicación de comunicación.

En ambos casos el servidor es la tubería que hace que su aplicación trabaje. El servidor manejas la complejidad de bajo nivel y le permite a usted, él desarrollar la aplicación, concentrarse en la parte lógica y presentación de la aplicación.
Usted no tiene que ser un experto en HTTP para crear una aplicación web poderosa, como tampoco tiene que ser un experto en SIP o Q.931 para crear una aplicación de comunicación poderosa.
Este es un ejemplo simple. El siguiente scripts HTML, instalado sobre un servidor web, imprime la palabra "Hola Mundo".
 
<html>
  <head>
    <title>Hola Mundo</title>
  </head>
  <body>
    <h1>Hola Mundo!</h1>
  </body>
</html>


El siguiente scrip de un plan de marcado (Dialplan) contesta el teléfono, espera un segundo, reproduce "Hola Mundo" y luego cuelga.

exten => 200,1,Answer()
exten => 200,n,Wait(1)
exten => 200,n,Playback(hola-mundo)
exten => 200,n,Hangup()

En ambos casos los componentes del servidor están manejando los detalles de bajo nivel de los protocolos subyacentes. Su aplicación no tiene que preocuparse por la alineación de bytes, tamaños de paquetes, codec o cualquier otros de los miles de detalles critico que hacen que su aplicación funciones
 
Quien Usa Asterisk?



Asterisk fue creado por desarrolladores de sistema de comunicación, para desarrolladores de sistema de comunicación. Como un proyecto de código abierto (open source), Asterisk es una colaboración de muchos individuos y compañías, cada uno de los cuales necesitaba un motor de comunicación flexible, para aplicaciones poderosa.


Aprende a Implementar Asterisk paso a paso y en español
Libro: Asterisk PBX: Instalación, implementación y puesta en marcha.

Instalando Asterisk



   

Asterisk: The Definitive Guide


Hay varias maneras para conseguir iniciar con Asterisk sobre su propio sistema.
·     Al Instalar una distribución  de asterisk basada en Linux tal como asteriskNow, este se encarga de instalar Linux, asterisk y alguna interface web, todo al mismo tiempo, y es la forma más fácil para empezar, si usted es nuevo en Linux y/o asterisk.
·     Si usted está familiarizado con Linux o Unix  usted puede simplemente instalar los paquetes de Asterisk y las herramientas relacionada, usando el manejador de paquetes en su sistema operativo.

 Para mayor control de su instalación, usted puede compilar e instalar asterisk desde el código fuente.
 Instalar AsteriskNow es fácil. Simplemente visite http://www.asterisknow.org/ y descargue la ultima versión. El  archivo que usted descargue tendrá una extensión .iso. Grabe la imagen .iso para CD, y bootee su sistema desde el CD.  
Tenga en cuenta que la instalación de AsteriskNow sobrescribirá cualquier dato existente en su disco duro. Haga una copia de respaldo de los datos que considere importante para una ubicación diferente.
Cuando usted inicia desde el CD de AsteriskNow, vera una pantalla introductoria. Simplemente presione ENTER para continuar la instalación.
A medida que el instalador avanza, se le indicara  para introducir varias piezas de información.


  • Esquema del Disco Duro. Es recomendado seleccionar “Remover todas las particiones sobre el disco seleccionado y crear esquema de particiones por defecto”. Y pasar a la siguiente pantalla. Esto borrara todo los datos sobre el sistema.
  •  Configuración de zona horaria. Seleccione la ubicación más cercana a usted y pasar a la siguiente pantalla.
  •  Root password: El usuario es el usuario administrativo sobre un sistema Linux. La mayoría de la configuración del sistema requiere acceso root. Si este password se pierde. Es difícil de recuperar. Es recomendado que su password contenga una mezcla  de letras minúscula, mayúscula, números y/o símbolos.
 Después  de la última opción, la instalación comenzara. Esto toma aproximadamente entre 15-30 minutos. Una vez la instalación se ha completado el sistema se reiniciara.  
Por defecto, AsteriskNow usa DHCP paa obtener una dirección IP sobre su redes. Usted puede usar el comando ifconfig en Linux para ver su dirección IP actual o el system-config network para cambiar su configuración de red.
Método Alterno para Instalar Asterisk  
Si usted tiene un sistema Linux que puede dedicar para Asterisk, simplemente use el manejador de paquetes en su sistema operativo para instalar Asterisk, DAHDI y libpri. La mayoría de las distribuciones moderna de Linux tal como Debian, Ubuntu y Fedora tienen estos paquetes en su repositorio. Paquetes para Linux Red Hat Enterprise y CentOs están disponible en http://packages.asterisk.org/ .
Validando su Instalación de AsteriskNow

Antes de seguir adelante, permítame verificar unas cuantas cosas para asegurarnos de que su sistema está trabajando bien. En primer lugar vamos asegurarnos que los controladores DAHDI fueron cargados. Después de iniciar sección como usuario root, puede utilizar el comando Linux  lsmod para listar todos los módulos del Kernel cargados, y el comando grep  para filtrar las entradas, para que únicamente se muestren los modules que contienen dahdi en su nombre.

[root@server asterisk-1.6.X.Y]# lsmo
Si el comando no retorna nada, entonces DAHDI no ha sido iniciado. Inicie DAHDI por correr:
[root@server asterisk-1.6.X.Y]# service 
Si usted tiene DAHDI corriendo, la salida de lsmod | grep dahdi puede lucir algo como la salida mostrada abajo (Los detalles exactos pueden ser diferente, dependiendo sobre de cual módulo de DAHDI es la salida.
[root@server ~]# lsmod | grep dahdi
 
dahdi_dummy          4288   0
dahdi_transcode      7928   1 wctc4xxp
dahdi_voicebus       40464  2 wctdm24xxp,wcte12xp
dahdi                        196544 1dahdi_dummy,wctdm24xxp,wcte11xp,wct1xxp,wcte12xp,wct4xxp
crc_ccitt            2096   1 dahdi
Ahora que DAHDI está corriendo, usted puede correr dahdi_hardware para listar cualquier dispositivo  compatible con DAHDI sobre su sistema. También puede correr el utilitario  dahdi_tool para mostrar los varios dispositivos compatibles con DAHDI, y su estado actual.
Para chequear si Asterisk está corriendo, usted puede usar el Asterisk initscrit.
[root@server ~]# service asterisk status
asterisk is stopped
 
Cuando Asterisk inicia, este corre como un servicio en el background (o daemon), 
Así que por lo general no se verá ninguna respuesta en la línea de comandos. Usted puede 
chequear el estado  de Asterisk y ver si este está corriendo por usar el comando abajo. 
 
[root@server ~]# service asterisk status
asterisk (pid 32117) is running...


 
Y ahí lo tienen... usted tiene el sistema Asterisk en marcha y funcionando!
 
 
 
Aprende a Implementar Asterisk paso a paso y en español
Libro: Asterisk PBX: Instalación, implementación y puesta en marcha.