Asterisk es una central telefnica IP (IPBX) de cdigo abierto
que corre sobre linux y que es compatible con la mayora de
tecnologas de VoIP (SiP, H323, MGCP, IAX, ) y de telefona
tradicional Anloga y Digital (TDM, ISDN, BRI, PRI)
Brinda todos los servicios de una PBX propietaria
tradicional
3. Preparando un Sistema para Asterisk
Seleccin de Hardware para el Servidor
En trminos de requerimientos asterisk es similar a aquellas
aplicaciones embebidas y de tiempo real
En diseos de grandes aplicaciones es comn observar una
distribucin de de funcionalidades entre mltiples servidores
La flexibilidad es una de las razones de peso por las cuales
los negocios de rpido crecimiento toman la decisin de
implementarlo
4. Preparando un Sistema para Asterisk Seleccin de Hardware
para el Servidor
5. Preparando un Sistema para Asterisk
Seleccin de Hardware para el Servidor
La seleccin del hardware puede ser muy sencilla, como muy
complicada al mismo tiempo:
Sencilla porque cualquier plataforma x86 puede servir
Complicada porque el rendimiento del sistema depender del
cuidado que se tenga al momento de seleccionar el hardware
Si estamos implementando un sistemas de hobbie o de aprendizaje
podemos obviar este diseo, pero si se trata de una solucin
corporativa es importante tener en cuenta las siguientes
diapositivas
6. Preparando un Sistema para Asterisk
Consideraciones respecto a rendimiento
El mximo numero de conexiones simultaneas:
Cada conexin incrementa carga al sistema
El porcentaje del trafico que requiere un intensivo
procesamiento DSP cuando se usa cdecs de compresin
El procesamiento DSP que asterisk hace por software tiene un
impacto directo en el numero de llamadas concurrentes que se pueden
soportar. Ejem: 50 G.711 vs. 10 G.729
Que nivel de conferencia va a brindar el sistema y con que
frecuencia se har
7. Preparando un Sistema para Asterisk
Consideraciones respecto a rendimiento
Cancelacin de Eco :
Se utiliza cuando se utilizan redes PSTN, es una funcin
matemtica por lo tanto aumenta los recursos de procesamiento
Como alternativa existen las tarjetas para cancelacin de ECO y
traduccin de cdecs que ofrece digium
En un ambiente netamente IP solo se necesita cargar el modulo
ztdummy (USB timing)
11. Requerimientos de software
Primero debemos averiguar la versin exacta de nuestro kernel
con el comando: uname -a deberamos ver algo como: [root@asterisk
~]# uname -a Linux asterisk.fiec.espol.edu.ec 2.6.18-8.el5 #1 SMP
Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux
12. Requerimientos de software
Luego deberamos verificar si tenemos instaladas las fuentes del
kernel, para ello utilizamos el comando rpm -q kernel-devel,
deberiamos ver algo como esto: [root@asterisk ~]# rpm -q
kernel-devel kernel-devel-2.6.18-8.el5
Si no estn instaladas podemos hacerlo con yum de la siguiente
forma: yum install kernel-devel
13. Requerimientos de software
Ahora si, debemos ejecutar los siguientes comandos para
verificar si tenemos instalados los paquetes: yum install bison
bison-devel ncurses ncurses-devel zlib zlib-devel openssl
openssl-devel gnutls-devel gcc gcc-c++
14. Requerimientos de software
Si alguno de estos paquetes falta, lo instalamos con yum
install nombre-del-paquete ejemplo:
package gnutls-devel is not installed [root@asterisk ~]# yum
install gnutls-devel
15. Requerimientos de software
5.- Un paso ms antes de empezar con la instalacin, CentOS no
instala las fuentes del kernel en el directorio /usr/src/linux como
esta escrito en los Makefile de Zaptel y Asterisk, para ello nos
vamos a /usr/src/ y creamos un link llamado linux hacia el
directorio con las fuentes del kernel el cual esta ubicado en
/usr/src/kernels/mi_version_del_kernel (aqui utilizamos la
informacin obtenida del paso 2) estos son los resultados que
esperamos: [root@asterisk ~]# cd /usr/src/ [root@asterisk src]# ln
-s kernels/2.6.18-8.el5-i686/ linux [root@asterisk src]# ll total
28 drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk drwxr-xr-x 3
root root 4096 jun 12 13:17 kernels lrwxrwxrwx 1 root root 26 jun
13 09:12 linux -> kernels/2.6.18-8.el5-i686/
16. Asterisk add-ons
cd /usr/src/asterisk-addons
./configure
make
make install
17. Opciones del inicio de asterisk
asterisk h muestra la ayuda
Esta es una lista de las opciones mas usadas:
-c Console, nos permite conectarnos a la consola de asterisk o
CLI.
-v Verbosity. Es usada para indicar el numero de lineas que
queremos mostrar en el debug .
-g Core dump. Si asterisk termina inesperdamente, crea un
archivo de core en el que se puede determinar las causas de la
falla
-r Remote. Esto es usado para reconectarnos remotamente a un
proceso de Asterisk que este corriendo con aterioridad
18. Directorios usados por asterisk
/etc/asterisk/
Contiene los archivos de configuracin de Asterisk (.conf). Sin
embargo el archivo system.conf se encuentra ubicado en el
directorio /etc/dahdi/
Cualquier otro software puede usar el hardware y el driver de
dahdi, por lo tanto el archivo system.conf no esta ubicado
directamente en el directorio /etc/asterisk
19. Directorios usados por asterisk
/usr/lib/asterisk/modules/
Este directorio contiene todos los mdulos que asterisk puede
llegar a cargar , dentro de este directorio se encuentran varias
aplicaciones, codecs, formatos y canales usados por Asterisk. Por
defecto Asterisk carga todos estos mdulos al inicio.
(modules.conf).
/var/lib/asterisk/
Este directorio contiene el archivo astdb y una serie de
subdirectorios. astdb contiene la informacin de la base de datos
local de Asterisk, una especie de Registro de Win
20. Directorios usados por asterisk
Los subdirectorios dentro de /var/lib/asterisk son:
agi-bin/
Contiene scripts personales
firmware/
Contiene imgenes binarias de firmware de varios dispositivos
compatibles con asterisk
images/
Las aplicaciones que se comunican con canales que soportar
imagenes, buscan en este directorio
21. Directorios usados por asterisk
keys/
Aqu se guardan las llaves RSA que se utilizaran en las
comunicaciones peer to peer (IAX2)
mohmp3/
Las aplicaciones que usan music on hold buscaran por defecto
los archivos de audio en este directorio
sounds/
Aqu se buscan por defecto los sonidos bsicos de asterisk
reproducios por playback( ) y background( )
22. Directorios usados por asterisk
/var/log/asterisk
Como el nombre lo indica en esta carpeta asterisk guarda los
logs o archivos de eventos
/var/log/asterisk/cdr-csv
Este directorio es usado para guardar los CDRs en un formato
CSV o comma-separated value
/var/spool/asterisk/
Este directorio contiene algunos subdirectorios, incluyendo
outgoing/, qcall/, tmp/, y voicemail/. Asterisk monitorea estos
directorios en busca de archivos de texto que contienen informacin
respecto a requerimiento de llamadas.
23. Configuracin inicial de Asterisk
En esta primera parte vamos a asumir que tenemos una tarjeta
Digium TDM11B es decir con 1 puerto FXS y un puerto FXO. Los
archivos que vamos a modificar son:
/etc/dahdi/system.conf
En este archivo se hace la configuracin de bajo nivel para la
interfaz de hardware. Vamos a configurar un canal FXS y FXO. #ztcfg
-vv
24. Configuracin inicial de Asterisk
/etc/asterisk/chan_dahdi.conf
En este archivo, vamos a configurar para Asterisk la interfaz
de hardware, en otras palabras aqu configuraremos los canales
analgicos. CLI>module reload chan_dahdi.so
/etc/asterisk/extensions.conf
En este archivo se creara el plan de marcado, el primero que
haremos ser muy primitivo pero permitir comprobar que el sistema
funciona. CLI>module reload pbx_config.so
25. Configuracin inicial de Asterisk
/etc/asterisk/sip.conf
En este archivo configuraremos los canales SIP CLI>module
reload chan_sip.so
/etc/asterisk/iax.conf
En este archivo configuraremos los canales IAX CLI>module
reload chan_iax2.so
26. Grabacin de audio con Record() Record( filename.format,
silence, maxduration, options) Dentro de [internal] : exten =>
*282,1,Record(intro%d.gsm) exten => *282,2,Playback($ {
RECORDED_FILE } ) exten => *282,3,Hangup()
27. FXS y FXO para Asterisk
Mas simple:
Un puerto FXO no genera tonos de marcado, por el contrario los
recibe.
Un puerto FXS genera un tono de marcado y el voltaje necesario
para hacer indicar a la estacin que hay una llamada entrante.
Los puerto son definidos en los archivos de configuracin de
acuerdo a la sealizacin que usan y en sentido contrario al tipo de
puerto que fsicamente son.
Es decir un puerto FXS se define en la configuracin como FXO y
viceversa.
28. FXS y FXO para Asterisk
En tarjetas Digium y en general el modulo FXS es verde, el FXO
es rojo
IMPORTANTE: Conectar la PSTN en un modulo verde puede destruir
el modulo y hasta la tarjeta !!
La primera lnea define el tipo de sealizacin y el protocolo
para el canal 4:
Loopstart (ls) Groundstart (gs) Kewlstart (ks)
31. Configuracin de un canal FXO
La diferencia est en la forma como el equipo remoto solicita el
tono de marcado, en groundstart lo hace mandando momentneamente a
tierra la lnea, loopstart lo hace en cambio usando un corto
momentneo para pedir tono de marcado. Kewlstart es lo mismo que
loopstart pero es un poco mas eficiente en cuanto permite detectar
desconexiones remotas.
Kewlstart es el mas usado en las implementaciones de asterisk y
funciona bien con las lneas de nuestra localidad.
32. Configuracin de un canal FXO
loadzone configura un grupo de indicaciones (determinadas en
zonedata.c) relativas a los sonidos de la lnea en determinada regin
o pas, tales como tono de marcado, ciclos de timbrado, tono de
ocupado, etc.
defaultzone es usada si ninguna zona se ha especificado para un
canal en particular
Para comprobar los cambios ejecutamos en el shell [root@espol]#
dahdi_cfg -vvv
33. Configuracin de un canal FXO
Configuracin del hardware en chan_dahdi
Asterisk usa la informacin en /etc/asterisk/chan_dahdi.conf
para determinar las configuraciones del hardware de telefona
instalado en el sistema.
El archivo chan_dahdi.conf tambin controla las caractersticas y
funcionalidades asociadas con los canales fsicos: caller id,
llamada en espera, cancelacin de eco y muchas mas .
34. Configuracin de un canal FXO Configuracin del hardware en
/etc/asterisk/chan_dahdi.conf [channels] ; canales fsicos: ;
opciones por defecto para todos los canales usecallerid=yes
hidecallerid=no callwaiting=no threewaycalling=yes transfer=yes
echocancel=yes echotraining=yes ; definicion de canales:
context=incoming ; llamadas entrantes se dirigen a [incoming] en
extensions.conf signalling=fxs_ks ; Use sealizacion FXS para un
canal FXO channel => 4 ; PSTN se conecta al puerto 4
35. Configuracin de un canal FXO
Configuracin del hardware en chan_dahdi
La seccin [channels] determina el mtodo de sealizacin para los
canales fsicos y sus opciones.
Cuando una opcin es definida esta es heredada hacia abajo al
resto del archivo.
Un canal se define usando channel => , y cada definicin del
canal hereda todas las opciones definidas por encima de esa
lnea.
usecallerid=yes habilita el caller ID hidecallerid=no No se
ocultar el caller ID para las llamadas salientes.
36. Configuracin de un canal FXO
Configuracin del hardware en zapata
callwaiting=no La llamada en espera es desactivada para una
linea FXO
threewaycalling=yes Permite que una llamada activa pueda ser
puesta en espera con un hook flash luego podemos llamar a un
tercero e invitarlo a la conversacin con otro hook flash.
transfer=yes Permite transferir llamadas con un hook flash;
requiere que three-way calling este activada
37. Configuracin de un canal FXO
Configuracin del hardware en zapata
echocancel=yes Habilita la cancelacin de eco, se requiere
especialmente en lneas anlogas.
echotraining=yes Le indica a asterisk que enve un tono a travs
de la lnea al inicio de la llamada para medir el eco y luego
aprender de el mas rpidamente.
Cuando una llamada ingresa a una interfaz FXO, Usted deseara
que se realice alguna accin verdad ?
38. Configuracin de un canal FXO
Configuracin del hardware en chan_dahdi
La accin a realizar es configurada dentro de un bloque de
instrucciones llamado contexto el mismo que se configura en el
extensions.conf.
Las llamadas entrantes en la interfaz FXO son direccionadas al
contexto incoming con la lnea context=incoming .
Finalmente como un canal FXO usa sealizacin FXS, la definimos
en la linea signalling=fxs_ks
39. Configuracin de un canal FXO CONFIGURACION DEL DIALPLAN
[incoming] ;las llamadas que provienen del puerto FXO son
;direccionadas a este contexto desde chan_dahdi.conf exten =>
s,1,Answer() exten => s,2,Echo()
La configuracin viene prcticamente a ser la misma con la adicin
de la lnea inmediate=no y las lneas referentes al puerto fxs:
[channels] ; canales fsicos: ; opciones por defecto para todos
los canales usecallerid=yes hidecallerid=no callwaiting=no
threewaycalling=yes transfer=yes echocancel=yes echotraining=yes
inmediate=no
42. Configuracin de un canal FXS
; definicin de canales:
context=internal ; Usaremos el contexto [internal] para las
extensiones en el extensions.conf signalling=fxo_ks ; Use
sealizacin FXO para un canal FXS channel => 1 ; telfono
conectado al puerto 1
context=incoming ; Las llamadas entrantes se dirigen hacia
[incoming] en el extensions.conf signalling=fxs_ks ; Use sealizacin
FXS para un canal FXO channel => 4 ; PSTN se conecta al puerto
4
Cuando una llamada entra a un contexto sin una extensin
especifica de destino (por ejemplo una llamada a un puerto fxo)
deben ser recibidas por la extensin s start
44. Las funciones Answer( ), Playback( ) y Hangup( )
Solo reproduce el archivo de audio, no presta atencin ni
ejecuta accin alguna a los ingresos hachos por el dialpad, por
defecto busca en /var/lib/asterisk/sounds/
45. Agregando lgica al Dialplan
Goto(context, extension, prioridad)
Esta aplicacin hace fcil mover una llamada entre las distintas
partes del dialplan.
La sintaxis de la aplicacin Goto() nos solicita que pasemos
como argumentos: el contexto, extensin y prioridad del
destino.
En conjunto con background permiten la interaccin con el
usuario, su uso mas comn es el los llamados mens de voz, auto
atendedores o arboles telefnicos
46. Agregando lgica al Dialplan
Background(ruta_al_archivo/archivo)
A diferencia de Playback( ), cuando el llamante presiona una
tecla (o serie de teclas) en el pad del telfono, este interrumpe la
reproduccin de audio y lo enva a la extensin que corresponda de
acuerdo al digito(s) presionados.
Por ejemplo si el llamante presiona 5 asterisk deja de
reproducir el audio y le pasa el control de la llamada a la primera
prioridad de la extensin 5 dentro del mismo contexto en que fue
llamado
Para no permitir el ingreso de extensiones invalidas(3 en
nuestro ejemplo), usamos una extensin especial ( i )
En cambio para el caso en que el usuario no ingrese una
extensin despus de un tiempo determinado (10 seg.) usamos la
extensin t.
Las llamadas sern enviadas a la extensin t si el llamante toma
mucho tiempo en ingresar una extensin despus que Backgrund() ha
terminado de reproducir el archivo de audio
57. Expresiones y Manejo de Variables Expresiones Se definen
como un conjunto de variables, operadores y valores que se colocan
juntas para obtener un resultado. $[expresion] Ejemplos: $[${CONT}
+ 1] $[${CONT} / 2] Cuando Asterisk encuentra una expresin,
reemplaza toda la expresin por el valor resultante. Es importante
notar que antes de hacer esto primero evala el valor de las
variables
58. Expresiones y Manejo de Variables
exten => 321,1,Set(CONT=3)
exten => 321,2,Set(NEWCONT=$[${CONT} + 1])
exten => 321,3,SayNumber(${NEWCONT})
exten => 321,2,Set(NEWCONT=$[3 + 1])
exten => 321,2,Set(NEWCONT=4)
Finalmente el valor de 4 es asignado a la variables NEWCONT a
travs de la funcin Set( )
Ojo:
exten => 123,1,Set(TEST=$[2+1])
No es lo mismo que :
exten => 234,1,Set(TEST=$[2 + 1])
59. Expresiones y Manejo de Variables Operadores Boleanos
Evalan la verdad de una sentencia or expr1 | expr2 and expr1 &
expr2 Comparacin expr1 {=, >, >=, 345,2,GotoIf($[{$TEST} =
1]?10:20) exten => 345,10,Playback(weasels-eaten-phonesys) exten
=> 345,20,Playback(office-iguanas)