Volver a Fundamentos de Telefonia

Introduccion a Asterisk

Que es AsteriskAsterisk es el mayor proyecto de software libre diseñado para la integración y unificación de los sistemas de comunicaciones conocidos

Originalmente fue concebido como una plataforma para la generación de un sistema PBX, pero con el tiempo ha ido evolucionando a otro tipo de usos, como Pasarelas VoIP, sistemas integrales para call-centers, salas de conferencias, buzones de voz, y todo tipo de aplicaciones que tengan relación con las comunicaciones en tiempo real.

Comparativamente Asterisk es para el mundo de las comunicaciones lo mismo que sería Apache para el mundo de las aplicaciones web. Apache es un servidor web, y Asterisk es un servidor de comunicaciones.

Asterisk es una plataforma de comunicaciones basada en la filosofia Open Source, es capaz de convertir una computadora comun en un completo servidor de comunicaciones.

¿Que es Asterisk?

Realmente esta pregunta puede ir mucho más allá de la definición común que se establece para el sistema.

Existen ciertas consideraciones que hacen a Asterisk lo que realmente es en la actualidad, y una de las principales surge de la propia naturaleza del sistema: La filosofía Open Source.

Considerando Asterisk como una plataforma integral de comunicaciones, podría considerarse la más importante, y ha resultado como única por muchos años en un entorno, donde todos los sistemas de comunicación eran totalmente privativos. Aunque con el tiempo, fueron sacando interfaces comúnmente conocidos como CTI para la integración de sistemas de terceros para cumplir funciones muy específicas, la potencia de estas interfaces era bastante limitada dado que el núcleo de los sistemas privados, permanencia cerrado al público.

Con Asterisk se sienta un precedente desde el momento que el código es de libre acceso, modificación y ampliación, dado que múltiples colectivos pudieron ampliar sus necesidades y adaptarlas a lo que venían buscando en un momento concreto, que un sistema de comunicaciones pudiera ofrecerles, dentro de sus extensivas bondades.

Historia y Evolucion de Asterisk

Mark Spencer creador de AsteriskEl desarrollo de Asterisk fue iniciado en el año 1999 por Mark Spencer. En aquel momento ya existían otros proyectos de telefonía basados en la ideología Open Source. Pero esos proyectos estaban realmente enfocados a la telefonía a nivel software, basados en la búsqueda de establecer comunicaciones entre ordenadores a través de los sistemas de audio. La diferencia de Asterisk con estos proyectos, era la idea preconcebida, de entrelazar por primera vez la red de telefonía común (PSTN) con un ordenador.

Y para ello se formó una alianza con un proyecto de telefonía llamado Zapata iniciado por Jim Dixon. La idea del proyecto Zapata, era la posibilidad de diseñar tarjetas específicas para convertir la señal analógica que provenía de la PSTN a una señal digital, y ahorrar costes en la construcción de dispositivos de telefonía y audio avanzados (y muy costosos) gracias a la tremenda reducción de costes que sufrían año tras año los procesadores. A través de estos, cada vez más potentes, y baratos, se podrían procesar una o varias señales de audio digital (DSP) sin gran dificultad y poder paralelamente construir teléfonos con ese coste reducido.

Hoy en día el proyecto Zapata, fue integrado totalmente en Asterisk, y Asterisk patrocinado por una empresa que construye dispositivos de telefonía digital, llamada Digium, y se ha acomodado como una parte más de Asterisk con un nuevo nombre: DAHDI (son las siglas de Digium Asterisk Hardware Device Interface).

La primera version estable surgio casi 5 años despues, Asterisk 1.0. A partir de aqui el sistema de versiones ha evolucionado de la siguiente forma:

  • Asterisk 1.0 – 2004
  • Asterisk 1.2 – 2005
  • Asterisk 1.4 – 2006
  • Asterisk 1.6.0 – 2008
  • Asterisk 1.6.1 – 2009
  • Asterisk 1.6.2 – 2009
  • Asterisk 1.8 – 2010
  • Asterisk 1.10 – 2011 (Nuevo Nombre Asterisk 10)

Asterisk SCF

Asterisk SCF es un entorno todavía en vías de desarrollo que aunque originalmente no ha sido lanzado para reemplazar al sistema original Asterisk, ofrecerá una evolución en múltiples términos que supondría en un futuro su posible adaptación por la mayoría de los usuarios del mismo.

La idea intencional esta basada, en la posibilidad de ofrecer un sistema capaz de ser desplegado en Clusters, o múltiples sistemas con total transparencia, algo que en la actualidad el sistema Asterisk no puede ofrecer de por si, y en caso de necesitar algun tipo de escalado, era necesario recurrir a soluciones alternativas como los Proxies SIP como los reconocidos Opensips o Kamailio. Según la definición ofrecida por los desarrolladores, “Asterisk SCF ha sido arquitectónicamente diseñado para ofrecer los máximos niveles de disponibilidad, escalabilidad, extensibilidad, tolerancia a fallos y rendimiento” .

Arquitectura de Asterisk

La arquitectura de Asterisk esta basada en un sistema modular, que depende del núcleo principal del sistema.

Arquitectura de Asterisk

El núcleo del sistema principalmente se basa en cuatro componentes:

  • Gestión de Módulos
  • Temporizador de Sistema
  • Gestión de Canales
  • Interfaces de Sistema

La estructura de Asterisk es totalmente independiente de los dispositivos, troncales, y demás útiles externos al mismo. En la gran parte de las PBX tradicionales, es muy común observar el hecho que existen estructuras lógicas para diferenciar entre los teléfonos y otros dispositivos de telefonía como faxes, y por otro lado líneas entrantes como troncales primarios, líneas RDSI, etc. En Asterisk este concepto no existe, todo entra al sistema como un canal genérico y luego es gestionado de forma integral. Aunque sean diferenciados, todos se gestionan de la misma forma por eso, incluso recursos externos pueden llegar a ser manejados dentro de las posibilidades, de la misma forma, que una extensión SIP interna.

