Arquitectura

De Asterisk Wiki
Saltar a: navegación, buscar
Arquitectura de Asterisk

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

Contenido


Asterisk: Sistema Modular

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

Referencias