Diferencia entre revisiones de «Introducción»

De Asterisk Wiki
Ir a la navegación Ir a la búsqueda
Línea 33: Línea 33:
 
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.
 
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).
+
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:
 
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:

Revisión del 13:39 7 may 2012

Asterisk 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.


Introducción

Asterisk es una plataforma de comunicaciones basada en la filosofia Open Source

Es capaz de convertir un ordenador comun en un completo servidor de comunicaciones.

¿Que es Asterisk?

Plataforma comunicaciones.jpg

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

El 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)

Para seguir la evolucion de versiones puede hacerse desde la web: Versiones Asterisk

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" [1]

Arquitectura

La arquitectura de Asterisk esta basada en un sistema modular, que depende del núcleo principal del sistema. 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)

Ficheros 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 traves 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.

Licencia

Asterisk esta actualmente disponible bajo licencia GNU GPL v2[2]

Referencias

  1. Asterisk SCF, Kevin P. Flemming (2010)
  2. GNU GPLv2, Free Software Foundation (1991)