A priori esto puede parecer bastante obvio, pero el verdadero potencial se demuestra cuando empezamos a trabajar con estos canales dentro del plan de Marcación.

Módulos

Como comentábamos antes, Asterisk esta basado en módulos independientes, los cuales pueden ser cargados y descargados a voluntad, en función de las necesidades que deseemos proveer al sistema.

Cada modulo posee una funcionalidad especifica, de tal forma que puedan tratarse todos los aspectos del sistema, pasando por los tipos de canales (SIP, IAX, DAHDI) o conexiones a otros sistemas para interactuar con Asterisk (mail, bases de datos, web, etc.).

Existe un archivo especifico para la configuración de los módulos llamado modules.conf (dentro de la ruta especifica de instalación de Asterisk típicamente /etc/asterisk).

Durante la instalación del sistema Asterisk, es posible seleccionar que módulos pretendemos instalar. En caso que instalemos una gran cantidad de modulo que tengamos intención de utilizar en un futuro avanzado, pero no a corto plazo, por motivos de seguridad es altamente recomendable señalar específicamente que no se carguen dentro del fichero de configuración utilizando la propiedad noload =>

Todas las posibilidades que nos ofrece el fichero de configuración modules.conf las podremos ver en su apartado específico.

Dentro del sistema de módulos, estos se clasifican en diferentes subapartados como vemos a continuación los más populares:

  • Aplicaciones
  • Recursos
  • Funciones del Dialplan
  • Registro del detalle llamadas
  • Registro de eventos de canales
  • Drivers de canales
  • Traductores de Codecs y Formatos
  • Add-ons

Aplicaciones

Las aplicaciones son aquellas acciones aplicables al manejo de las llamadas dentro del Plan de Marcación. Por ejemplo, la mas popular en todos los planes sería la aplicación Dial, la cual simplemente tiene como propósito lanzar una llamada a un canal en función de las propiedades que señalemos durante su ejecución. Existen otras aplicaciones comunes, como VoiceMail (encargada de la gestión del Buzón de Voz), Record (para grabar el sonido de un determinado canal), etc.

Algunas características en común de las aplicaciones son las siguientes:

  • Las acciones están exclusivamente enfocadas por y para los canales.
  • Se carga de forma dinámica
  • Se ejecutan de manera síncrona.
  • El formato clásico de este tipo de módulos es app_<nombre>.so

Recursos

La función especifica de los recursos es la de integrar Asterisk con los sistemas externos. Hablamos de bases de datos, servidores web, calendarios, etc.

Tienen la capacidad de utilizar por si mismos, Aplicaciones del sistema como veíamos antes. Pero una de las diferencias con respecto a estas, es que se cargan de manera estática, y pueden operar simultáneamente en múltiples canales, en vez de crearse dinámicamente para cada canal en curso.

Uno de los mas comunes, es el recurso para ofrecer servicios de Música en Espera (Music ion Hold), o para realizar interconexiones con bases de datos a través de ODBC.

El formato clásico de este tipo de módulos es res_<nombre>.so

Funciones del Dialplan

La idea fundamental detrás de las Funciones es la capacidad de obtener o añadir, determinada información especifica a cada canal. Suelen ser complementarias a las Aplicaciones y son capaces de ofrecer mejoras para determinados aspectos del sistema que de por si pudieran ser limitados.

Por ello la forma mas común de ser utilizadas es a través de la Aplicación Set

Por ejemplo una función típica es la capaz de recoger el Identificador de llamada de un canal (CALLERID) para poder manejarlo dentro del plan de marcación a voluntad.

El formato clásico de este tipo de módulos es func_<nombre>.so

Drivers de canales

Son los drivers específicos para cada tipo de canal disponible actualmente o en un futuro para Asterisk. Estos son los que aportan específicamente la posibilidad de volver totalmente independiente el sistema de los mismos para así poder tratarlos de forma totalmente homogénea. Son exactamente una especie de interfaz entre el núcleo de Asterisk y la parte “lógica” dentro del sistema operativo. Es exactamente un API.

Todos los canales mas típicos, tienen su correspondiente modulo para el driver. Ejemplos típicos son el especifico para DAHDI, SIP e IAX, que justamente son los más utilizados por la comunidad Asterisk. El resto no están lo suficientemente difundidos, aunque tienen soporte y van mejorando con el tiempo, como el especifico para tratar con estaciones Cisco, llamado como su protocolo propietario, Skinny (SCCP).

El formato clásico de este tipo de módulos es chan_<nombre>.so

Traductores de Codecs y Formatos

Son la representación para los sistemas de audio y vídeo digitales de trasmisión (codecs) y almacenamiento (formatos).

De alguna forma, son los encargados de convertir vía software, entre un tipo y otro tipo de formato o códec de forma simultanea al curso de la llamada.

Por ejemplo, si una llamada, viene del canal DAHDI, con el códec G.711 (alaw o ulaw dependiendo del país) y quiere pasarse a una extensión SIP dentro de nuestro sistema Asterisk, el traductor correspondiente será el encargado de realizar esta conversión en tiempo real.

Por otro lado, si lo que estamos tratando son archivos, los encargados de interpretar el contenido para pasarlo a través del audio del canal correspondiente serían los traductores de Formatos. En este ámbito los mas populares son los estándares, GSM y WAV en los que están basados la mayor parte de los sonidos por defecto del sistema Asterisk (los mensajes pregrabados).

El formato clásico de para los módulos de codecs es codec_<nombre>.so y para los de formatos format_<nombre>.so

Interfaces

Asterisk se despliega y comunica con el entorno a través de múltiples interfaces que provee, tanto para trabajos de gestión y mantenimiento manuales, como para su autogestión de forma estática, y sistemas externos que puedan recabar datos de forma dinámica y automática, y finalmente pasando a ofrecer interfaces para poder trabajar con lenguajes de programación que provean a su vez al sistema de nuevas funcionalidades extra que no estén construidas en su interior.

