con Asterisk
Administrador
Avanzado
ElicerTats
AndrsFuentes
El objetivo de la prctica es adquirir los conocimientos suficientes para reparar un servidor para el
funcionamiento de Asterisk como servidor de comunicaciones.
Instruccines:
4. Puede observar que el sistema arranca desde el CD, y aparece en el monitor una pantalla con tres
opciones.
6. Aparece una opcin para revisar los medios (CD /DVD) de instalacin. Si Ud. Est seguro de que estos
medios funcionan adecuadamente, puede prescindir (Skip) de la verificacin.
11. En la nueva pantalla y de ser posible cree tres particiones una para /boot de 100 MB, una para swap,
una para el sistema de archivos / , una para /home. Los tamaos sern escogidos enbase a las
indicaciones del instructor. Click en next.
13. En la seccin de dispositivos de red, configrelos, su instructor le dir si usar DHCP o no. Si no, l le
proveer de una Direccin IP, Mscara de Red, Red y direccin de Broadcast, as como el Hostname,
Gateway y direcciones de DNS. Ingrese estos valores, revselos y de Clic en Next.
14. No seleccione ningn lenguaje adicional aparte del Ingls predeterminado (English (USA)). Clic en
Next.
15. Escoja la opcin correspondiente de Huso Horario de acuerdo a su situacin geogrfica en el mapa
que se le presenta. Clic en Next.
16. Designe una contrasea para el usuario root, confrmela y clic en Next.
17. Ahora escoja categora por categora cada uno de los siguientes paquetes (los que no se mencionan,
deshabilitarlos)
X Window System
Applications
Editors
Servers
Network Servers
Development
X Software Development
System
Administration Tools
System Tools
18. Clic en Next para que de inicio la instalacin del sistema operativo. Este proceso tomar alrededor de
30 minutos, dependiendo de las caractersticas tcnicas de los equipos.
19. En el momento en que aparece la pantalla de instalacin completa retire el CD/DVD del CD ROM y de
clic en Reboot, para reiniciar el sistema.
26. En la ltima pantalla, clic en Finish. El sistema arranca nuevamente y la instalacion ha finalizado.
http://www.alcancelibre.org/staticpages/index.php/procedimiento-instalar-centos6
Con esta prctica el alumno sera capaz de manejar adecuadamente la consola o terminal de linux, poder
moverse entre directorios, crear ficheros y carpetas, copiar, mover o borrar estos ltimos. De esta
manera se proveer al alumno la habilidad suficiente para desenvolverse en la terminal.
Abrir una terminal o consola de linux. Mediante la guia del instructor aplicar y observar el funcionamiento
Ruta relativa: Se indica a partir del directorio actual. Ej: Si estando en /home queremos ir a el
directorio lpic: cd lpic
"touch" - Se utiliza para cambiar el acceso al archivo y modificar el la hora de acceso, tambien para
crear un archivo.
1 http://aprendamos-linux.blogspot.com/2007/04/comando-bsicos-consola-linux.html
Para la configuracin de asterisk es necesario manipular ficheros de texto. Por tal motivo se requiere que
el alumno conosca el manejo de un editor como el vim (o vi), el cual es uno de los editores mas populares
de sistemas operativos Linux o Unix.
vim dispone de varios modos en su interfaz. De tal manera dependiendo del modo en el que nos
encontremos una misma tecla puede hacer cosas diferentes. Por ejemplo, en el modo INSERTAR la p
escribir una p en el documento, mientras que en el modo de comandos p (Paste) pega lo que hayamos
copiado.
Modo ejecucin:
Se trabaja en este modo presionando las teclas [ESC]+[:]. En este modo se puede ejecutar comandos
avanzados en vim.
Modo edicin:
Es el modo de edicin. Para entrar en este modo basta con escribir una [i] desde el modo comando y a
partir de ese momento todo lo que se escriba con el teclado se escribir en el documento, como si de un
editor convencional se tratase.
Modo comandos:
Se llega a este modo cuando se presiona la tecla [ESC]. En este modo se puede ejecutar comandos
presionando combinaciones de teclas.
1. Abra un terminal virtual. Asegrese de encontrarse en su directorio home. Cree un archivo llamado
vitest usando vim. Escriba el siguiente texto y el alfabeto marino en el archivo vitest. Agregar el
alfabeto es una manera fcil de llenar un par de pantallas de informacin necesaria para un uso
posterior. Esta es una sesin de entrenamiento para el uso de vim.
1 uno
2 dos
3 tres
A alfa
B bravo
C charlie
D delta
E eco
2 http://blog.vud1.com/?p=230
2. Regrese al modo comando. Guarde y salga del archivo. Note que tan pronto presione los dos puntos
(:), estos aparecen bajo la ltima lnea de su rea de entrada. Una vez que el bfer est vaco y el
archivo cerrado, Ud ve un mensaje con el nmero de lneas y caracteres en el archivo.
3. Abra de nuevo el archivo vitest. Note que la ltima lnea en la pantalla muestra el nombre del archivo
y el nmero de caracteres.
4. Utilizando las teclas <h>, <j>, <k> y <l>, practique movindose a travs del archivo.
5. Usando los comandos vim apropiados para moverse a travs del texto:
6. Cambie el archivo vitest de manera que despus de cada letra del alfabeto, un primer nombre comn
sea agregado y que inicie con esa letra. Asegrese de usar distintos mtodos para conmutar del
modo de comandos al modo de edicin (insert). El archivo debera verse ms o menos as:
A alfa Ani
B bravo Ben
C charlie Carlos
8. En el modo comando, situarse en una linea en concreto y probar los comandos copiar (yy), pegar (p)
o cortar(dd). En copiar o pegar se puede anteponer un nmero que indica la cantidad de lineas con
las que el comando respectivo trabajar.
Telefona Tradicional:
Los primeros conmutadores eran operadores telefnicos que enlazaban fsicamente la lnea
origen y la lnea destino.
Conceptos bsicos:
Conmutacin de circuitos.
Cuando se amplifica una seal analgica se amplifica tambin el ruido que lleve incorporado.
Telefona Digital:
Sealizacin:
SONET es normalmente desarrollado en OC-3, OC-12, and OC-48, que son 155.52 Mbps, 622.08
Mbps, and 2.488 Gbps, respectivamente.
Mtodos de Acceso:
Consiste de dos canales B (bearer) de 64 Kbps controlados por un canal D (data) de 16 Kbps.
E1: 30 canales B y un D para sealizacin (64 Kbps ) 2.048 Mbps. Existe un ltimo canal que sirve
para sincronizacin.
En nuestro pas, cuando se necesitan hasta 30 lneas telefnicas es muy comn solicitar un E1 a
las operadoras telefnicas.
El trmino Voz sobre IP concuerda con la manera de trasmitir conversaciones a travs de una red basada
en protocolo IP.
Telefona IP
Ventajas
La voz se convierte en bits de informacin que pueden ser encriptados para garantizar seguridad.
Desventajas
Por la naturaleza de los enlaces de Internet se tiene una menor confiabilidad que la PSTN.
En ocasiones se necesita equipos que den prioridad al trfico de voz por ser en tiempo real,
sobretodo en conexiones inalmbricas.
Asterisk es un software PBX que usa el concepto de software libre (GPL). Digium, empresa que promueve
Asterisk, invierte en ambos aspectos: el desarrollo de cdigo fuente y en hardware de telefona de bajo
costo que funciona con Asterisk. Asterisk corre en plataformas Linux y otras plataformas Unix con o sin
hardware conectando a la red pblica de telefona (PSTN Public Switched Telephone Network). Asterisk
permite conectividad en tiempo real entre las redes PSTN y redes VoIP.
Asterisk incluye muchos recursos que solo eran encontrados en sistemas de mensajeria unificada
propietarios y costosos, se mencionan los ms comunes:
Buzn de voz
Grabacin de llamadas
Desvo de llamadas
Trasferencia de llamadas
Salas de Conferencias
Msica en espera
Integracin con interfaces de telefona tradicional a travs de tarjetas o gateways FXO, FXS, o
digitales (E1, T1, BRI entre otros)
IVR
Lo ms interesante de asterisk es su compatibilidad con mltiples protocolos VoIP como: SIP (Session
Initiation Protocol), H.323, IAX2 (Inter Asterisk eXchange), MGCP (Media Gateway Control Protocol), SCCP
(Skinny Client Control Protocol), entre otros. con la PSTN (HARDWARE)
Versiones de Asterisk:
Existen dos tipos de versiones en asterisk: versiones estandar y versiones LTS (Long Term Support).
Las versiones estandar son mantenidas por un corto periodo de tiempo: 1 ao de soporte completo y 1
ao adicional en el cual se proveen actualizaciones de seguridad
Las versiones LTS tienen un soporte completo por un perodo de 4 aos ms 1 ao adicional para
actualizaciones de seguridad.
Escenarios de uso:
PBX IP PURA:
Una PBX completa que cumple todas las expectativas de una empresa.
En este escenario asterisk trabaja con una PBX que esta previamente instalada. Normalmente es menos
costoso que actualizar toda la PBX a IP.
Asterisk posee funcionalidad de un media gateway, es decir, puede convertir las seales analgicas o
digitales de una PBX tradicional o de los telfonos de los usuarios en voz sobre IP y transmitir por la red
corporativa de datos o internet. La convergencia propicia la reduccin del nmero de circuitos o enlaces y
un mejor aprovechamiento de los recursos. Mediante este modelo se puede conectar por ejemplo oficinas
en distintos paises o regiones, eliminando los altos costos en llamadas internacionales.
SERVIDOR DE APLICACIONES:
Adems de las funciones embebidas que asterisk incorpora, se puede hacer uso de herramientas
adicionales como AGI o AMI para proveer soluciones a medida (aplicaciones informticas) mediante
lenguajes de programacin y bases de datos, satisfaciendo ciertas necesidades especficas del cliente.
Esto convierte a Asterisk en un completo servidor de comunicaciones.
Un media gateway permite convertir entre protocolos de telefona tradicional y telefona IP. Aprovechando
de esta manera toda la infraestructura de telefona que se pueda tener y permitiendo la convergencia e
integracin entre diferentes tecnologias de comunicaciones.
CONTACT CENTER:
Este escenario es bastante comn en escenarios de negocio de ventas por telfono o atencin al cliente.
Asterisk puede servir un sistema de colas en el cual un cliente llama y espera a ser atendido por un
agente. De esta manera se pueden crear soluciones ERP (Enterprise resource planning) integrados a
Asterisk. Otras aplicaciones comunes en este escenario son marcacin de campaas, marcacin
automtica, medicin de calidad de servicio entre otros.
Foreign eXchange Station (FXS): Emite sealizacin (voltaje), permite conectar telfonos,
generalmente de color verde.
Foreign eXchange Office (FXO): Recibe sealizacin (voltaje), permite conectar lneas telefnicas,
generalmente de color rojo.
Presentacin: 1, 2, 4, 8 puertos.
Similares a las tarjetas, puertos FXO, FXS o E1, T1. La interconexin con asterisk se hace atravs de IP
mediante protocolo SIP.
Telfonos IP:
Presentacin: Destinados a distintos tipos de usuario, admiten protocolo SIP, IAX2, H.323.
Consideraciones previas:
Tener un sistema GNU/Linux instalado, recomendable Centos 6. Asegurarse de tener instalado software de
desarrollo, como los paquetes: ncurses, make, gcc, bison, libxml, curl. Trabajar como root.
Mediante este mtodo, nos aseguramos de tener una versin de asterisk estable para el sistema
operativo elegido, adems de facilitar el proceso de actualizacin del programa. Sin embargo, es posible
que al momento de configurar una aplicacin especfica se requiera un mdulo adicional para que
funcione por lo cual hay que instalar dicha funcin si no est presente.
1. Descargar e instalar el repositorio epel para centos, la versin adecuada del repositorio puede
encuntrarse en http://fedoraproject.org/wiki/EPEL
# asterisk -r
Al instalar asterisk mediante este mtodo, se tiene un control ms estricto sobre todas las herramientas o
mdulo que se instalan, eligiendo solamente lo que se adecue nuestras necesidades y pudiendo
personalizar la instalacin poniendo o quitando componentes de asterisk.
Como se observ en la parte 1.4 donde se describieron las caractersticas de Asterisk as como los
escenarios posibles de su aplicacin, Asterisk adems de funcionar como una PBX tiene ms aplicaciones
y por lo tanto al momento de su intalacin debemos tener en cuenta que nuestro S.O disponga de
software como: dahdi, drivers ODBC, bases de datos SQL, codecs, entre otros.
Un requisito bsico para realizar una correcta instalacin de Asterisk es instalar primero DAHDI: acrnimo
de Digium Asterisk Hardware Device Interface (conocido antes como Zaptel) que es el software que
asterisk usa para gestionar hardware de telefona. Es recomendable instalar este software aun si no se
tiene ningn hardware de este tipo instalado, ya que DAHDI es una dependencia requerida para construir
el mdulo de timing (relj del sistema asterisk) llamado res_timing_dahdi, mdulo que es usado para
aplicaciones como MeetMe() o troncales IAX las cuales requieren un preciso control y sincronizacin de
tiempo.
# cd /usr/src
3. Descargar las fuentes de dahdi desde www.asterisk.org, adems de herramientas adicionales como
libpri (en el caso de que se est configurando E1's)
# wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.12.tar.gz
# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-
complete-2.6.1+2.6.1.tar.gz
5. Cargar el modulo dahdi_dummy para que asterisk lo use como fuente de timing:
En una prctica posterior se realizar la configuracin de canales dahdi as como una revisin de las
opciones de configuracin de esta herramienta.
# cd /usr/src/
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.16.0.tar.gz
7. Para tener mayor informacin sobre los eventos que cursan por Asterisk, se puede iniciar la conexin
al CLI con el argumento v. El nmero de v's inidicar el nivel de invormacin que se quiere
mostrar, ejemplo:
# asterisk -rvvvv
Una vez realizada la instalacin de asterisk se aprendern algunos comandos bsicos adems de la
estructura de directorios que usa el programa. Para esta prctica hay que conectarse primero al CLI
(consola de asterisk) con el comando:
# asterisk -r
1. Observar la versin, licencia y garantia de asterisk. Adems ver la ayuda de los comandos disponibles
en el CLI:
# cd /etc/asterisk
4. Ingresar en el directorio en donde se almacenan los mdulos de Asterisk, los cuales sirven para
aadir o quitar funcionalidades al sistema:
# cd /usr/lib/asterisk/modules
# cd /var/lib/asterisk
# cd agi-bin
# cd ../firmware
# cd ../images
# cd ../keys
# cd ../moh
# cd ../sounds
6. Ingresar en el directorio de spools y en sus subdirectorios, el cual almacena los mensajes grabados en
el buzn de voz, las conferencias grabadas, etc.
# cd /var/spool/asterisk/outgoing
# cd ../voicemail
# cd ../tmp
# cd /var/log/asterisk
Como se observa en la tabla, los codecs g729 y g723.1 son de bajo consumo de banda pero para usarlos
hay que pagar licencias. Sin embargo estn disponibles en la red binarios de dichos codecs compilados
por intel, ya que esta ha adquirido licencias para su uso. La web es la siguiente:
http://asterisk.hosting.lv
1. Para instalar estos codecs, ingresar a la pagina web del link indicado, en dicha pgina se descarga el
binario adecuado de acuerdo al tipo de procesador del servidor y versin de Asterisk instalada. Por
ejemplo, para un procesador de 64 bits y versin de Asterisk 1.8 los binarios a descargar seran:
codec_g723-ast18-gcc4-glibc-x86_64-pentium4.so
codec_g729-ast18-gcc4-glibc-x86_64-pentium4.so
3 http://bytecoders.net/content/elegir-un-c%C3%B3dec-de-audio-para-asterisk.html
4 http://www.voipforo.com/codec/codecs.php
5 http://www.speex.org/
Localizar un usuario
Este protocolo ha sido definido por la IETF (The Internet Engineering Task Force) en el documento RFC
(Request for Comments) 3261. En ese documento se explica como deben funcionar programas y/o
dispositivos que quieran implementar el protocolo SIP. Desde un punto de vista del funcionamiento, los
mensajes que se envan son una mezcla entre el protocolo HTTP (Hypertext Transfer Protocol) y el
protocolo SMTP (Simple Mail Transfer Protocol)6.
Para aclarar mejor los conceptos asociados al protocolo SIP visitar el siguiente link:
http://www.sinologic.net/2008-04/aclarando-conceptos-sip-y-voip/
Dentro del protocolo SIP existen los mtodos, que representan las distintas solicitudes que un dispositivo
puede enviar a otro. As mismo existen las correspondientes respuestas a dichas solicitudes. Se detallan a
continuacin:
Solicitudes SIP:
OPTIONS Comunica la informacin acerca de las capacidades de envo y recepcin de telfonos SIP
Las solicitudes SIP son respondidas con respuestas SIP, de las cuales hay 6 clases:
1xx respuestas informativas, tal como 180, la cual significa telfono sonando
Registro SIP:
El registro consiste en que un usuario informe a la red donde puede recibir invitaciones de
comunicaciones por parte de otros usuarios, lo que permite que dicho usuario pudiera recibir un mensaje
en su casa y si luego se trasladaba al trabajo y se registra de nuevo, el mensaje lo recibiera en el
trabajo y no en su casa. El protocolo SIP permite el registro de terminales telefnicos.
nombre de usuario
direccin ip
En el fichero sip.conf se colocan las opciones que sern usadas cuando se establezcan llamadas a travs
del protocolo SIP, adems se crean los canales SIP.
Canal: Es el medio lgico por el cual se emite una llamada entrante o saliente. Por defecto Asterisk
soporta una serie de canales, los ms importantes son: SIP, IAX y DAHDI. Un canal estar siempre
asociado a un terminal telefnico, a una conexin de un proveedor de telefona o a un servidor de
telefona.
Una parte general donde se define la configuracin global del protocolo SIP. Al momento de
configurar una extensin o una troncal, si no se definen algunos parmetros, estos sern tomados
desde la parte general del archivo. Un ejemplo son los codecs audio.
Un bloque central donde se configura el registro a los proveedores VoIP y/o otros servidores
Asterisk .
Una parte final donde se configuran las extensiones internas, las troncales y las conexiones a
otros servidores Asterisk.
Las opciones de la seccin general son (se colocan las que son consideradas de mayor importancia):
Parmetro Descripcin
[general] Etiqueta que indica el comienzo de configuracin general.
context=default Indica el contexto donde llegarn por defecto las llamadas no autenticadas si
Parmetro Descripcin
Con esta linea empieza el segundo bloque del archivo sip.conf y se utiliza para registrarse a
servidores externos; normalmente proveedores SIP u otros servidores Asterisk. El parmetro
se deja comentado y a seguir se presentan algunos ejemplos:
- register => fulano:sesamo@sip.provider1.com
Para el registro con el proveedor el username ser fulano, la contrasea sesamo y el dominio
sip.provider1.com. Si el proveedor usa un puerto que no es el 5060 hay que especificarlo al
register => final de la lnea de esta forma:
- register => fulano:sesamo@sip.provider1.com:5061
En los dos casos las llamadas entrantes llegaran a la extensin s y al contexto que se define
en la configuracin de la extensin. Si queremos que las llamadas entre a una extensin
definida, tenemos que aadir al final de la linea el numero. Este numero puede ser arbitrario
siempre y cuando los proveedores SIP no especifiquen diversamente:
- register => fulano:contrasea@sip.provider1.com/1234
Asterisk pierde el registro, este parmetro representa el numero de segundos que Asterisk
registertimeout=20
esperar antes de volver a intentar registrarse.
este parmetro representa el numero de intentos que Asterisk
registerattemps har para registrarse. Si ponemos 0, los intentos sern infinitos.
Valor 10
Desde la versin 1.6.2.X se puede subscribir el estado de un buzn de voz de un servidor
remoto. En este ejemplo el buzn 1234 y contexto SIP_remote. Para subscribirse en la
mwi =>
configuracin de la extensin se indicar: mailbox=1234@SIP_Remote.
Valor: 1234:password@mysipprovider.com/1234
Finalmente se tiene las opcione especficas para los canales (se colocan las que son consideradas de
mayor importancia):
Parmetro Descripcin
Nombre del canal SIP con el cual un terminal ser identificado. No es necesariamente el
[nombre]
nmero que se usar para contactar a dicho canal.
friend=es un user y peer al mismo tiempo
user: una extensin que se autentica al servidor Asterisk usando el campo From para
type=friend hacer llamadas.
peer una extensin que se autentica para las llamadas entrantes utilizando la
direccin IP y el puerto
Si el terminal se conecta remotamente con un IP dinmico se pone dynamic. En caso
host=dynamic
contrario se pone la direccin IP.
secret= La contrasea para la extensin. Personalizar.
Si este parmetro es configurado, cuando la extensin se conecte al servidor Asterisk,
ste
controlar si hay mensajes de voz pendientes y en caso positivo se lo comunicar
;mailbox=
usando MWI = Message Waiting Indicator. que es una seal audio o vdeo que puede ser
recibida por la mayora de los telfonos IP o Softphone. Ejemplo:
numerobuzon@contextovoicemail
context=telefonos El contexto a que tendr acceso el canal.
callerid=Fulano <201> El nombre y el numero que identifica la extensin cuando llama. Personalizar
Estos dos parmetros definen una de las funcionalidades avanzadas de Asterisk, es decir
;callgroup
la posibilidad de capturar la llamada de una telfono que est timbrando, desde otro
;pickgroup
telfono.
accountcoce=201 Cdigo que aparecer en el registro de llamadas para este canal.
Para mayor profundidad y referencia en cuanto a la configuracin del fichero sip.conf, referirse al
siguiente link:
http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf
1. Abrir el fichero /etc/asterisk/sip.conf y segn los parametros explicados en la tabla anterior, colocar lo
siguiente:
[general]
context=default
udpbindaddr=0.0.0.0:5060
realm=instructor.asterisk.test
tcpenable=no
transport=udp
srvlookup=yes
useragent=instructor
disallow=all
allow=ulaw,gsm,g729
directmedia=no
dtmfmode=rfc2833
language=es
qualify=yes
;insecure=invite,port
allowtransfer=yes
allowguest=no
qualifyfreq=60
alwaysauthreject=yes
rtptimeout=60
rtpholdtimeout=240
allowsubscribe=yes
callcounter=yes
[telefono-201]
type=friend
secret=*4st3r1sK
callerid=Recepcion #PC <201>
context=telefonos
host=dynamic
disallow=all
allow=ulaw,gsm
;mailbox=201@default
[telefono-251]
type=friend
secret=*4st3r1sK
callerid=Alumno #PC <251>
context=softphones
host=dynamic
disallow=all
allow=ulaw,gsm
;mailbox=251@default
3. Ahora se debe configurar los telfonos IP con los datos de las cuentas SIP creadas. Esto depende de
terminal. Entonces los terminales se registran y se puede observar su estado con el siguiente
comando:
4. Cuando se deben configurar muchas extensiones, se pueden crear templates (plantillas) donde se
definen todos los parmetros compartidos por todas las extensiones. Luego por cada una de ellas, se
configuran solamente los parmetros que la diferencian de las dems. Para crear un template la
primera linea debe tener esta sintaxis: [nombreplantilla](!) . Crear una plantilla para hardphones,
otra para softphones:
[hardphones-oficina](!)
type=friend
secret=*4st3r1sK
[telefono-201](hardphones-oficina)
callerid=Recepcion #PC <201>
;mailbox=201@default
[telefono-202](hardphones-oficina)
callerid=Secretaria #PC <202>
;mailbox=202@default
[telefono-203](hardphones-oficina)
callerid=Gerencia #PC <203>
;mailbox=203@default
[telefono-251](softphones-oficina)
callerid=Alumno #PC <251>
;mailbox=251@default
[telefono-252](softphones-oficina)
callerid=Ventas #PC <252>
;mailbox=252@default
[telefono-253](softphones-oficina)
callerid=ATC #PC <253>
;mailbox=253@default
IAX fue creado por Mark Spencer (tambin creador de AsterisK) para paliar una serie de problemas o
incovenientes que se encontr al utilizar SIP en VoIP y que pens que deba ser mejorado.
Las principales diferencias ente IAX y SIP son las siguientes:
Ancho de banda
IAX utiliza un menor ancho de banda que SIP ya que los mensajes son codificados de forma binaria
mientras que en SIP son mensajes de texto. Asimismo, IAX intenta reducir al mximo la informacin de
las cabeceras de los mensajes reduciendo tambin el ancho de banda.
NAT
En IAX la sealizacin y los datos viajan conjuntamente con lo cual se evitan los problemas de NAT que
frecuentemente aparecen en SIP. En SIP la sealizacin y los datos viajan de manera separada y por eso
aparecen problemas de NAT en el flujo de audio cuando este flujo debe superar los routers y firewalls. SIP
suele necesitar un servidor STUN para estos problemas.
Estandarizacin y uso
SIP es un protocolo estandarizado por la IETF hace bastante tiempo y que es ampliamente implementado
por todos los fabricantes de equipos y software. IAX fue estandarizado hace poco tiempo y es por ello
queno se encuentra en muchos dispositivos existentes en el mercado.
Utilizacin de puertos
IAX utiliza un solo puerto (4569) para mandar la informacin de sealizacin y los datos de todas sus
llamadas. Para ello utiliza un mecanismo de multiplexin o "trunking". SIP, sin embargo utiliza un puerto
(5060) para sealizacin y 2 puertos RTP por cada conexin de audio (como mnimo 3 puertos). Por
ejemplo para 100 llamadas simultaneas con SIP se usaran 200 puertos (RTP) ms el puerto 5060 de
sealizacin. IAX utilizara slo un puerto para todo (4569)
En SIP si utilizamos un servidor la sealizacin de control pasa siempre por el servidor pero la informacin
de audio (flujo RTP) puede viajar extremo a extremo sin tener que pasar necesariamente por el servidor
SIP. En IAX al viajar la sealizacin y los datos de forma conjunta todo el trfico de audio debe pasar
obligatoriamente por el servidor IAX. Esto produce una aumento en el uso del ancho de banda que deben
soportar los servidores IAX sobretodo cuando hay muchas llamadas simultneas.
Otras funcionalidades
IAX es un protocolo pensado para VoIP y transmisin de video y presenta funcionalidades interesantes
como la posibilidad de enviar o recibir planes de marcado (dialplans) que resultan muy interesante al
usarlo conjuntamente con servidores Asterisk. SIP es un protocolo de proposito general y podra transmitir
sin dificultad cualquier informacin y no slo audio o video. 9
Parmetros de configuracin:
Son tiles los parmetros generales del sip.conf, adicionalmente se colocan los siguientes de mayor
importancia:
9 http://www.voipforo.com/IAX/IAXvsSIP.php
Para los canales, son vlidos los parametros de configuracin vistos en sip.conf.
Editar el fichero iax.conf, poner los parmetros indicados para la seccin general y crear un canal iax.
Recuerde que tambin se puede aplicar el concepto de plantillas usado en el sip.conf
[general]
bindport=4569
bindaddr=0.0.0.0
delayreject=yes
srvlookup=yes
language=es
bandwidth=high
disallow=all
allow=ulaw ,gsm,g729
minregexpire=60
maxregexpire=60
encryption=yes
forceencryption=no
;trunkmaxsize=128000
trunkmtu=1240
autokill=yes
calltokenoptional=0.0.0.0/0.0.0.0
requirecalltoken=auto
[telefono-301]
type=friend
host=dynamic
secret=*4st3r1sk-I
1. Esta prctica es una continuacin de la prctica 1.6.2 en donde se instal dahdi. Lo que sigue es la
configuracin de los canales asociados a la tarjeta instalada en el servidor. Revisar que dahdi
reconoci e inicio nuestro hardware:
# dahdi_hardware -v
# dahdi_gencof
3. Editar el fichero de configuracin chan_dahdi.conf. Se deben configurar tanto canales FXO como FXS
si se posee, como ejemplo se presenta lo siguiente:
[channels]
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
busydetect=yes
faxdetect=both
language=es
group=0
context=default
;;PUERTO FXO
signalling=fxs_ks
group=0
context=entrada-pstn
channel => 1
;;PUERTO FXS
signalling=fxo_ks
callerid="Recepcion" <1001>
mailbox=1001@default
group=1
context=telefonos
channel => 2
El Dialplan es el ncleo de Asterisk ya que en este se configura toda la lgica, y se determina como se
van a atender las llamadas salientes y entrantes. En lenguaje natural, un ejemplo muy sencillo de un
Dialplan podra ser el siguiente, cuando un usuario marca un nmero:
La parte globals donde se definen las variables globales que se van a utilizar en la central.
Una ultima parte donde queda toda las configuracin de las llamadas.
Parmetro Descripcin
[general] Inicio de la configuracin general del dialplan.
Si static es yes y writeprotect es no, para guardar los cambios hechos desde la consola
static=yes
de asterisk tendremos que escribir el comando dialplan reload.
En caso contrario se actualizar automticamente pero perderemos todos los
writeprotect=no;
comentarios presentes en el archivo.
autofallthrough=yes Si es yes cuando alguna llamada, por algn motivo se sale del plan se terminar.
Algunas aplicaciones y/o funciones tienen la capacidad, bajo algunas circunstancias de
"saltar" desde la prioridad donde se encuentran a una prioridad que normalmente es
priorityjumping=yes
n=+101 donde n es el numero de la lnea que se est ejecutando. Si est en yes har
ese salto sino, no.
En esta seccin se definen las variables globales que se van a poder utilizar en el resto
de los contextos. Por ejemplo:
[globals] 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.
Contextos
Los contextos son colecciones de extensiones agrupadas bajo un criterio comn. Se pueden usar para
implementar algunas caractersticas como:
Seguridad y autenticacin: Permitir llamadas a ciertos destinos solo de telfonos especficos (por
ejemplo llamadas internacionales solo desde gerencia). Inclusive se puede solicitar contrasea
para realizar llamadas a algunos nmeros.
Menus multinivel: Menus para categoras dentro de una empresa como contabilidad, ventas,
gerencia, etc.
Privacidad: Crear listas negras de nmeros que no pueden contactar una extensin/extensiones.
Cada contexto se pone con un nombre entre corchetes []. Todas las lineas de un determinado contexto
tienen el mismo formato:
La prioridad se refiere al orden en que se ejecutan las instrucciones. Primero se ejecuta la de prioridad 1,
luego la 2 y sucesivamente. Asterisk procesa las lneas secuencialmente, comenzando del nmero ms
bajo al ms alto. Se puede colocar la prioridad n (next), con lo cual asterisk incrementar la prioridad en 1
en cada linea de ejecucin.
Extension
En asterisk se define como un conjunto de comandos que se ejecutan para realizar una determinada
tarea que provee un servicio. Desde el punto de vista de la programacin, una extensin sera el nombre
de un script que se ejecuta para proveer una funcin especfica. La extensin puede ser alfanumrica.
En las figura siguiente, se puede observar como cuando se cursa una llamada, esta pertenece a un
Dialplan, dentro de esta pertenecer a un contexto, y aqu a una extensin que como se dijo es un
conjunto de comandos que sern ejecutadas en orden.
Cuando se hace una llamada desde un telfono, asterisk busca a que contexto pertenece dicho canal (en
sip.conf o iax.conf) y lo enlaza con el contexto especificado en el dialplan, ejecutando la extensin
asociada a ese contexto que fue marcada desde el telfono. Como ejemplo observar el grfico inferior:
Crear un contexto llamado pruebas y en l escribir las siguientes aplicaciones del dialplan. Recargar la
configuracin con los siguientes comandos y probar:
Extension start:
Se probar ahora el realizar llamadas entre los terminales SIP, DAHDI e IAX que se han configurado. Crear
el contexto interno y escribir la siguiente configuracin:
El dialplan no esta limitado solo a nmeros fijos, se pude utilizar tambin patrones de nmeros para
controlar el flujo de las llamadas.
Para esto el identificador de extensin debe iniciar con el smbolo _. Los caracteres que pueden usarse
son los siguientes:
Prctica 2.2.1 Cambiar el contexto de las llamadas entre canales sip, especificando las
extensiones con patrones de numeracin para la prctica 2.1.2
i: extensin invlida; usada cuando al pedir el ingreso de una extensin, sta no existe dentro del
contexto actual.
t: timeout extensin; usada cuando al pedir el ingreso de una extensin, se supera el tiempo de
espera al no haber ingresado nada.
2.4 VARIABLES
Asterisk puede usar variables globales, compartidas o variables de canal como argumentos para los
comandos dentro del dialplan. Estas son referenciadas dentro del dialplan usando la siguiente sintaxis:
${NOMBRE:offset:longitud}
Si se usan los indicadores offset y logitud la variable resultante es un substring de la variable original, que
comienza en la posicin indicada por el offset y contiene un nmero de caracteres indicado por longitud
contados hacia la derecha. El primer carcter se cuenta en la posicin 0.
2.5 FUNCIONES
Las funciones son usadas dentro del dialplan para dinamizarlo. No pueden ser usadas directamente como
las aplicaciones, en vez de esto, las funciones retornan valores como si se tratasen de variables
inteligentes. De hecho al trabajar con funciones se asumen las mismas consideraciones que con las
variables.
Su sintaxis es la siguiente:
NOMBRE_FUNCION(argumentos)
Tambin se puede obtener el valor de una funcin, somo si se tratase de una variable:
${NOMBRE_FUNCION(argumento)}
${NOMBRE_FUNCION_1(${NOMBRE_FUNCION_3(argumento)})}
Para conocer un listado de funciones de asterisk y lo que estas realizan, dirigirse hacia:
http://www.voip-info.org/wiki/view/Asterisk+functions
[contador]
exten => 601,1,Verbose(Contador incremental)
;valor inicial
same => n,Set(CONTADOR=0)
;ahora se incrementa el valor
same => n(increm),NoOp(${INC(CONTADOR)})
same => n,Verbose(El valor es: ${CONTADOR})
same => n,PlayDigits(${CONTADOR})
same => n,Wait(1)
same => n,Goto(increm)
2. Con los conocimientos adquiridos, implementar un contador decremental con la funcion DEC()
Las aplicaciones son los obreros del dialplan. Cada aplicacin se encarga de realizar una accin
especfica sobre el canal activo, como por ejemplo reproducir un sonido, recibir un nmero marcado
desde el terminal telefnico, marcar a un canal, colgar la llamada, entre muchas otras tareas.
Dicho de otra manera, una aplicacin ejecuta una tarea que es percibible por el usuario.
Su sntaxis es la siguiente:
NOMBRE_APLICACION(argumentos)
Answer(), Dial() y Hangup() son solo unos pocos ejemplos de aplicaciones del dialplan. Algunas
aplicaciones no requieren de argumentos. Para conocer todas las aplicaciones del dialplan de asterisk,
puede referirse hacia:
http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands
2. Modificar el sip.conf para crear los canales necesarios para la prctica y asignarlos al contexto
adecuado. Adems, crear un contexto (de bienvenida) en el cual se debe colocar una extensin para
saltar al contexto ivr_menu.
Se utilizar el programa festival, que es un motor tts libre. Asterisk posee un mdulo y aplicacin para
usar festival, si no es as, asegurarse de instalar festival y recompilar asterisk.
Toda la programacin y contenido para sintenizar las voces en espaol se lo tiene gracias a un proyecto
;(language__spanish)
(set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone)
(define (tts_textasterisk string mode)
"(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for use in server mode so a single
function call may synthesize the string. This function name may be added to the server safe
functions."
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))
# festival_server
Una expresin es una combinacin de variables, operadores y valores que se concatenan de forma
ordenada para producir un resultado. Una expresin puede por ejemplo comparar valores, modificar una
cadena de caracteres o realizar operaciones matemticas.
Operadores lgicos
!expr (Complemento) Retorna verdadero (true) si hay una cadena no vacia o un valor distinto de
cero, caso contrario retorna falso (false).
Operadores de comparacin
expr1 = expr2
expr1 != expr2
Operadores aritmticos
expr1 + expr2
expr1 - expr2
expr1 * expr2
expr1 / expr2
expr1 % expr2
Operadores condicionales
Parentesis: (, )
Operadores unarios !, -
Multiplicativos: *, /, %
Aditivos: +, -
Lgicos: |, &
Condicionales: ? :
[general]
format=wav
serveremail=direccion@queenvia.com
attach=yes
delete=no
maxmsg=100
maxsecs=180
minsecs=2
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emailsubject=Nuevo Mensaje de ${VM_CALLERID}
emailbody=Buenos das ${VM_NAME},\n\nHemos recibido un mensaje en su buzon de voz
emaildateformat=%A, %B %d, %Y at %r
2. Con esto tenemos ms que suficiente para componer mensajes para el buzon de voz y enviarlos por
email. Ahora vienen los contextos. Como siempre, si es [default] es el genrico, y luego los contextos
especficos. Ejemplo.
[default]
1234 => 5678,Buzon de Ejemplo,ejemplo@buzones.com
En primer lugar, el nmero del buzn, luego lo utilizaremos en el Dialplan para la aplicacin
Voicemail as referirnos a este buzn.
En segundo lugar, la contrasea para acceder al buzn. Tendremos que crear una extesin en el
Dialplan para que el usuario pueda acceder a su buzn de forma interna. Esto solo es til si no
marcamos la opcin de borrado de mensajes del buzn al ser enviados por email
En tercer lugar, nombre del buzn que luego utilizaremos en variables como VM_NAME
3. Crear dentro del contexto adecuado las extensiones y sntaxis adecuada para que cuando se llama a
un canal SIP o IAX, dependiendo del estado del canal se guarde un mensaje de voz al usuario.
10 http://10000horas.com/asterisk/2011/01/30/conquistando-el-dialplan-i-aplicaciones-asterisk-voicemail/
11 http://voztovoice.org/?q=node/53
1. QUITO (sip.conf):
[general]
insecure=invite,port
;register => quito:asterisk2012@dir_ip_guayaquil
[guayaquil]
type=peer
context=entrada_trunk
host=dir_ip_guayaquil
disallow=all
allow=g723.1,g729,gsm
2. GUAYAQUIL (sip.conf):
[general]
insecure=invite,port
;register => guayaquil:asterisk2012@dir_ip_quito
[quito]
type=peer
context=entrada_trunk
host=dir_ip_quito
disallow=all
allow=g723.1,g729,gsm
12 http://www.voip-info.org/wiki/view/Asterisk+-+dual+servers
3. QUITO: (iax.conf)
[guayaquil]
type=friend
secret=asterisk2012
auth=md5
context=entrada_trunk
host=dir_ip_guayaquil
trunk=yes
allow=g723.1,g729,gsm
qualify=yes
4. GUAYAQUIL (iax.conf):
[quito]
type=friend
secret=asterisk2012
auth=md5
context=entrada_trunk
host=dir_ip_quito
trunk=yes
allow=g723.1,g729,gsm
qualify=yes
5. Los terminales en los dos servidores deben tener distinta numeracin, caso contrario, el nmero de
origen (CALLERID deben ser modificado al momento de realizar la llamada.
6. Crear el contexto adecuado para realizar las llamadas de salida, colocando extensiones con prefijos
para diferenciar el destino. De igual manera crear un contexto de entrada para recibir las llamadas
provenientes desde el servidor remoto.
Dentro del dialplan, se define una macro como un contexto ms, de la forma:
[macro-nombremacro]
En donde la cadena de texto nombremacro indica el nombre que se le dar a la macro. Luego dicho
nombre servir para llamarla dentro del dialplan, de la siguiente manera:
[contexto]
exten => ext,pri,Macro(nombremacro,arg1,arg2,...,argn)
Los argumentos son valores numricos o texto que se pasan a la macro para que luego esta pueda
trabajar internamente con una serie de variables: ${ARG1}, ${ARG2},..., ${ARGn}; que se asignan en
orden segn el nmero de argumentos enviados a la macro. Ademas tambin se tiene las variables
MACRO_CONTEXT, MACRO_EXTEN y MACRO_PRIORITY, que indican el contexto, la extension y la prioridad
original en la que se llamo al macro.
Prctica 2.9: Para entender mejor el funcionamiento de las macros, se crear una para el
buzn de voz. Modificar el fichero extensions.conf con lo siguiente:
[macro-voicemail]
exten => s,1,Dial(${ARG1}/${ARG2},10)
same => n,GotoIf($[$["${DIALSTATUS}" = "BUSY"] | $["${DIALSTATUS}" = "NOANSWER"]]?
buzon:terminar)
same => n(buzon),VoiceMail(${ARG1}@${ARG3},bu)
same => n(terminar),Hangup()
[interno]
exten => _[23]XX,1,Macro(buzon,SIP,${EXTEN},acierte)
Los argumentos SIP, ${EXTEN} y acierte, pasaran a guardarse en ${ARG1}, ${ARG2} y ${ARG3}
respectivamente para ser usados por la macro.
El archivo features.conf es donde se configura el parqueo de las llamadas y asignar una funcin a una
determinada combinacin de teclas. Es aqu, por ejemplo, donde se definine cuales son las teclas que se
debe presionar para transferir una llamada, grabarla, iniciar una aplicacin, y muchas ms.
Call parking: Desde un canal mediante una combinacin de teclas, se puede dejar la llamada
parqueada en un canal virtual. Una vez se cierre la presente llamada, se puede tomar desde
otro canal la llamada parqueada y continuar la conversacin. 13
Funciones personalizadas: Se puede programar una tarea especfica en el dialplan para realizar.
Todo esto se configurar en el archivo features.conf, el cual puede contener los siguientes parmetros:
13 http://www.voztovoice.org/?q=node/78
1. Editar el fichero features.conf. Ver los siguientes parmetros indicados en las tablas para una correcta
configuracin.
[globals]
DYNAMIC_FEATURES=test1#automon#disconnect#atxfer#parkcall#automixmon
[subscribe]
exten => _70Z,hint,park:${EXTEN}@parkedcalls
exten => 710,hint,park:710@parkedcalls
2. Y en el contexto interno:
14 http://voztovoice.org/?q=node/80
3. Y finalmente al momento de marcar con la aplicacin dial, colocar opciones adicionales para hacer
uso de las funciones configuradas, las opciones son las siguientes (se presentan con algunos
ejemplos)
Una importante caracterstica de asterisk es la posibilidad de crear conferencias audio. En esta parte se
aprender como configurar el archivo meetme.conf y algunos ejemplos de como usar una conferencia.
;Numero de paquetes audio de 20ms que sern guardados en un buffer de memoria cuando pertenecen a
canales que no son DADHI. Esto permite sincronizar el audio de los distintos participantes y evitar
retrasos. Puede ser un valor entre 2 y 32
[rooms]
;
; la sintaxis es: conf => confno[,pin][,adminpin]
;
conf => 3500
conf => 3501,1234
conf => 3502,1234,5678
En el primer ejemplo se define un cuarto de conferencias cuya extensin es 3500 y a todos los usuarios
es permitido entrar. En el segundo la extensin es la 3501 y para entrar los usuarios tendrn que digitar
el PIN 1234. En la tercero la extensin es la 3502. Los usuarios tendrn que usar el PIN 1234 y los
administradores el PIN 5678
2. Ahora se modifica el dialplan para utilizar las conferencias, aadiendo un nuevo contexto:
[conferencias]
exten => _350[012],1,Meetme(${EXTEN},scM(default))
same => n,Hangup
s: Con esta opcin se activa el men del cuarto de conferencias para usuarios y administradores.
Marcando la tecla asterisco se escuchar el men .
M(default): Cuando en el cuarto de conferencia est solamente una persona, sta escuchara la
msica de espera de la clase default.
4. Ahora, se probar las salas de conferencia limitando el nmero de usuarios, para lo cual se har uso
de una macro:
[macro-meetme]
exten => s,1,MeetMeCount(${MACRO_EXTEN},count)
same => n,Gotoif($[${count} > ${confmax}]?llena)
same => n,MeetMe(${MACRO_EXTEN},scM(default))
same => n,Hangup
same => n(llena),Playback(conf-invalid)
same => n,Hangup
15 http://voztovoice.org/?q=node/205
3.1 ASTDB
Todos los datos se registran o recuperan a travs de dos parmetros: family (familia) y registro (key)
usando la funcion DB de la siguiente manera:
Lectura:
same => n,Set(VARIABLE=${DB(family/key)}
Escritura:
same => n,Set(DB(family/key)=VALOR)
1. Se configurar un contador en una extensinque diga los numeros desde el 0 en adelante hasta que
se corte la llamada.
2. Al llamar a la extensin 603 se escucharan los nmeros desde el 0 en adelante hasta que se cuelgue.
Si se hace de nuevo la llamada, no empieze desde 0 sino desde donde se haya quedado. Para ello se
usara la base de datos de asterisk, donde se almacena la variable COUNT.
3. Ahora se comprueaba que si se vuelve a llamar a la extensin 200 va a continuar desde donde se
quedo anteriormente, aun si se reinicia el servicio de Asterisk.
BLACKLIST
4. Ahora se probara la llamada lista negra, que no es mas que una familia en la base de datos que
permite guardar el numero que se bloqueara para las las llamadas.
5. Aqui lo se hace es guardar el numero 100 en la lista negra. Ahora con la funcin BLACKLIST() se
comprueba si el callerid de la persona que llama es parte de la lista negra:
6. Como se sabe el CallerId tiene nombre y nmero del llamante, y cualquiera de los dos puede ser
bloqueado en la lista negra. Ahora probar agregando el valor de un nombre:
Si el telefono que llama tiene un callerid con nombre Juan tambien ser bloqueado.
Prctica 3.1.2: Realizar una aplicacin para consulta y registro de notas de estudiantes
usando la DB asterisk. Se presentan los diagramas de flujo de la aplicacin solicitada:
EXISTS(${VARIABLE}) Devuelve 1 si la variable contiene datos (no est vacia), caso contrario 0.
Alumnos Profesores
cedula alumno cedula profesor
1713121110
El registro detallado de llamadas (CDR por sus siglas en ingls) es la manera en que Asterisk registra,
valga la redundancia, toda la informacin concerniente a las llamadas realizadas en el sistema. Est
informacin tiene distintos propsitos, siendo el mas comn el de la tarificacin para el cobro de los
servicios, y de aqu su importancia.
Por defecto, Asterisk crea un archivo localizado en /var/log/asterisk/cdr-csv/ llamado Master.csv , el cual
contiene la informacin del registro en formato CSV (Valores Separados por Comas), el cual es fcilmente
exportable a MS Excel. El archivo /etc/asterisk/cdr.conf es el archivo que establece el comportamiento y la
informacin que aparecer en el registro; sin embargo, es posible personalizar o seleccionar la
informacin que queremos que aparezca en el mismo por medio del archivo
/etc/asterisk/cdr_custom.conf.
Adems de lo anterior, es posible almacenar el CDR en una base de datos para mejorar la fiabilidad de los
datos, existen mdulos para que Asterisk almacene el CDR haciendo uso de manejadores como MySQL,
ODBC, SQLite, y PostgresSQL.16
Para almacenar el CDR en una base de datos SQL como postgres, es necesario tener un servidor de dicha
BD corriendo, adems de poseer los permisos adecuados y estructura dentro de la base para guardar la
informacin del CDR, esto se logra mediante los siguientes pasos:
# /etc/init.d/postgresql initdb
listen_addresses = '*'
port = 5432
# su postgres
$ createuser -s -D -R -l -P -e asterisk
$ createdb -O asterisk -e asteriskDB
$ exit
Crear una tabla con los campos necesarios para el CDR, se har uso de un fichero de texto en el cual est
presente la configuracin de la tabla para la BD, que es la siguiente:
/*FICHERO cdr_pgsql.sql */
CREATE TABLE cdr (
16 http://www.voip.unam.mx/mediawiki/index.php/El_registro_detallado_de_llamadas_de_Asterisk_CDR_-_Integracin_con_PostgresSQL
Compilar asterisk con el soporte para CDR en postgreSQL, tener precaucin de verificar si el mdulo se
selecciona al momento de realizar el comando make menuselect.
[global]
hostname=localhost
port=5432
dbname=asteriskDB
password=password
user=asterisk
table=cdr
Reiniciar asterisk y conectarse mediante una herramienta para visualizar los datos, como pgadmin,
colocando los datos de acceso configurados previamente:
Empezar a realizar llamadas y observar como se guarda la informacin de cada llamada realizada.
Verificar cada campo y analizar la informacin que se obtiene desde el CDR.
En el cli de asterisk, revisar los comandos presentes para la administracin de las conferencias.
Cuando se llama un centro de atencin al cliente, sin saberlo, se est dentro de un sistema de
distribucin automtica de llamadas. Cmo funciona? Cada llamada que llega se pone en una cola de
espera respetando la prioridad con que ha llegado. Cuando uno de los operadores que atienden las
llamadas est libre, la llamada ser transferida a ese operador. A lo largo de la espera, segn la
configuracin, el llamante escuchar distintos anuncios (que posicin tiene en la cola, el tiempo estimado
de espera y un largo etctera).
Quizs este es el servicio ms importante y estratgico para una empresa. En base a la calidad del
servicio que ofrece y el tiempo promedio de espera, los clientes la estarn evaluando.
agents.conf
queues.conf
En el primero se configuran, definiendo algunas variables y parmetros, los agentes que atendern las
colas. En el queues.conf se configuran las colas (pueden ser una o ms), los agentes miembros de la cola
y que tipo de estrategia se utilizar para enrutar las llamadas a los distintos operadores.
Parmetro Descripcin
[general] Etiqueta que da inicio a la parte general del archivo .
Si se define en yes el estado del agente se almacena en la base de datos interna de
persistentagents Asterisk. De esta forma cuando se reinicia Asterisk estos datos sern recargados.
Valor yes
multiplelogin Define si est permitido a una extensin conectarse como agente mltiple. Valor no
[agents] A partir de esta etiqueta inicia la configuracin de los agentes .
maxlogintries Nmero de intentos permitidos a un agente para autenticarse.
Nmero de segundos que tiene un agente para contestar una llamada entrante. Si no
autologoff
contesta dentro de ese tiempo, ser desconectado de la cola. Valor 15
yes = si la extensin desde la cual el agente se conecta se vuelve no disponible,
autologoffunavail
automticamente el agente ser desconectado de la cola
Para atender una llamada un agente tiene que presionar la tecla indicada en el
ackcall
prximo parmetro. Valor no (no tiene que presionarla) .
acceptdtmf #
permite al agente terminar una llamada presionando la tecla configurada en el
endcall
prximo parmetro .
enddtmf *
Numero de milisegundos que Asterisk esperar antes de volver a llamar un agente
wrapuptime
que acaba de terminar una llamada. Valor 5000
musiconhold Msica de espera predefinida para el agente. Valor default
locucin que el agente escuchar al terminar una llamada. Si se deja comentado ser
;goodbye=vm-goodbye
la predefinida (vm-goodbye)
updatecdr Actualiza o no el CDR con el nombre del agente. Yes
recordagentcalls Grabar o no las llamadas de los agentes.
recordformat Formato audio de las llamadas grabadas. Valor wav
De manera predefinida las llamadas grabadas se guardan en la carpeta:
;savecallsin /var/spool/asterisk/monitor Si se quiere personalizar la carpeta se indica en este
parmetro. Se deja comentado .
Existen dos maneras de configurar los agentes, la forma atendida (tambin llamada esttica) y la forma
desatendida (tambin llamada dinmica). Difieren entre ellas en la forma como los agentes se conectan
a la cola y reciben llamadas de esta.
Configuracin de Colas: El fichero a editar es /etc/asterisk/queues.conf, se presenta una tabla 18 con las
principales opciones de configuracin y su funcin.
Parmetro Descripcin
[general] Etiqueta que define la parte general del archivo .
yes = se guardan los datos de los miembros de la cola activos en la base de datos
persistentmembers interna de Asterisk. Si se reinicia la PBX los miembros sern reasignados a las colas
correspondientes.
Normalmente una cola funciona de la siguiente manera. Hay unos cuantos usuarios
esperando por ser atendidos por los agentes. Cuando el usuario que est de primero
en la cola viene atendido el segundo se vuelve primero e ser atendido por el primer
agente disponible. Este comportamiento no tiene en cuenta que pueden haber
autofill muchos agentes disponibles y que podran atender los clientes sin esperar que
lleguen a ser los primeros de la cola de espera. Con este parmetro se define otro tipo
de comportamiento. Los clientes sern atendidos de manera paralela hasta que haya
agentes disponibles. De esta forma se reducen considerablemente los tiempos de
espera. Valor yes
El tipo de aplicacin utilizada para grabar las conversaciones de una cola. Puede ser
monitor-type
Mixmonitor o monitor .
Actualiza o no el valor del campo dstchannel del CDR (el registro de las llamadas) con
updatecdr
el nombre del agente.
Si un agente hace parte de ms de una cola y se ha definido su tiempo de descanso
shared_lastcall entre una llamada y otra (el parmetro wraptime), con este parmetro se define si ese
tiempo va respetado por las distintas colas de que el agente es miembro. Valor yes
Con esta etiqueta se define la primera cola de espera , para el ejemplo, se llama
[ventas]
ventas.
musiclass La msica de espera para los clientes en la cola. Valor default
Este parmetro permite crear una anuncio para que los agentes que pertenecen a
;announce=queue-ventas ms de una cola para que sepan, antes de atender una llamada, de que cola proviene
el cliente. Se deja comentado
En este parmetro se define la lgica con que se enrutarn las llamadas de una cola a
los agentes:
leastrecent: Asigna la siguiente llamada al agente que ms tiempo lleva sin
atender una llamada.
fewestcalls: Asigna la siguiente llamada al agente que menos llamadas ha
atendido.
strategy random: Asigna la siguiente llamada aleatoriamente a cualquier agente disponible.
ringall: Llama todos los agentes disponibles a la vez hasta que uno conteste.
rrmemory: Distribuye las llamadas por turnos entre los agentes disponibles y
recuerda el ltimo agente al que intent llamar.
linear: Llama los agentes siguiendo el orden definido en este archivo de
configuracin. Si son agentes dinmicos segn el orden con que se han registrado a
la cola .
Conocidos los parmetros adecuados para la configuracin de colas y agentes, editar los ficheros
agents.conf y queues.conf
agents.conf
[general]
persistentagents=yes
multiplelogin=no
[agents]
maxlogintries=3
autologoff=15
autologoffunavail=yes
ackcall=no
acceptdtmf=#
endcall=yes
enddtmf=*
queues.conf
[general]
persistentmembers=yes
autofill=yes
monitor-type=mixmonitor
updatecdr=no
shared_lastcall=yes
[ventas]
musicclass=default
;announce=queue-ventas
strategy=random
servicelevel=120
context=ventas-exit
timeout=15
retry=4
timeoutpriority=app
weight=0
wrapuptime=2
autofill=yes
autopause=yes
maxlen=50
setinterfacevar=yes
setqueueentryvar=yes
setqueuevar=yes
;membermacro=macro
announce-frequency=90
min-announce-frequency=15
;periodic-announce-frequency=60
;random-periodic-announce=no
announce-holdtime=once
announce-position=more
announce-position-limit=5
announce-round-seconds=30
;periodic-announce=queue-periodic-announce
;periodic-announce=anuncio1,anuncio2
;monitor-format=gsm|wav|wav49
monitor-type=mixmonitor
joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown
;eventwhencalled = yes
;eventmemberstatus = yes
reportholdtime=yes
ringinuse=no
memberdelay=5
timeoutrestart=yes
;defaultrule=myrule
Agentes de manera atendida: Una vez terminado de configurar estos ficheros, se crea un contexto en el
dialplan mediante el cual los agentes pueden ingresar a la cola.
[login]
exten => 777,1,Answer()
same => n, AgentLogin()
same => n,HangUp()
Finalmente crear un contexto en el cual recibir las llamadas entrantes que irn a la cola:
[colas]
exten => 600,1,Answer()
same => n,MixMonitor(${UNIQUEID}.gsm,b)
same => n,Queue(ventas,t,,,30)
same => n,HangUp()
Agentes de manera desatendida: Con este mtodo, se usarn las aplicaciones AddQueueMember y
RemoveQueueMember que permiten agregar un agente en la cola y quitarlo respectivamente. Los
agentes no necesariamente deben estar presentes en el fichero agents.conf
[login]
exten => 777,1,Answer()
same => n, AgentLogin()
same => n,HangUp()
;Ingreso en la cola
exten => 778,1,Answer()
same => n,Addqueuemember(ventas,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,HangUp()
;Salida de la cola
exten => 779,1,Answer()
same => n,Removequeuemember(ventas,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,HangUp()
La integracin de asterisk con bases de datos relacionales se realiza a travs del uso del mdulo odbc.
Una vez asegurada la interconexin entre la BD y asteris, es posible realizar lecturas o escrituras a la
base de datos. As, se saca ventaja de toda la potencia que ofrece el guardar la informacin dentro de
una base de datos relacional.
El conector ODBC es una capa de software que permite a Asterisk comunicarse con bases de datos
relacionales sin requerir el uso de una aplicacin nica para cada base de datos que se quiera soportar.
Luego, hay que configurar el driver odbc para la base de datos, en este caso PostgreSQL
versin 9.1, esto se logra editando el fichero: /etc/odbcinst.ini, el cual debe contener lo
siguiente:
[PostgreSQL]
Description = ODBC for PostgreSQL
#Driver = /usr/lib/psqlodbc.so
Setup = /usr/lib64/libodbcpsqlS.so
Driver = /usr/pgsql-9.1/lib/psqlodbc.so
FileUsage = 1
# odbcinst -q -d
Luego de esto, se debe crear el conector que ser usado por asterisk para integrarse con PostgreSQL a
travs de ODBC, esto se configura en el fichero /etc/odbc.ini, los datos son los siguientes 19:
19http://ofps.oreilly.com/titles/9780596517342/asterisk-DB.html
Una vez editado el fichero hay que probar que el conector funcione adecuadamente, correr para ello el
siguiente comando:
El cual devuelve:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> +------------+
| ?column? |
+------------+
|1 |
+------------+
SQLRowCount returns 1
1 rows fetched
Llegado a este punto, est listo el conector y la base de datos, lo que sigue es configurar asterisk
correctamente para el uso del connector odbc. Para asegurarse esto, se debe recompilar asterisk.
Una vez terminado el proceso de recompilacin, hay que editar el fichero /etc/asterisk/res_odbc.conf, en
donde se colocan los datos para que asterisk use el conector ODBC. El fichero debe contener lo siguiente:
[ENV]
[odbc-pg]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => 4st3r1sk
pooling => no
limit => 1
pre-connect => yes
http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/getting_funky.html
Configurar func_odbc.conf
No olvidar que se debe tener una tabla llena de datos para poder realizar las acciones mencionadas
anteriormente, crear tabla clase y cargar datos a la tabla:
/*clase.sql*/
CREATE TABLE clase (
id serial,
matricula int NOT NULL,
nombre varchar(20) NOT NULL,
nota int NOT NULL,
evaluacion int NOT NULL,
fecha timestamp without time zone NOT NULL,
/*valores.sql*/
INSERT INTO clase (matricula,nombre,nota,evaluacion) VALUES ('123450','Fulano
Fufu','0','0'),
('123456','Zutano Zapata','0','0'),('234567','Mengano Mata','0','0'),('345678','Pepito
Perez','0','0');
Finalmente editar el dialplan para poder realizar lo pedido. Se har uso de la funcin ODBC_() para
leer/escribir a la BD. Su sntaxis es la siguiente:
Lectura:
Set(VARIABLE=${ODBC_funcionODBC(ARG1,ARG2,...,ARGn)})
En este caso, la funcin ODBC_, busca en el fichero func_odbc.conf el nombre de la funcin dado por
'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o ms variables, de acuerdo a lo
requerido por la sentencia SQL en func_odbc.conf. Finalmente se ejecuta la consulta y el valor obtenido se
setea a VARIABLE.
Escritura:
Set(ODBC_funcionODBC(ARG1,ARG2,...,ARGm)=VAL1,VAL2,...,VALn)
En este caso, la funcin ODBC_, busca en el fichero func_odbc.conf el nombre de la funcin dado por
'funcionODBC'. Se pasan las variables ARG1-ARGn, pueden ser 0 o ms variables pero tambin se pasan
los valores VAL1-VALn los cuales indican a la sentencia SQL en func_odbc.conf que sern usados para una
accin de escritura. Finalmente se ejecuta la consulta y se actualiza la base de datos con los nuevos
parmetros.
El Asterisk Gateway Interface (AGI) permite desarrollar aplicaciones externas que pueden
interactuar con Asterisk. Estas aplicaciones pueden escribirse en distintos lenguajes de
programacin y de hecho existen libreras en Perl, PHP, Python, Ruby que simplifican la
escritura de estas aplicaciones.
La versatilidad de usar un AGI estriba en que se puede usar toda la potencia del lenguage de
programacin que se est usando, para hacer tericamente cualquier tarea, accin o proceso a
travs de asterisk. Como un ejemplo sera el control de seguridad de un edificio, o el
lanzamiento de una alarma de alerta y llamada al responsable cuando la temperatura en un
invernadero supere un lmite fijado o el envo de datos del llamante a un CRM, etc. Como se
menciona, todo depende de la potencia del lenguaje de programacin y de la imaginacin y
uso que se quiera hacer de la central.
Cuando se trabaja con AGI, la interaccin entre esta y Asterisk se implifica de la siguiente
manera:
Tipos de AGI:
AGI estandar: Es aquel AGI que se puede usar localmente. Generalmente es un programa
escrito en algn lenguaje de programacin, cuyo ejecutable/binario se coloca en
/var/lib/asterisk/agi-bin. La forma de llamar a esta agi desde el dialplan es la siguiente:
En este tipo de AGI, se lanza un proceso por cada llamada a esta, por lo cual si se tiene un flujo
intenso y grande de llamadas se puede llegar a colapsar el servidor.
Fast AGI: Similar al AGI anterior, solamente que ahora, el AGI est ubicado en un servidor
distinto a asterisk, y su llamada se realiza mediante el URL completo. El flujo de datos usa el
protocolo TCP, puerto 45:73. Se llama de la siguiente manera:
De igual manera se pueden pasar argumentos al AGI. La ventaja de este tipo de AGI es que se
alivia la carga del servidor Asterisk al ejecutarse los procoesos resultantes de la llamada al AGI
en otro servidor.
EAGI: Enhanced AGI, similar al AGI estandar pero se transmite tambin el audio del canal de
entrada para su tratamiento dentro del AGI.
Para conocer Todas las respuestas y comandos que se pueden usar en el AGI, refirase al libro:
Asterisk: The Definitive Guide, 3ra Edicin, Pag, 481,483-485. Leif Madsen, Jim Van Meggelen
& Russel Bryant. Editorial O'reilly.
http://search.cpan.org/~jamesgol/asterisk-perl-1.03/lib/Asterisk/AGI.pm
Ahora, con la librera lista, se puede programar un AGI que realizar suma, resta, multiplicacin
o potencia con 2 variables enviadas desde asterisk y un operador mediante el cual se decide
que tarea realizar. El contenido del script es el siguiente:
#!/usr/bin/perl
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
%input = $AGI->ReadParse();
$op1 = $AGI->get_variable('var1');
$op2 = $AGI->get_variable('var2');
$ope = $AGI->get_variable('menu');
for ($ope) {
/1/ and do {$total=$op1+$op2;};
/2/ and do {$total=$op1-$op2;};
/3/ and do {$total=$op1*$op2;};
/4/ and do {$total=$op1**$op2;};
}
$AGI->set_variable('RESULTADO',$total);
Escribir en el dialplan el contexto y las lneas necesarias para llamar y hacer funcionar el AGI:
20http://www.asterisk.name/writing-agi-scripts-in-perl.html
Prctica 3.5.2: Instalacin de AGIs para el uso de tts y motor asr de google:
Se descargarn e instalarn un par de AGIs listas, para poder usar los servicios de google en lo
referente a sntesis de voz y reconocimiento del habla. Toda la documentacin, as como los
scripts se encuentran en las siguientes pginas:
http://zaf.github.com/asterisk-speech-recog/
http://zaf.github.com/asterisk-googletts/
Se debe cumplir los requisitos previos: tener instalado perl-libwww flac y mpg123:
TTS:
Agi(googletts.agi,Texto a decir,[lenguage,tecla_interrupcion])
ASR:
Agi(speech-recog.agi,[timeout,lenguage,tecla_int,NOBEEP])
AMI (Asterisk Manager Interface) es una interfaz de monitoreo y gestin presente en Asterisk
que interactua con la PBX recibiendo eventos; al mismo tiempo permite enviar acciones que
Asterisk ejecutar. La AMI trabaja en el puerto predefinido 5038 TCP y para activarla hay que
modificar el archivo de configuracin manager.conf.
La nica limitacin es que Asterisk no est preparado para recibir muchas peticiones a travs
del AMI, lo que puede causar su inestabilidad.
Tambin es posible usar AMI a travs de HTTP gracias a que asterisk implementa un sencillo
servidor HTTP. Esto permite a una aplicacin externa la administracin de Asterisk a travs de
este protocolo. AMI a travs de HTTP se configura en /etc/asterisk/http.conf
[general]
enabled=yes
webenabled=yes
bindaddr=127.0.0.1
[curso_asterisk]
secret=4st3r1sk
read=system,call,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,agent,user,config,command,reporting,originate
Guardar y recargar asterisk, observar los clientes del manager con el comando manager show
users. Finalmente, usar telnet para probar la conexin y enviar algunos comandos:
Action: Login
Username: curso_asterisk
Secret: 4st3r1sk
Response: Success
Message: Authentication accepted
Action: Ping
Response: Success
Ping: Pong
Timestamp: 1282739190.454046
Action: Logoff
Haciendo uso de AMI se instalar una interfaz grfica para Asterisk, mediante la cual se podr
administrar al programa.
# cp -r /etc/asterisk /etc/asterisk_bck
[general]
enabled=yes
webenabled=yes
port=5038
httptimeout=60
bindaddr=dir_ip_servidor
[admin]
secret=contrasea
read=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,agent,user,config,command,reporting,originate
Recargar Asterisk, y proceder a la instalacin del GUI, se usar asterisk-GUI ya que esta bien
integrado a Asterisk adems es desarrollado por digium. Primero se debe tener subversion en
el sistema:
# svn co http://svn.asterisk.org/svn/asterisk-gui/branches/2.0
# cd 2.0
# ./configure
# make
# make install
# make checkconfig
Una vez terminado, desde el navegador se puede acceder a la GUI. El usuario y contrasea son
los que se configuraron en el manager.conf. El link es el siguiente:
http://dir_ip_servidor:8088/asterisk/static/config/cfgbasic.html
http://dir_ip_servidor:8088/static/config/cfgbasic.html
21 http://voztovoice.org/?q=node/91