CURSO ASTERISK
Daniel Perez Colmenares – Universidad Catolica Los Angeles de Chimbote
Asterisk PBX
¿ Que es ?
● Asterisk es software. Exclusivamente software.
● Es software open source, desarrollado principalmente por la empresa americana DIGIUM.
● Liberado con la licencia GPL.
● Se ejecuta en PC estandar (arquitectura x86,x86_64, ppc) bajo GNU/Linux, BSD o MacOSX.
● Soporta todas las funcionalidades de las centralitas tradicionales y muchas más !
Esquema Conceptual

Introducción

Asterisk PBX: Instalación
Requisitos Técnicos del sistema
● Requisitos: Dependen directamente de:
– Llamadas concurrentes.
– Conferencias y Aplicaciones complejas simultáneas.
– Transcodifcaciones necesarias (recodificación).
● Principalmente, Asterisk requiere microprocesador.
● Según Digium: Equipo Dual Intel Xeon 1.8 Ghz 1 Gb Ram soporta 60 llamadas concurrentes codificando con el codec G.729.
● Dificil determinar con exactitud, mejor apuntar alto para poder escalar.
Preparando la instalación
● Requisitos Hardware
– PC
– Tarjetas de telefonía
– Café
● Requisitos Software
– Distribución GNU/Linux
– http://voip-info.org
Instalación de librerías dependientes
● Asterisk necesita para su correcta compilación y funcionamiento los siguientes paquetes:
– openssh-server: para acceso remoto seguro.
– gcc,make: compilador de lenguaje C y herramientas
– libc-dev,libssl-dev,zlib1g-dev,libncurses-dev,libmysqlclientdev
Descarga del código fuente de Asterisk (I)
– Asterisk: Núcleo (core) del sistema.
– Asterisk-sounds: Voces de calidad pregrabadas.
– Asterisk-addons: Software adicional.
– Libpri: Librería para gestionar enlaces RDSI Primarios.
– Zaptel: Interfaz del Kernel para acceder a tarjetas de comunicaciones para lineas analógicas o digitales.
– mISDN Interfaz del kernel para acceso a tarjetas RDSI BRI
– mISDNuser Parte de misdn que se ejecuta en userspace
Administración básica: arranque
● Asterisk es un demonio que se ejecuta en segundo plano. Se invoca con el comando 'asterisk':
sudo asterisk
● Una vez ejecutado, nos devuelve el control de la shell, haciendo un 'detach'. Podemos comprobar que se está ejecutando correctamente con un listado de procesos habitual:
ps aux | grep asterisk
Administración básica: conexión al CLI
● En este punto tenemos el programa Asterisk en
funcionamiento con la configuración de /etc/asterisk
● Asterisk soporta un intérprete de comandos (CLI: Command
Line Interface), del estilo de muchos routers.
● Para conectarse basta con ejecutar el comando:
sudo asterisk -r
Asterisk 1.2.9.1, Copyright (C) 1999 -2005 Digium.
Written by Mark Spencer <markster@digium.com>
Connected to Asterisk 1.2.1 currently running on ironturion (pid = 28572)
Administración básica: CLI
● El intérprete de comandos de Asterisk es bastante potente, y permite controlar y monitorizar gran parte de la situación de la centralita.
● Soporta el empleo de la tecla <Tabulador>, al estilo de las consolas de UNIX/GNU Linux, por lo que para ver un listado de todos los comandos disponibles, basta con presionar varias veces la tecla.
● Para ver los posibles argumentos de un comando o completar un parámetro largo o complicado.
Administración básica: detención
● Es posible realizar una desconexión del CLI de Administración con 'quit'. Asterisk continuará ejecutándose en segundo plano.
● Para matar al propio Asterisk desde el CLI, se puede utilizar el comando stop, en sus tres variantes:
–stop now: Detiene Asterisk al momento
–stop when convenient: Detiene Asterisk cuando no haya carga.
– stop gracefully: Detiene asterisk cuando no haya carga y deja de aceptar peticiones de llamadas a a partir de este momento.
Administración básica: Verbose
● Nivel de “Verbose”: Este valor indica la cantidad de mensajes que se recibirán sobre los eventos generales del sistema. Cuanto más alto, más información sobre lo que sucede en la centralita se recibirá.
● Este nivel, se puede establecer de varias formas:
– Al arrancar el demonio:
sudo asterisk vvvvvv
– Al conectarse al demonio:
sudo asterisk -rvvvvvvvv
– Desde el CLI:
CLI> Set Verbose 30
Administración básica: Debug
● Nivel de “Debug”: Este valor indica la cantidad de mensajes que se recibirán sobre los eventos generales del sistema,pero utilizado normalmente para depurar problemas de drivers o de aplicaciones.
● Este nivel, se puede establecer de varias formas:
– Al arrancar el demonio:
sudo asterisk dddd
– Al conectarse al demonio:
sudo asterisk -rdddd
– Desde el CLI:
CLI> Set Debug 30
Conceptos Generales sobre Asterisk: Terminología
● Canal: Es una conexión que conduce una llamada entrante o saliente en el sistema Asterisk. La conexión puede venir o salir hacia telefonía tradicional analógica o digital o VozIP.
● Asterisk soporta una serie de canales, los más importantes:
– IAX2, SIP: Protocolos VozIP
– Zap: Lineas analógicas y digitales.
– misdn: RDSI
● Concepto de canal:

Conceptos Generales sobre Asterisk: Terminología (II)
● Dialplan: Se trata de la configuración de la centralita Asterisk que indica el itinerario que sigue una llamada desde que entra o sale del sistema hasta que llega a su punto final. Se trata en lineas generales del comportamiento lógico de la centralita.
Conceptos Generales sobre Asterisk: Terminología (III)
● Extension: En telefonía tradicional, las extensiones se asocian con teléfonos, interfaces o menús. En Asterisk, una extensión es una lista de comandos a ejecutar.
● Las extensiones se acceden cuando:
– Se recibe una llamada entrante por un canal dado.
– El usuario que ha llamado marca la extensión.
– Se ejecuta un salto de extensiones desde el Dialplan de Asterisk.
Conceptos Generales sobre Asterisk: Terminología (IV)
● Contexto (Context): El Dialplan o lógica de comportamiento de Asterisk se divide en uno o varios contextos. Un contexto es una colección de extensiones.
● Los contextos existen para poder diferenciar el 'lugar' donde se encuentra una llamada, para:
– Aplicar políticas de seguridad: Asterisk no se comporta igual cuando llama un usuario y marca el 1 y cuando un usuario local marca el mismo 1.
– Menús y submenus diferenciados.
– En general, es una forma de diferenciación.
Conceptos Generales sobre Asterisk: Terminología (V)
● Aplicación (Application): Asterisk ejecuta secuencialmente los comandos asociados a cada extensión. Esos comandos son realmente aplicaciones que controlan el comportamiento de la llamada y del sistema en sí. Algunos
ejemplos:
– Hangup: Colgar la llamada.
– Monitor: Comenzar la grabación a disco de la llamada.
– Dial: Realiza una llamada saliente.
– Goto: Salta a otra extensión o contexto.
– PlayBack: Reproduce un fichero de sonido.
Configuración de Asterisk
● Asterisk puede configurarse desde varios puntos, los más importantes son:
– Pare desde el propio CLI
– Desde los ficheros de configuración (.conf) en /etc/asterisk
● La configuración se carga al iniciar Asterisk, por lo que para aplicar cualquier cambio será necesario recargarla, para ello basta con ejecutar el comando core reload en el cli:
pbuxubuntu01*CLI>core reload
Configuración Simple:
● misdn.conf
● zapata.conf
● sip.conf
● extensions.conf
● iax.conf
● features.conf
● voicemail.conf
● meetme.conf
● queues.conf
● ...
Asterisk PBX: Voz sobre IP
Configuración para canales de Voz IP: SIP e IAX2
● Los ficheros a manipular son sip.conf e iax.conf, la instalación crea ficheros de ejemplo con la sintaxis bastante comentada a modo de guía.
SIP.CONF
● En este fichero se definen:
– Variables generales de SIP.
– Clientes SIP.
– Servidores SIP.
SIP.CONF: Sección General
● En primer lugar existe la sección [general], donde se definen variables globales y aspectos por defecto para todos los canales SIP.
● La syntaxis es la siguiente:
[general]
variable1=valor1
variable2=valor2
SIP.CONF: Sección General
● Las variables generales más importantes son:
– allow y disallow: indican los codecs permitidos / no permitidos.
– dtmfmode: permite especificar el método por el cual se
enviaran los tonos (digitos pulsados durante la conversación),valores posibles:
– nat: Informa a Asterisk del tipo de NAT en el que se encuentra.
– externip: Dirección Pública tras el NAT.
– context: Contexto por defecto donde entraran las llamadas entrantes por SIP.
– port: Puerto en el que escuchar (5060 ).
SIP.CONF: Clientes y Servidores
● En sip.conf se definen tanto los clientes que se conectarán a Asterisk, como los proveedores que se utilizaran para encaminar llamadas. Conceptualmente, se distinguen
– user: Envia llamadas a Asterisk
– peer: Recibe llamadas de Asterisk (proveedor).
– friend: Recibe y Envía llamadas (usuario).
● La syntaxis para definir un friend o un peer es:
[nombre]
type = friend / peer
variable = valor
viarable2 = valor
....
SIP.CONF: Clientes y Servidores
● Las variables más importantes que deben ser configuradas inicialmente son:
– type: peer / friend
– context: Contexto donde entraran las llamadas generadas.
– nat: Indica si el usuario o peer se encuentran tras un nat.
– host: IP remota o dynamic.
– username: nombre de usuario.
– secret: contraseña de acceso.
– allow y disallow: Configuraciones de codecs específicas para cada friend/peer.
– qualify: Evalúa el estado del extremo SIP para conocer su 27 accesibilidad y latencia. Gorka Gorrotxategi – Iñaki Baz -Jon Bonilla
SIP.CONF: Ejemplo, declarando clientes:
● Vamos a declarar de forma básica dos clientes en el fichero sip.conf:
[jon]
type = friend
secret = jon
disallow=all
allow = g729
allow = gsm
host=dynamic
[leire]
type = friend
secret = leire
allow = all
host=dynamic
SIP.CONF: Ejemplo, declarando peers:
● Vamos a configurar un proveedor en sip.conf:
[sarenet]
type=peer
host = 10.11.114.200
disallow = all
allow = g729
allow = gsm
fromuser= 100
secret=ghost
SIP.CONF: Verificación de la configuración con el CLI
● Mediante el comando core reload en el CLI de Asterisk, le
indicamos que recargue la configuración. Aunque es posible
recargar de forma independiente: CLI> sip reload
● Una vez recargada, podemos comprobar los “friends” que
hemos definido con el comando: sip show users
● Para ver los “peers” definidos: sip show peers
Introducción al Dialplan
● Hasta el momento conocemos como configurar usuarios del sistema Asterisk y proveedores externos.
● Pero: ¿ Que sucede cuando un usuario marca un determinado número ? ¿ Como podemos llamar utilizando alguno de los proveedores configurados ?
● La respuesta a esta y muchas más pregunas es: el Dialplan. Es el corazón del comportamiento de Asterisk, en él se configura toda la lógica.
Introducción al Dialplan (II)
● En lenguaje natural, un ejemplo muy sencillo podría ser el siguiente:
– Cuando un usuario marca un número:
● Si el número empieza por 0, llamar al destino utilizando un proveedor externo.
● Si el número tiene 3 cifras y empieza por 1, llamar a un determinado usuario de la centralita.
● Si cuando llamamos a ese usuario, no coge en 60 segundos,reproducir un mensaje de alerta.
● En situaciones normales, el dialplan se puede complicar considerablemente..
Arquitectura del dialplan
● El dialplan se define en extensions.conf, su “forma” genérica se asemeja a este esquema:

Flujo en el dialplan: Ejemplo simplificado
● Contexto “desde oficina”
– Extensión 100, Prioridad 1, Aplicación: Reproducir Canción
– Extensión 100, Prioridad 2, Aplicación: Llamar a Jon
– Extensión 100, Prioridad 3, Aplicación: Colgar
Flujo en el dialplan: Ejemplo simplificado aplicado
● La sintaxis en extensions.conf correspondiente sería:
[desde-oficina]
exten => 100,1,PlayBack(thebeatles)
exten => 100,2,Dial(SIP/jon)
● Y al declarar el friend se hace necesario especificar el contexto:
[usuario1]
type=friend
....
context=desde-oficina
Flujo en el dialplan: Ejemplo simplificado aplicado (II)
● La prioridad “n”, es equivalente a sumar uno a la prioridad anterior. Esto permite editar y modificar rápidamente el DialPlan.
● La sintaxis en extensions.conf equivalente sería:
[desde-oficina]
exten => 100,1,PlayBack(thebeatles)
exten => 100,n,Dial(SIP/jon)
Aplicaciones en el dialplan
● Para obtener un listado de las aplicaciones disponibles, desde el CLI se puede ejecutar:
core show applications
● Para obtener una descripción de una determinada aplicación:
core show application nombre
Aplicaciones en el dialplan: Aplicaciones Generales
● Las aplicaciones generales más importantes son:
– Wait (n)
● Espera n segundos, ignorando los dígitos marcados durante.
– WaitExten (n)
● Espera n segundos, pero gestionando los dígitos marcados.
– WaitMusicOnHold(n)
● Reproduce música en espera durante n segundos.
Aplicaciones en el dialplan: Gestión de llamadas
● Los comandos de gestión de llamadas más importantes:
– Answer()
● Acepta la llamada entrante por el canal.
– Busy()
● Envía la señal de ocupado al origen.
– Hangup()
● Cuelga la llamada.
– Ringing()
● Envía la señal de tono de llamada.
– Dial ( tipo/identificador,timeout,opciones,url )
● Aplicación para llamar (ver más adelante).
Aplicaciones en el dialplan: Control de Flujo
● Algunos comandos de control de flujo y temporización:
– Goto (contexto, extension, prioridad)
● Salta al contexto, extensión y prioridad del argumento.
– GotoIf ( condicion ? prioridad1 : prioridad2 )
● Salta a la prioridad1 si la condición se cumple.
● Salta a la prioridad2 si la condición no se cumple.
– GotoIfTime(<times>|<weekdays>|<mdays>| <months>?[[context|]exten|]priority)
Aplicaciones en el dialplan: Reproducción de sonidos
● Algunas aplicaciones para la reproducción:
– PlayBack (fichero )
● Reproduce el fichero, continua la ejecución cuando finaliza.
– Background (fichero)
● Reproduce el fichero, pero continua la ejecución inmediatamente.
– SayDigits ( dígitos)
● Reproduce los dígitos.
Manejo de Extensiones
● La syntaxis general en el dialplan es:
exten => EXTENSION, PRIORIDAD, Aplicación
● En el caso de llamadas internas o funcionamiento simple, las extensiones son conocidas.
● ¿Pero que pasa cuando un usuario llama a un número que no se pre-conoce ?
● Solución: Utilizar patrones en las extensiones.
Manejo de Extensiones: Patrones de Coincidencia
● Para indicar patrones, se utiliza el carácter: “_”
● Se pueden utilizar:
– X: Indica un dígito del 0 al 9
– Z: Indica un dígito del 1 al 9
– N: Indica un dígito del 2 al 9
– [129] Indica el 1, 2 o 9
– . Indica uno o más caracteres (¡Atención! Coincide
con las extensiones especiales: h,i,t .., recomendable: _X.)
● Ejemplos:
– Fijos Nacionales: exten=> _9XXXXXXXX
– Internacionales: exten=> _00.
Variables
● En el Dialplan de Asterisk existen variables, que pueden ser modificadas por el propio Asterisk en su ejecución lógica o por comandos expresos del Dialplan.
● Las aplicaciones pueden cambiar variables.
● Los tipos de variables son:
– Globales: Declaradas en extensions.conf (o por comando).
– Canal: Son propias a cada canal.
– Entorno: Variables de entorno (UNIX Like).
● La sintaxis de una variable es:
${variable}
Manejo de Variables
● Asignación de variables:
– SetVar(Variable=valor)
– SetGlobalVar(Variable=valor)
● Manejo de cadenas:
– Subcadenas: ${Variable : offset : longitud }
● Devuelve la subcadena de variable que comienza en offset y con la longitud especificada.
● Ejemplo: ${ 123456789:2:3} devuelve 345
– Longitud: ${LEN(Variable)}
– Concatenación: ${Variable1}${Variable2}
Variables de canal definidas automáticamente
● Listado de variables más importantes:
– ${CALLERID}: Caller ID actual, nombre y número.
– ${CONTEXT}: Contexto actual.
– ${EXTEN}: Extensión actual.
– ${CHANNEL}: Canal actual.
– ${DIALSTATUS}: Estado de la llamada: unavailable,
congestion, busy, noanswer, answer, cancel, hangup.
– ${DATETIME}: Hora actual.
● Un comando útil para ver el contenido es NoOp:
– NoOp ( ${VARIABLE} )
● Nos mostará en el CLI el valor.
50
Syntaxis de las Expresiones
● Es posible utilizar expresiones en las llamadas a aplicaciones (principalmente: GotoIf)
● Syntaxis:
$[expr1 operador expr2]
● Operadores Lógicos: |(or) , &(AND)
● Operadores de Comparación: =, !=, <, >, <=, >=
● Operadores Aritméticos: +, -, *, /, %
● [...] , Ejemplos:
exten => 1,1,SetVar(total=$[1 + 1])
exten => 1,2,GotoIf($[${CALLERID}=123456]?10:20)
Asterisk PBX: Telefonía Tradicional
● Para poder inter-operar con la telefonía tradicional, Asterisk necesita hardware específico.
● El principal sponsor y desarrollador de Asterisk: DIGIUM es el principal fabricante de hardware.
Asterisk y la Telefonía Tradicional
● Para operar con lineas analógicas, se necesitan tarjetas con interfaces FXO
– Ejemplo: Digium TDM01B
● Para operar con teléfonos analógicos o centralitas clásicas, se requieren interfaces FXS
– Ejemplo: Digium TDM10B
● En ambos casos, el driver a utilizar es zaptel, la configuración se almacena en /etc/zaptel.conf
Asterisk y la Telefonía Tradicional (II)
● En lineas digitales (RDSI), en Europa existen dos tipos:
– BRI : Acceso básico, proporciona 2 canales de voz.
– PRI: Acceso primario, proporciona 30 canales de Voz (E1).
● Asterisk soporta perfectamente ambos tipos de lineas digitales, con hardware específico:
– Para primarios, Digium proporciona tarjetas de hasta 4 puertos, siendo zaptel el driver a utilizar.
– Para primarios, Digium proporciona tarjetas de hasta 4 puertos, siendo mISDN el driver a utilizar.
Asterisk y la Telefonía Tradicional: Lineas analógicas
● Para operar con las tarjetas con interfaces FXS / FXO, Asterisk utiliza el subsistema Zaptel: Zapata Telephony
● Es necesario descargar e instalar el paquete, está disponible en el ftp de Digium
● Una vez instalado el sistema zaptel, es necesario configurarlo en /etc/zaptel.conf
– Definir zonas (para frecuencias de tonos)
– Definir interfaces en los canales: FXS / FXO
● Se puede verificar la configuración correcta con el comando instalado:
ztcfg -v
Asterisk como Centralita
● Toda la secuencia y programación del dialplan es el verdadero núcleo del sistema centralita, si bien, las siguientes funcionalidades se configuran en features.conf:
– Transferencias de llamadas: transferencia de llamadas entre diversos usuarios, independientemente de la tecnología que usen.
– Call Parking: Parking de llamadas.
– Call Pickup: Auto-transferencia de un teléfono que esté sonando.
Asterisk como Centralita: Transferencias
● En caso de SIP e IAX2: La transferencia puede ser nativa. El usuario SIP es el dueño de su llamada!
● En features.conf se especifica:
– blindxfer => secuencia
● Permite realizar una transferencia de llamada a ciegas marcando la secuencia.
– atxfer => secuencia
● Permite realizar una transferencia de llamada atendida. El origen es puesto en espera, mientras el destino se comunica con el nuevo destino para anunciarle la lllamada. Si el nuevo destino cuelga, la llamada no se transfiere.
– pickupexten => secuencia
● Especifica como coger una llamada del callgroup.
● Para poder realizar transferencias vía PBX, Asterisk debe estar a la escucha de los tonos configurados, para ello:
– La aplicación Dial debe haber recibido como parámetro 't' para permitir transferencia en destino o 'T' para hacerlo en origen (o ambas).
– En el caso de SIP, los DTMF pueden ser enviados de varias formas (RFC2833/out of band, SIP Info,inband), Asterisk debe saber como los enviará el cliente SIP.
● Ejemplo de llamada Dial:
exten => 100, 1, NoOp(llamando a Peio)
exten => 100, n, Dial ( SIP/peio|10|t)
Asterisk como Centralita: Música en Espera
Asterisk puede poner un canal dado en espera ('HOLD'),
principalmente en las siguientes situaciones:
– Durante una transferencia.
– Durante una llamada si se ha especificado el parámetro 'm',que indica que no se oirá tono de llamada sino música en espera.
– Durante una espera en el parking.
– Si la aplicación MusicOnHold o WaitMusicOnHold ha sido llamada desde el DialPlan
– Si el destino de la llamada ha solicitado explícitamente que la llamada sea puesta en espera
● Es posible tener distintos tipos de música en espera.
● La música en espera se configura en
musiconhold.conf
Asterisk como Centralita: CallParking (I)
● El callparking es una funcionalidad que permite transferir la llamada a un 'parking' virtual. Pudiendo colgar sin que la llamada origen sea desconectada de Asterisk, ya que se encontrará apacarcada,
● Para operar, el usuario transfiere la llamada a una extensión especial (parkext en features.conf), Asterisk aparca la llamada y anuncia la posición en el parking.
● Cualquier usuario que tenga incluido en su contexto el contexto especial 'parkedcalls' puede recuperar la llamada aparcada llamando directamente a su posición en el parking.
Asterisk como Centralita: IVR
● IVR: Interactive Voice Response
● El modo de funcionamiento es bastante sencillo:
– Al hacer una llamada a la aplicación WaitExten, Asterisk se queda a la espera de que el usuario marque una extensión.
– En caso de timeout (el usuario no marca nada en el tiempo especificado), Asterisk salta a la extensión 't' si existe.
– En caso contrario, Asterisk busca la extensión y la ejecuta, sino existe, salta a la extensión 'i' si existe.
● Se utiliza casi siempre en combinación con la aplicación BackGround (Se comienza a reproducir el fichero y seguido se entra en espera, para que el usuario pueda introducir extensiones sin tener que esperar)..
Asterisk como Centralita: IVR (III)
● Ejemplo de menú:
[menu-ivr]
exten => s, 1, Answer()
exten => s, n, BackGround(intro-menu)
exten => s, n, WaitExten(10)
exten => 1, 1,Goto(entrantes-dptocomercial,s,1)
exten => 2, 1,Goto(entrantes-dptocomercial,s,1)
exten => i, 1,PlayBack(opcion-invalida)
exten => i, n,Goto(menu-ivr,s,1)
exten => t, 1, Goto(entrantes-generales)
Registro de llamadas
● Asterisk permite llevar un control exhaustivo de todas las llamadas que se han realizado o recibido.
● Es interesante para control propio de facturación, independiente del proveedor (si no lo somos).
● Permite realizar estadísticas.
● Este control se denomina: CDR, Call Detail Record
Registro de llamadas (II)
● El registro del CDR se escribe por defecto en el fichero /var/log/asterisk/cdr-csv/Master.csv
● Existen extensiones al cdr: cdr_mysql por ejemplo, que permiten almacenar los registros en una base de datos.
● cdr_mysql está disponible en asterisk-addons
● El CDR se configura en el fichero cdr.conf, para el módulo de MySQL, se utiliza cdr_mysql.conf
● Para confirmar el estado del CDR desde el CLI, se puede ejecutar:
CLI> cdr status
Asterisk PBX: Control de llamadas
Monitorización
● Asterisk provee el protocolo AMI: Asterisk Manager TCP/IP API
● Utilizando este protocolo, Asterisk permite:
– Crear llamadas
– Monitorizar llamadas
– Monitorizar canales y colas
– Ejecutar comandos
● Se trata de un demonio más de Asterisk, que escucha en el puerto tcp 5038
● Se configura en manager.conf
AGI: Asterisk Gateway Interface
¿Qué es AGI?
● Interfaz para comunicar Asterisk con programas externos en diferentes lenguajes de programación:
C,
C#,
Bourne
Shell,
PHP,
Ruby,
Python,
Perl,
Java
● El programa debe cumplir:
– Ser ejecutable (mediante un intérprete es válido).
– Localizado por dfecto en /var/lib/asterisk/agi-bin
– Asociado con alguna extensión en el Dial Plan:
exten=>200,1,AGI(mi_programa.php|argumentos)
● Comunicación con Asterisk:
– El programa escribe en la salida estándar para enviar un comando a Asterisk.
– El programa lee de entrada estándar para obtener una respuesta de Asterisk.
Bibliografía
● Asterisk, The Future of Telephony. Jim Van Meggelen, Jared
Smith & Leif Madsen – O' Reilly
● Voip-info: http://www.voip-info.org
Lista de correo
● Asterisk-es