Todo esto se puede desglosar en cuatro estructuras básicas:

  • Ficheros de Configuración
  • Interfaz de Comandos (CLI)
  • Interfaz Pasarela (AGI)
  • Interfaz de Gestión (AMI)

Archivos de Configuración

Todos se encuentran en la ruta de instalación por defecto de Asterisk, que suele ser en la mayor parte de los casos /etc/asterisk. Suele existir un fichero de configuración que “soporte” la funcionalidad especifica que puede aportar al sistema un modulo especifico, y suelen acabar con el formato .conf, como podría ser el caso de chan_dahdi.conf, que como veríamos antes, sería el fichero encargado de ofrecer toda la configuración especifica para el modulo encargado de gestionar el canal dedicado a DAHDI.

Una parte de los ficheros de configuración es posible que sean editados de forma dinámica a través de una Base de Datos. A esta funcionalidad se le ha llamado Asterisk Realtime, y por ejemplo es muy popular para la configuración del fichero especifico para el modulo dedicado al canal SIP (sip.conf). Pero la mayor parte del resto de los ficheros, son editados de forma manual, aunque en los últimos años se han popularizado unas interfaces gráficas de usuario para hacer esta tarea mas intuitiva como FreePBX.

CLI

En términos generales, podría considerarse la consola de administración del sistema. En un apartado especifico dentro de esta Wiki, podremos encontrar mas información relativa a este interfaz ya que es fundamental saber utilizarlo para la correcta gestión y mantenimiento del sistema de forma eficaz.

Asterisk Manager Interface

En la mayor parte de las PBX mas populares del mundo, existe un componente para poder ofrecer nuevas funcionalidades al sistema original a través de sistemas de procesamiento autónomos u ordenadores. Este recurso suele llamarse CTI (Computer Telephony Integration), y por regla general suele ser bastante limitado, ya que su potencial suele radicar en la cantidad de información que seamos capaces de extraer del mismo.

En Asterisk este CTI es llamado AMI, y su potencial es prácticamente ilimitado ya que podemos recoger prácticamente cualquier elemento interno en función de la configuración que apliquemos al mismo. Principalmente recibe todos aquellos comandos que sean capaces los módulos del sistema de aportar a la interfaz.

Sistemas como marcadores predictivos, gestores de llamadas, sistemas de facturación, etc, se fundamentan en esta interfaz.

La forma de interacción es bastante básica, ya que esta basado en un flujo de texto simple.

Asterisk Gateway Interface

Muy parecido al uso de Aplicaciones, disponemos de esta pasarela para poder ejecutar servicios en los canales, pero basados en otros lenguajes de programación diferentes a la estructura de Asterisk en si.

Existen librerías AGI prácticamente para todos los lenguajes mas populares como pueden ser, PHP, Python, Java, Ruby on Rails, etc.

Con esto tenemos un potencial ilimitado para crear o entrelazar aplicaciones ya existentes con nuestro sistema Asterisk, y obtener aun mas funcionalidad de la que el sistema provee de por si.

Plan de Marcación (Dialplan)

Como parte fundamental de la arquitectura de Asterisk vamos a hacer una breve reseña sobre la espina vertebral de Asterisk que podrá verse específicamente mas ampliado dentro de un apartado de esta Wiki.

Si pudiéramos considerar el flujo de cualquier interacción de Asterisk y a su vez este flujo como un lenguaje de programación en si (o un script), de como por ejemplo las llamadas son gestionadas, este concepto se llamaría en Asterisk Plan de Marcación (o mas popularmente conocido como Dialplan).

Existen tres formas de diseñar el dialplan:

  • A través de un fichero de configuración simple
  • Utilizando AEL (Asterisk Extension Logic)
  • Mediante el lenguaje de programación LUA

Pero la forma mas popular y extendida es el caso del fichero de configuración en su correspondiente sección se verán de forma mas extendida estas posibilidades.

Curso basico de Asterisk

Introducción a Asterisk

Asterisk es una centralita software (PBX) de codigo abierto. Como cualquier centralita PBX permite interconectar telefonos y conectar dichos telefonos a la red telefónica convencional (RTB – Red telefónica básica)- Su nombre viene del simbolo asterisco (*) en inglés.

El creador original de esta centralita es Mark Spencer de la compañia Digium que sigue siendo el principal desarrollador de las versiones estables. Pero al ser de código libre, existen multitud de desarrolladores que han aportado funciones y nuevas aplicaciones. Originalmente fue creada para sistemas Linux pero hoy en día funciona también en sistemas OpenBSD, FreeBSD, Mac OS X, Solaris Sun y Windows. Pero Linux sigue siendo la que mas soporte presenta.

El paquete básico de Asterisk incluye muchas características que antes sólo estaban disponibles en caros sistemas propietarios como creación de extensiones, envío de mensajes de voz a e-mail, llamadas en conferencia, menus de voz interactivos y distribución automática de llamadas. Además se pueden crear nuevas funcionalidades mediante el propio lenguaje de Asterisk o módulos escritos en C o mediante scripts AGI escritos en Perl o en otros lenguajes.

Para poder utilizar telefonos convencionales en un servidor Linux corriendo Asterisk o para conectar a una línea de teléfono analógica se suele necesitar hardware especial (no vale con un modem ordinario). Digium y otras compañias venden tarjetas para este fin.

Pero quizás lo mas interesante es que Asterisk soporta numerosos protocolos de VoIP como SIP y H.323. Asterisk puede operar con muchos telefonos SIP, actuando como “registrar” o como “gateway” o entre telefónos IP y la red telefónica convencional. Los desarrolladores de Asterisk han diseñado un nuevo protocolo llamado IAX para un correcta optimización de las conexiones entre centralitas Asterisk.

Al soportar una mezcla de la telefonía tradicional y los servicios de VoIP, Asterisk permite a los desarrolladores construir nuevos sistemas telefónicos de forma eficiente o migrar de forma gradual los sistemas existentes a las nuevas tecnologías. Algunos sitios usan Asterisk para reemplazar a antiguas centralitas propietarias, otros para proveer funcionalidades adicionales y algunas otras para reducir costes en llamadas a larga distancia utilizando Internet.

Instalacion de Asterisk

Asterisk para linux

La página de referencia es http://www.asterisk.org/

Nos descargamos la versión 1.6.2.20 y lo descomprimimos

1) Instalar Asterisk

# tar -zxvf asterisk-1.6.2.20.tar.gz
# rm -f asterisk-1.6.2.20.tar.gz
# cd asterisk-1.6.2.20

2) ejecutar “make”

Suponiendo que todo ha ido correctamente

3) ejecutar “make install”

Si es la primera vez que instalas la centralita Asterisk es recomendable instalar los ejemplos con el comando

4) “make samples”

Pero recuerda que este comando sobreescribirá todos los archivos de configuración que ya tengas.

Finalmente puedes arrancar el Asterisk con el comando:

# asterisk -vvvc

Verás un montón de mensajes en la pantalla cuando Asterisk se inicializa. (las vvv pertenecen al modo ” very very verbose” y la c a que nos mostrará al final una linea de comandos en forma consola)

*CLI>

A partir de este momento ya está Asterisk instalado y funcionando. Se puede utilizar el comando “help” para ayuda

También puedes utilizar el comando “man asterisk” en la línea de comandos de linux para obtener detalles de como arrancar y parar el servidor Asterisk.

Los ficheros de configuración de Asterisk se habrán instalado en el directorio /etc/asterisk donde podrás encontrar un montón de información.

Vamos a comprobar que funciona:

Configuramos un softphone como el SJPhone o  X-Lite, para poder acceder a nuestro propio Asterisk. La configuración que hemos hecho trae dos usuarios por defecto que podemos utilizar:

A: usuario: 3000 password=cualquiera vale
B: usuario: 3001 password=cualquiera vale

Una vez que lo tenemos configurado y el usuario se ha registrado correctamente en nuestro servidor podemos llamar a algunos numeros de prueba que vienen por defecto en el plan de numeración:

1000 – Menú principal
1234 – Pasar llamada a la consola (veréis en la consola la llamada)
1235 – Contestador automático de la consola
1236 – LLamar a la consola

3000 – LLamar al usuario SIP 3000
3001 – LLamar al usuario SIP 3001

500 – Llamar a Digium

600 – Prueba de eco

8500 – Menu del contestador

99990 Test AGI
99991 Test EAGI
99992 Dice la hora
99999 Suena música de manera infinita

700 Deja aparcada la llamada
701-720 Llamadas aparcadas

Una buena prueba en este momento es configurar 2 softphones en dos computadoras diferentes; uno con el usuario 3000 y otro con el usuario 3001 e intentar hacer una llamada entre ambos. Si funciona podemos pasar a aprender a configurar Asterisk y crear nuevos usuarios y planes de numeración.

Primeros pasos con Asterisk

Una vez instalado Asterisk en Windows o Linux vamos con un ejemplo sencillo de las primeras cosas que podemos hacer. Este ejemplo consiste en crear dos nuevas extensiones con sus buzones de voz.

1. Vamos a crear dos usuarios SIP nuevos.

Por ejemplo los usuarios “20000” y “20100” con contraseñas “a20000b” y “b20100a”

Para ello vamos al archivo sip.conf y añadimos las siguientes líneas al final del archivo:

[20000]
type=friend
secret=a20000b
qualify=yes
nat=no
host=dynamic
canreinvite=no
context=miprimerejemplo
mailbox=20000@miprimerbuzon

[20100]
type=friend
secret=b20100a
qualify=yes
nat=no
host=dynamic
canreinvite=no
context=miprimerejemplo
mailbox=20100@miprimerbuzon

2. Vamos a crear las extensiones para esos usuarios

Vamos a crear las extensiones para esos usuarios en el archivo extensions.conf de manera que si marcamos el 20000 hablaremos con el usuario 20000 y si marcamos el 20100 hablaremos con el usuario 20100. También creamos el numero del buzón de voz para consultar los mensajes para que sea el 30000.

Añadimos las siguientes líneas al final del archivo extensions.conf

[miprimerejemplo]
exten => 20000,1,Dial(SIP/20000,30,Ttm)
exten => 20000,2,Hangup
exten => 20000,102,Voicemail(20000)
exten => 20000,103,Hangup

exten => 20100,1,Dial(SIP/20100,30,Ttm)
exten => 20100,2,Hangup
exten => 20100,102,Voicemail(20100)
exten => 20100,103,Hangup

exten => 30000,1,VoicemailMain

3. Vamos a crear las buzones de voz para esos usuarios

Vamos a crear lus buzones de voz de ambos usuarios y asignarles una contraseña en el archivo voicemail.conf .Al buzón 20000 le vamos a dar la contraseña 1234 y al buzón 20100 la contraseña 4321

[miprimerbuzon]
20000 => 1234,Pedro,pedro@midominio.com
20100 => 4321,Juan,juan@midominio.com

4. Reinicializamos el asterisk

5. Configuramos un softphone

Configuramos uno o dos softphones y probamos a llamar entre ambos usuarios o a dejar mensajes en el contestador cuando no están disponibles. También podemos llamar al número 30000 para escuchar nuestros mensajes.

Configuración del archivo sip.conf

El archivo sip.conf sirve para configurar todo lo relacionado con el protocolo SIP y añadir nuevos usuarios o conectar con proveedores SIP.

Aquí hay un ejemplo básico del archivo sip.conf:

[general]
context=default
port=5060 ; Puerto UDP en el que responderá el Asterisk
bindaddr=0.0.0.0 ; Si queremos especificar que Asterisk esté en una IP (si un equipo tiene 3 IPs por ej.) 0.0.0.0 vale para cualquiera
srvlookup=yes ; Habilita servidor DNS SRV

[pedro]
type=friend
secret=welcome
qualify=yes ;Tiempo de latencia no superior a 2000 ms.
nat=no ; El telefono no usa NAT
host=dynamic ; El dispositivo se registra con una IP variante
canreinvite=no ; Asterisk por defecto trata de redirigir
context=internal ; El contexto que controla todo esto

El archivo sip.conf comienza con una sección [general] que contiene la configuración por defecto de todos los usuarios y “peers” (proveedores). Se puede sobreescribir los valores por defecto en las configuraciones de cada usuario o peer.

– En general los servidores SIP escuchan en el puerto 5060 UDP. Por tanto configuramos port=5060 . En algunos casos, por ejemplo si utilizamos SER (Sip Express Router) con Asterisk debemos cambiar este puerto.

– DNS es una forma de configurar una dirección lógica para que pueda ser resuelta. Esto permite que las llamadas sean enviadas a diferentes lugares sin necesidad de cambiar la dirección lógica. Usando el DNS SRV se ganan las ventajas del DNS mientras que deshabilitandolo no es posible enrutar llamadas en base a nombre de dominios. Conviene tenerlo activado, por tanto se pone la directiva srvlookup=yes

Cada extensión está definida por un user o usuario, un peer o proveedor o un friend o amigo y viene definida con un nombre entre corchetes [].

– El tipo (type) “user” se usa para autenticar llamadas entrantes, “peer” para llamadas salientes y “friend” para ambas. En nuestro caso hemos definido una extensión pedro como “friend”. Puede realizar y recibir llamadas.

Secret es la contraseña usada para la autenticación. En este caso será “welcome”.

– Se puede monitorizar la latencia entre el servidor Asterisk y el telefono con qualify=yes para determinar cuando el dispositivo puede ser alcanzado En este caso Asterisk considera por defecto que que un dispositivo está presente si su latencia es menor de 2000 ms (2 segundos). Se puede cambiar este valor poniendo el numero de milisegundos en vez de yes.

– Si una extensión está detrás de un dispositivo que realiza NAT (Network Address Translation) como un router o firewall se puede configurar nat=yes para forzar a Asterisk a ignorar el campo información de contacto y usar la dirección desde la que vienen los paquetes.

Si ponemos host=dynamic quiere decir que el telefono se podrá conectar desde cualquier dirección IP. Podemos limitar a que dicho usuario solo pueda acceder con una IP o con un nombre de dominio. Si ponemos host=static no haría falta que el usuario se registrará con la contraseña proporcionada en “secret”,

– También se ha puesto canreinvite=no. En SIP los invites se utilizan para establecer llamadas y redirigir el audio o video. Cualquier invite después del invite inicial en la misma conversación se considera un reinvite.
Cuando dos usuarios han establecido la comunicación con canreinvite= yes (por defecto) los paquetes RTP de audio podrían ser enviados extremo a extremo sin pasar por el servidor Asterisk. Esto, normalmente, no suele ser conveniente en casos en los que haya NAT en alguno de los clientes. (NAT=yes).
Usando canreinvite=no se fuerza a Asterisk a estar en medio no permitiendo que los puntos finales intercambien mensajes RTP directamente.
De todos modos, existen numerosas condiciones en que Asterisk no permite el reinvite a pesar de que no pongamos esta condición ya que necesita controlar el flujo RTP. Por ejemplo: Si los clientes usan codecs diferentes, si hay opciones de Music On hold o temporizadores en la llamada, etc …

Por último context=internal indica el contexto donde está las instrucciones para dicha extensión. Esto está relacionado con el contexto del archivo extensions.conf que marca el plan de numeración para ese contexto. Por tanto el contexto internal debe existir en el fichero extensions.conf o de lo contrario deberiamos crearlo. Varios extensiones pueden tener el mismo contexto.

Opciones avanzadas:

En las siguientes columnas tenemos las posibilidades de configuración para los tipos “user” y “peer”. En el caso de “friend” valen las dos tablas ya que un “friend” es a la vez ambos

User Peer Explicación y opciones
context context Indica el contexto asociado en el dialplan para un usuario o peer
permit permit Permitir una IP
deny deny No permitir una IP
secret secret Contraseña para el registro
md5secret md5secret Contraseña encriptada con md5
dtmfmode dtmfmode El modo en el que se transmiten los tonos. Pueden ser “RFC2833” o “INFO”
canreinvite canreinvite Con “no” se fuerza a Asterisk a no permitir que los puntos finales intercambien mensajes RTP directamente.
nat nat Indica si el dispositivo está detrás de un NAT con “yes”
callgroup callgroup Define un grupo de llamadas
pickupgroup pickupgroup Define el grupo de llamadas validas para una aplicacion pickup()
language language Define las señales para un pais. Debe estar presente en el archivo indications.conf
allow allow permite habilitar un codec. Pueden ponerse varios en un mismo usuario Posibles Valores:
“allow=all” ,”allow=alaw”, “allow=ulaw”, “allow=g723.1″ ; allow=”g729” , “allow=ilbc” , “allow=gsm”.
disallow disallow permite deshabilitar un codec. Puede tomar los mismos valores que allow
insecure insecure Define como manejar las conexiones con peers Tiene los siguientes valores very|yes|no|invite|port Por defecto es “no” que quiere decir que hay que autenticarse siempre.
trustpid trustpid Si la cabecera Remote-Party-ID es de confianza. Por defecto “no”
progressinband progressinband Si se deben generar señales en banda siempre. Por defecto never
promiscredir promiscredir Permite soportar redirecciones 302. Por defecto “no”
callerid Define el identificador cuando no hay ninguna otra informacion disponible
accountcode Los usuarios pueden estar asociados con un accountcode . Se usa para facturacion.
amaflags Se usa para guardar en los CDR y temas de facturación . Puede ser “default”, “omit”, “billing”, o “documentation”
incominglimit Limite de llamadas simultaneas para un cliente
restrictcid Se usa para esconder el ID del llamante. Anticuada y en desuso
mailbox Extensión del contestador
username Si Asterisk actua como cliente SIP este es el nombre de usuario que presenta en el servidor SIP al que llama
fromdomain Pone el campo From: de los mensajes SIP
regexten
fromuser Pone el nombre de usuario en el from por encima de lo que diga el callerID
host dirección o host donde se encuentra el dispositivo remoto. Puede tomar valores:
– Una IP o un host concreto
– “dynamic” con lo que valdría cualquier IP pero necesita contraseña
– “static” vale cualquier IP pero no es necesario contraseña
mask
port Puerto UDP en el que responderá el Asterisk
qualify Para determinar cuando el dispositivo puede ser alcanzado
defaultip IP por defecto del cliente host= cuando es especificado como “dynamic”
rtptimeout Termina la llamada cuando llega a ese timeout si no ha habido tráfico rtp
rtpholdtimeout Termina la llamada cuando llega a ese timeout si no ha habido tráfico rtp “on hold”

Ejemplos:

[grandstream1]
type=friend ; es peer y user a la vez
context=micontexto ; nombre del contexto
username=grandstream1 ; suele ser el mismo que el titulo de la seccion
fromuser=grandstream1 ; sobreescribe el callerid
callerid=Jose Dos<1234>
host=192.168.0.23 ; se tiene una IP privada dentro de una LAN
nat=no ; no hay NAT
canreinvite=yes ;
dtmfmode=info ; puede ser RFC2833 o INFO
mailbox=1234@default ; mailbox 1234 en el contexto “default” del fichero voicemail.conf
disallow=all ; deshabilitamos todo
allow=ulaw ; Permitimos el codec ulaw
; listed with allow= does NOT matter!
;allow=alaw
;allow=g723.1 ; Asterisk solo soporta g723.1 a través
;allow=g729 ; Licencia g729 sól a través

[xlite1]
;Se puede activar la supresión de silencio
;Xlite manda paquetes NAT keep-alive, por tanto qualify=yes no es necesario
type=friend
username=xlite1
callerid=”juan Perez ” <5678>
host=dynamic ; el softphone xlite puede estar en cualquier IP
nat=yes ; X-Lite está detrás de un dispositivo NAT
canreinvite=no ; Se suele poner NO si está detrás de un dispositivo que hace NAT
disallow=all
allow=gsm ; GSM consume menos ancho de banda que alaw o ulaw
allow=ulaw
allow=alaw

[user1_snomsip]
type=friend
secret=blah ; en este caso es la contraseña para registrarse
host=dynamic
dtmfmode=inband ; las posibilidades son inband (en banda), rfc2833, o info
defaultip=192.168.0.59 ; la IP del dispositivo
mailbox=1234; Contestador para mensajes
disallow=all
allow=ulaw ; dado que se ha elegido en banda (inband) para el dtmf se debe seleccionar alaw o ulaw (G.711)
allow=alaw

[user2_pingtel]
type=friend
username=user2_pingtel
secret=blah
host=dynamic
qualify=1000 ; Se considera caido si pasa más de 1 segundo sin contestar
callgroup=1,3-4 ; Es miembro de los grupos 1,3 y 4
pickupgroup=1,3-4 ; Se puede hacer un “pickup” para los grupos 1,2 y 4
defaultip=192.168.0.60 ;IP
disallow=all
allow=ulaw
allow=alaw
allow=g729

[user3_cisco]
type=friend
username=user3_cisco
secret=blah
nat=yes ; El telefono está nateado
host=dynamic
canreinvite=no ;
qualify=200 ; Tiempo de 200 ms para recibir respuesta
defaultip=192.168.0.4
disallow=all
allow=ulaw
allow=alaw
allow=g729

[user4_cisco1]
type=friendusername=user4_cisco
fromuser=pedro ;
secret=blah
defaultip=192.168.0.4 ;
amaflags=default ; Las posibilidades son default, omit, billing o documentation
accountcode=pedro ; Para propósitos de tarificación
disallow=all
allow=ulaw
allow=alaw
allow=g729
allow=g723.1

 

Configuración del archivo extensions.conf (DialPlan)

El archivo extensions.conf es el más importante del Asterisk y tiene como misión principal definir el dialplan o plan de numeración que seguirá la centralita para cada contexto y por tanto para cada usuario.

El archivo extensions.conf se compone de secciones o contextos entre corchetes []
Hay dos contextos especiales que están siempre presentes que son [general] y [globals]

Contexto [general]
El contexto [general] configura unas pocas opciones generales como son:

static : Indica si se ha de hacer caso a un comando “save dialplan” desde la consola. Por defecto es “yes”. Funciona en conjunto con “writeprotect”
– writeprotect : Si writeprotect=no y static=yes se permite ejecutar un comando “save dialplan” desde la consola. El valor por defecto es ” no” .
– autofallthrough : Si está activado y una extensión se queda sin cosas que hacer termina la llamada con BUSY, CONGESTION o HANGUP Si no está activada se queda esperando otra extensión. Nunca debería suceder que una extensión se quede sin cosas que hacer como explicaremos posteriormente.
– clearglobalvars : Si está activado se liberan las variables globales cuando se recargan las extensiones o se reinicia Asterisk.
priorityjumping : Si tiene valor ‘yes’, la aplicación soporta ‘jumping’ o salto a diferentes prioridades. En desuso

En general estas opciones no son muy importantes y se pueden dejar tal y como aparecen por defecto.

Contexto [globals]
En este contexto se definen las variables globales que se van a poder utilizar en el resto de los contextos. Por ejemplo

CONSOLE=Console/dsp ;indica que cuando hagamos referencia a la variable CONSOLE estamos llamando a /Console/dsp

Las variables suelen ponerse siempre en mayusculas para diferenciarlas posteriormente.

Resto de Contextos []

Esto es lo más importente de este fichero. Vamos a indicar ahora como crear un contexto especifico y asignar un plan de numeración. Todas las lineas de un determinado contexto tienen el mismo formato:

exten =>  extension , prioridad, Comando(parametros)

La extensión hace referencia al numero marcado
La prioridad al orden en que se ejecutan las instrucciones. Primero se ejecuta la de prioridad 1, luego la 2 y sucesivamente
El Comando hace referencia a la acción a ejecutar

Vamos a ir viendo unos ejemplos para ir aprendiendo los comandos

Ejemplo 1: Colgar la linea
exten => 333,1,Hangup ; indica que cuando alguien llame al 333 saltará la prioridad 1 y el sistema colgará la llamada

Ejemplo 2 : Llamar a el usuario SIP 3000 y que salte el contestador si no contesta
exten => 3000,1,Dial(SIP/3000,30,Ttm) ; intenta llamar al usuario 3000 de sip que tiene que estar definido en sip.conf con ese contexto
exten => 3000,2,Hangup ; cuando acaba la llamada cuelga
exten => 3000,102,Voicemail(3000) ; La prioridad 102 significa que el usuario no estaba conectado y salta el contestador al buzon 3000
exten => 3000,103,Hangup ; se cuelga después de dejar el mensaje

En este caso al llamar a la extension 3000 usuamos el comando Dial (destino, tiempo de timeout, opciones)
El destino es el usuario 3000 del archivo sip.conf, 30 segundos de timeout. El usuario 3000 deberia existir en sip.conf
las opciones hacen referencia a opciones del comando dial:
la “T” permite al usuario llamante transferir la llamada pulsando #
la “t” permite al usuario llamado transferir la llamada pulsando #
la “m” indica que vamos a oir una musica especial mientras esperamos a que el otro conteste: Podeís probar a quitarla.

Si el usuario 3000 no está conectado salta a la prioridad +101 (en nuestro caso a la 102=1+101 ya que estabamos en la prioridad 1) y hacemos que salte el contestador para dejar un mensaje.

Es importante que por cada rama siempre se cierre el camino y se cuelgue la llamada con un Hangup

Ejemplo 3 : Comprobación de latencia y eco
exten => 600,1,Playback(demo-echotest) ; Se pone el sonido de que es una demo de eco
exten => 600,2,Echo ; Se ejecuta el test de eco
exten => 600,3,Playback(demo-echodone) ; Se repite lo que dijimos
exten => 600,4,Hangup ; Se cuelga

En este caso llamando al 600 nos va a repetir lo mismo que nosotros dijimos. Podremos comprobar la latencia del sistema.

Ejemplo 4 : Extensión start

exten => s,1,Wait,1 ; Esperamos un segundo
exten => s,2,Answer ; respondemos. EL Asterisk coge la llamada
exten => s,3,DigitTimeout,5 ; Ponemos Digit Timeout a 5 segundos
exten => s,4,ResponseTimeout,10 ; Ponemos Response Timeout a 10 segundos
exten => s,5,BackGround(demo-congrats) ; Ejecutamos un archivo de voz
exten => s,6,hangup ; Colgamos
exten => 1000,1,Goto(micontexto,s,1) ; Al llamar al 1000 vamos a la extensión s con prioridad 1 del contexto “micontexto”

En este caso presentamos la extensión start s que es la que coge las llamadas cuando se esta en ese contexto pero no se sabe la extensión. También se puede entrar desde otra extensión como en este caso marcando la extensión 1000. Con Goto podemos ir al contexto, extensión y prioridad que queramos.

Ejemplo 5 : LLamar a un proveedor de Voz IP

exten => _340.,1,Dial(SIP/${EXTEN:3}@Proveedorsip,90,Tt)
exten => _340.,2,hangup ; Colgamos

exten => _20.,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt)
exten => _20.,2,hangup ; Colgamos

En este caso lo que hacemos es que siempre que marquemos el 340 seguido de cualquier numero (el 340 como perfijo) llamaremos a una extension SIP. Por ejemplo en el primer caso si marcamos al 340600600 llamaremos al 600600 a la dirección IP del “proveedorsip” definido en sip.conf. (EXTEN:3 significa que quitamos los tres primeros numeros)

En el segundo caso si marcamos 2060600 también estaremos llamando al mismo numero 600600 del “proveedorsip” (EXTEN:2)

En los casos anteriores el . sustituye a cualquier caracter pero podíamos haber utilizado también
X – Acepta un numero de 0 al 9
Z – Acepta un numero de 1 al 9
N – Acepta un numero de 2 al 9
[1,5-7] – Acepta el 1, el 5, el 6 o el 7

exten => _20XX,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20 y dos numeros (no valen caracteres)
exten => _20ZZ.,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20, dos numeros del 1 al 9 y cualquier cosa
exten => _20[1-3]..,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20, un numero del 1 al 3 y cualquier cosa

Configuración del archivo voicemail.conf (Contestador automatico)

El archivo voicemail.conf sirve para configurar el contestador automatico y gestionar los buzones de los usuarios

El archivo extensions.conf se compone también de secciones o contextos entre corchetes []
Hay dos contextos especiales llamados [general] y [zonemessages] que siempre están presentes.

Contexto [general]
El contexto [general] configura las opciones generales del buzón de voz:

Un ejemplo básico podría ser:

[general]
; Enviar archivos en las notificaciones de e-mail
attach=yes
; Usar el formato wav para los mensajes de voz
format=wav
; Limitar el tiempo máximo del mensaje de voz a 180 segundos
maxmessage=180
; Limitar el tiempo minimo del mensaje a 3 segundos
minmessage=3
; Anunciar el numero que llamó antes de repetir el mensaje
saycid=yes
; Limitar el numero de intentos de registro a 3
maxlogins=3
; Define los contextos internos para especificar que vienen de una extensión interna
cidinternalcontexts=house_local,house_toll,house_admin

Vamos a poner en forma de tabla las posibilidades más destacadas a utilizar de este contexto:

Comando
Explicación y opciones
attach Indica si se envía un archivo en las notificaciones de email. Tiene dos valores “yes” o “no” Por defecto es “no”
delete Indica que el mensaje de voz será borrado del servidor si es enviado por e-mail
mailcmd Sirve para fijar la ruta del servidor de e-mail
maxsilence Indica los segundos de silencio que debe detectar el servidor para cortar la llamada al buzón. Por defecto es 0 que indica que equivale a un tiempo infinito y no hace caso a los silencios.
envelope Si lo activamos con “yes” indicará el día y la hora en que se recibio el mensaje
externnotify Sirve para ejecutar un programa externo cuando alguien deja un mensaje
externpass Sirve para ejecutar un programa externo cuando alguien cambia su contraseña del buzón.
silencetreshold Funciona si maxsilence=”yes” y sirve para fijar el umbral de silencio
servermail Indica el origen de los mensajes de notificación de e-mail. Por ejemplo buzon@midominio.com
maxmessage Indica el tiempo máximo de un mensaje
maxmsg Indica el numero máximo de mensajes en un buzón
minmessage Sirve para eliminar los mensajes que tienen menos duración que lo indicado por este comando.
format Indica el formato en que se guardará los mensajes e voz. Hay las siguientes posibilidades: “wav49”, “gsm”, “wav”
maxgreet Fija el tiempo máximo del mensaje de bienvenida que pueden configurar los usuarios
maxlogins Numero máximo de intentos de logeo
cdinternalcontexts Distingue si los contextos son contextos internos o externos
promiscredir Permite soportar redirecciones 302. Por defecto “no”
review Por defecto es “no”. Si lo pusieramos a “yes” el usuario que deja el mensaje podrá revisarlo antes de salvarlo y dejarlo en el buzón.
operator Permite marcar una extensión cuando ha saltado el buzón de voz
saycid Si lo ponemos a “yes” anunciar el numero que llamó antes de repetir el mensaje
fromstring Modifica el from del mensaje de aviso de correo
emailsubject Modifica el asunto del mensaje de aviso de correo
emailbody Modifica el cuerpo del mensaje de aviso de correo
nextaftercmd Reproduce el siguiente mensaje automáticamente cuando se borra el anterior.

Contexto [zonemessages]
Este contexto define zonas horarias. La hora para distintos usuarios no es la misma y para poder informarle sobre la hora en que recibió el mensaje es necesario fijar diferentes zonas horarias:

Un ejemplo podría ser

[zonemessages]
madrid=Europe/Paris|’vm-received’ Q ‘digits/at’ R
paris=Europe/Paris|’vm-received’ Q ‘digits/at’ R
sthlm=Europe/Stockholm|’vm-recieved’ Q ‘digits/at’ R
europa=Europe/Berlin|’vm-received’ Q ‘digits/at’ kM
italia=Europe/Rome|’vm-received’ Q ‘digit/at’ HMP

El formato de las líneas es el siguiente:

zona=Pais/Ciudad|Opciones –> El Pais y la ciudad deben ser válidos y son los del archivo /usr/share/zoneinfo de la instalación de Linux

Las diferentes Opciones son:

Option Description
‘fichero’ Nombre del fichero de audio a reproducir
${VAR} Variable de sustitución
A, a Día de la semana (sábado, domingo, etc…)
B,b,h Mes (Enero, Febrero, …)
d,e día del mes numérico (primero, segundo,…)
Y Año
I or i Hora, en formato 12 horas
H ,k Hora, en formato 24 horas
M Minutos
P,p AM o PM
Q “hoy”,”ayer”
R tiempo 24 horas , incluidos minutos

Resto de Contextos []

En el resto de contextos se definenlos buzones de los usuarios. Podemos tener todos los usuarios en un solo contexto por ejemplo [default] o tener más de un contexto.

El formato básico es el siguiente:

[default]
extension => contraseña, nombre de usuario, email de usuario, email de notificación,opciones

La extensión hace referencia al numero de telefono llamado.

  • La contraseña hacer referencia a la contraseña para ese usuario de su buzón de voz.
  • El nombre de usuario es el nombre del cliente de la extensión
  • El email del usuario es el correo al que serán enviados los mensajes
  • El email de notificacion es un email alternativo donde pueden ser enviadas las notificaciones para administración o control
  • Las opciones sirven para sobreescribir las del contexto [general] o especificar una zona horaria pra el usuario.Hay 9 especificas: attach, serveremail, tz, saycid, review, operator, callback, dialout and exitcontext. Son las mismas que las contexto [general] salvo tz.La opción tz se usa para sobreescribir la zona por defecto y debe estar presente en el contexto [zonemessages]

Ejemplos:

[default]
1234 => 3456,Ejemplo1,mail@dominio.com
4200 => 9855,Pedro Perez,pedro@dominio.com,admin@dominio.com,attach=no|serveremail=info@dominio.com|tz=madrid
4069 =>6522,juan,j@dominio.net,,attach=yes|saycid=yes|dialout=fromvm|callback=fromvm|review=yes|operator=yes|envelope=yes
4073 => 1099,javier Perez,perez@dominio.com,,delete=1

Descargar Tutoriales de Elastix

 

!!! AYUDANOS A MANTENER ESTE SITIO ACTIVO…!!!

Si piensas que te hemos ayudado y merecemos tu apoyo. !!! GRACIAS !!!

Cuando lo hagas tendras acceso inmediato a la documentacion en formato PDF para que la descargues. Encontraras tambien otros tutoriales mas avanzados no publicados en el sitio. Si no puedes o no quieres, no hay problema igual tendras acceso a toda la informacion publicada en este sitio.

!!CLICK AQUI.!! para ver Tutoriales a descargar

!!! GRACIAS POR TU DONACION !!!





45,989 total views, 12 views today

Enlace permanente a este artículo: http://elastixtech.com/fundamentos-de-telefonia/introduccion-a-asterisk/