Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Asterisk es una aplicacin en la cual tu computadora se convierte en un PBX, asterisk tiene 176
aplicaciones con las cuales puedes montar una plataforma muy confiable, estable y econmica,
la cual ayude a distribuir su sistema de telefona empresarial.
Sistema Operativo: CentOS 6.4
Algunos expertos, incluso el libro de Asterisk insisten en la necesidad de actualizar todo el
sistema operativo para realizar la instalacin de Asterisk, sin embargo eso no es necesario;
simplemente basta con tener los paquetes y las dependencias necesarias.
1. Actualizar los paquetes (Aunque realmente necesitamos son unos cuantos, en el futuro puede
ser de mucha ayuda)
#yum upgrade
2. Descargue e instale los siguientes paquetes en su servidor:
#yum install gcc gcc-c++ make wget kernel-devel libxml2-devel
ncurses-devel openssl-devel subversion sqlite-devel libuuiddevel
3. Una vez instaladas las dependencias verifique que el kernel de su mquina coincida con la
versin del kernel-devel instalada. Si no es igual, entonces descargue el paquete de nuevo
(#yum install kernel-devel)
#Uname -an
>>Para ver kernel de la maquina
#rpm -q kernel-devel >>Para ver el kernel instalado
#wget http://downloads.asterisk.org/pub/telephony/libpri/libpri1.4-current.tar.gz
Con los paquetes descargados procedemos a la instalacin de los mismos; la instalacin se
realiza en el siguiente orden:
A. DAHDI
B. Libpri
C. Asterisk
6. La instalacin se realiza de la siguiente manera
DAHDI
#tar -zxvf dahdi-linux.complete-current.tar.gz
#cd dahdi-linux-complete-2.7.0.1+2.7.0.1
#make clean && make all && make install && make config
&& service dahdi start
start
LibPri
#tar -zxvf libpri-1.4-current.tar.gz
#cd libpri-1.4.14
#make clean && make && make install
#cd ..
Asterisk
#tar -zxvf asterisk-1.8-current.tar.gz
#cd asterisk-1.8.23.0
#./configure
#make menuselect (si le presenta el error Terminal mus be at least 80*27, acceda viat
SSH al servidor y repita este punto). A continuacin seleccione las opciones CORE-SOUNDSES-GSM y EXTRA-SOUNDS-EN-GSM
#make && make install && make samples && make config
#cd ..
Configuracin SIP
1. Compruebe que Selinux est en modo permisivo o solo si es necesario coloquelo en
DISABLE
#nano /etc/selinux/config (Primera linea de configuracin)
3. Vaya a la ruta /etc/asterisk ; una vez dentro de este directorio usted podr observar
que existen una cantidad importante de ficheros, tenga en cuenta que muchos de estos ficheros
son ejemplos de configuracin que usted puede observar para hacerse a una idea sobre la
multitud de opciones que ofrece Asterisk.
#mv sip.conf sip.conf.ejemplo
4.Cree su propio fichero SIP
#nano sip.conf
[general]
context=default >>contexto por defecto para las llamadas entrantes
realm=class.digium.com >> mbito para la autenticidad de texto y crear las
contraseas cifradas con el protocolo MD5
bindport=5060 >>Puerto UDP que ser aceptado
bindaddr=0.0.0.0 >> Direccin IP en la cual se escucharn las solicitudes
srvlookup=yes >>Llamadas de registro DNS-SRV para llamadas salientes SIP en dominio
disallow=all >>Dashabilitar todos los CODECs
allow=ulaw >>Habilitar CODEC audio
allow=gsm >>Habilitar CODEC audio (el primero que se intentar utilizar a lo largo de
una llamada)
language=es >>Habilitar lenguaje espaol
Otros parmetros:
allowguest=no >>No permitir llamadas de extensiones SIP remotas sin contrasea
tcpenable=yes >>Desde la versin 1.6 es posible configurar el servidor para que permita
tambin conexiones TCP
tcpbindaddr=0.0.0.0:5059 >>Direccin y puerto para las conexiones SIP con
protocolo TCP
callevents=yes >>Cuando hay eventos (llamadas, etc.) estos vienen notificados al
Asterisk Manager (til para programas externos tipo FOP)
domain=class.digium.com >>El dominio local para el servidor asterisk. En mi caso
son dos.
domain=192.168.10.1 >>Conectarnos a asterisk usando un segundo dominio (ejemplo
una red VPN)
subscribecontext=subscribe >>Contexto donde configurar las extensiones para
activar la funcin subscribe del protocolo SIP
allowsubscribe=yes >>Esto permite a las extensiones controlar el estado de las dems
notifyringing=yes >>Notifica si la extensin est timbrando a las dems extensiones
(ya veremos como funciona)
notifyhold=yes >>Notifica si la extensin est en espera
useragent=3CX >>La central se presentar con este nombre. A veces algunos
proveedores no permiten conectarse a ellos si reconoces que detrs de la conexin est un
servidor Asterisk. En este modo nos presentamos como si furamos el softphone 3CX
t38pt_udptl=yes >>Permite el uso del protocolo T38 (fax sobre IP) pero solo para
conexiones directas
videosupport=yes >>Para permitir videollamadas
type=friend >>Tipo de extensin. Puede ser friend, user o peer. Friend puede hacer
y recibir llamadas, User solo recibir y Peer solo puede hacer (como en el caso de proveedores
VoIP que usamos solo para hacer llamadas)
secret=contrasea >>La clave de la extensin
qualify=yes >>Para saber el tiempo de respuesta de una extensin y si est alcanzable o
no
mailbox=2000@default >>La casilla de voz de la extensin (segn la configuracin del
archivo voicemail.conf)
host=dynamic >>Si la extensin se conecta remotamente cambiando continuamente su
direccion IP se pone este parametro
dtmfmode=rfc2833 >>El protocolo para enviar los tonos DTMF
canreinvite=no >>yes; Si queremos que la extensin intente conectarse directamente
con la extensin llamada. No si queremos que Asterisk haga de puente entre las dos
extensiones.
nat=yes >>Si la extensin se conecta al servidor asterisk detrs de un cortafuego hay que
poner yes
callerid=Fulano <2000> >>El nombre y el numero de identificacin de la extensin
allow=alaw >>Habilita el codec audio alaw
allow=g729 >>Habilita el codec audio
allow=h263 >>Habilita el codec vdeo
allow=h263p >>Habilita el codec vdeo ( Mejora del H.263 )
allow=h264 >>Habilita el codec vdeo ( MPEG-4 "HD" )
Ahora un ejemplo para un proveedor de llamadas VoIP
[sip.voip.com] >>Nombre que le asignamos al proveedor
6. Ingrese a la consola de asterisk mediante el comando: Entre mas (v) mas Verbosidad en al
informacin
#asterisk rvvvvv
VideoLlamada
Para la configuracin es muy simple, ser agregar al fichero sip.conf unas lineas:
[general]
videosupport=yes
allow=g729
allow=h264
allow=h263
allow=h263p
Luego de aadir esto vamos a ingresar al asterisk ( #asterisk -rvvvvv ) y reiniciar los
servicios SIP ( sip reload ) y Dialplan ( dialpaln reload ).
Ahora solo ser abrir la parte de videollamada, realizar la llamada. ( El softphone derecho hace
parte de la maquina real y el de la izquierda hace parte de una maquina virtual ).
# wget -c http://www.voipnovatos.es/voces/voipnovatos-extrasounds-es-g729-1.4.tar.gz
# wget -c http://www.voipnovatos.es/voces/voipnovatos-extrasounds-es-gsm-1.4.tar.gz
3. Creamos un directorio llamado "es/"
#mkdir es
4. Descomprimimos todos los paquetes en este directorio
#tar -zxvf
Nombre_del_Paquete es/
5. As quedar despus de haber descomprimido todo. (En mi caso solo descargue los bsicos)
6. En los archivos de configuracin como los son SIP.CONF y IAX.CONF, sea el caso,
aadimos esta linea
language=es
3. En extensions.conf vamos a crear las extensiones de los usuarios y la extensin del men
principal del buzn.
Se aadir la aplicacin del buzn para las extensiones
disallow=all
allow=ulaw
allow=gsm
allow=g729
language=es
[2001]
context=tele
type=friend
host=dynamic
secret=1000
2. Configuracin de registro
///iax.conf///
La imagen de la derecha es sedeA y la izquierda sedeB
Direcciones correspondientes:
sedeA = 192.168.1.14
sedeB = 192.168.1.12
Los contextos ( [sedeB] y [sedeA] ) son creados con el objetivo de que se identifiquen unos a
otros
3. Configuracin de marcado
///extensions.conf///sedeA///
[general]
static=yes
autofallthroigh=yes
[usuarios]
exten => 1001,1,Dial(SIP/1001,5) ///Si hay mas usuarios en el
sip.conf debern ser aadidos
[telefonos]
include => tel-locales
///extensions.conf///sedeB///
[general]
static=yes
autofallthroigh=yes
[usuarios]
exten => 2001,1,Dial(SIP/1001,5) ///Si hay mas usuarios en
el sip.conf debern ser aadidos
[telefonos]
include => tel-locales
include => tel-remotos
[tel-locales]
exten => _20XX,1,Dial(SIP/${EXTEN},15)
include => usuarios
[tel-remotos]
exten => _10XX,1,Dial(IAX2/sedeA/${EXTEN},15) ///Por medio de este canal
sern ubicadas las extensiones
[troncalB]
include => tel-locales
4.Reiniciamos las aplicaciones
sip reload
iax2 reload
dialplan reload
CONCEPTOS BSICOS
Extensiones
Definicin: Una extensin es una marcacin en el teclado de un telfono.
Por ejemplo, un usuario podra marcar 3001 en su telfono, y eso sera una
extensin. Tambin podra marcar un nmero de telfono nacional, como por ejemplo
915881000, y tambin sera una extensin.
Aunque lo normal es que las extensiones sean numricas, no debemos pensar slo
en nmeros, ya que en Asterisk tambin se pueden definir extensiones como texto.
Por ejemplo, pizza sera una extensin vlida.
Un plan de marcado empieza con una coleccin de extensiones a las que se puede
llamar. Esta definicin de extensiones puede ser literal, o puede ser una expresin.
Por ejemplo, si hemos definido las extensiones desde la 3001 hasta la 3009, podemos
definirlas en nuestro dialplan enumerndolas una detrs de otra, de forma literal:
3001
3002
3003
3004
3005
3006
3007
3008
3009
Sin embargo, si todas ellas van a tener la misma coleccin de acciones (en general,
pasar la llamada a la extensin marcada), sera mucho ms cmodo definirlas todas a
la vez con una expresin:
_300X
Las expresiones van precedidas de guin bajo _, que indica que lo que viene a
continuacin es una expresin que puede cuadrar con ms de una extensin. Para
definir expresiones en Asterisk disponemos del siguiente lenguaje:
SMBOLO
SIGNIFICADO
Cualquier cifra de 0 a 9
Cualquier cifra de 1 a 9
SMBOLO
SIGNIFICADO
Cualquier cifra de 2 a 9
[x-y]
[xyz]
SIGNIFICADO
EXPRESIN
_XXXX
_3XXX
_6XXXXXXXX
_7[1-4]XXXXXXX
SIGNIFICADO
EXPRESIN
_9[1-8]XXXXXXX
_[8-9][1-8]XXXXXXX
Aplicaciones (acciones)
Definicin: Las aplicaciones son el conjunto de acciones a ejecutar cuando un usuario
inicia una llamada.
Por ejemplo, supongamos que cuando alguien marque 3001, queremos que suene
el telfono de esa persona. Sera algo as:
Dial(SIP/3001)
Hangup
Dial(SIP/3001)
Hangup
Tambin podramos querer darle un mensaje a la persona que llama antes de pasar la
llamada a destino. Por ejemplo:
Answ er
Wait(1)
Festival('Has marcado la extens
Dial(SIP/3001)
Hangup
Answer
Wait(1)
Dial(SIP/3001)
Hangup
O pasar la llamada slo entre las 10h de la maana y las 20h de la tarde:
ExecIfTime(10:00-20:00,*,*,*?Dia
Hangup
ExecIfTime(10:00-20:00,*,*,*?Dial(SIP/3001))
Hangup
APLICACIN
FICHA DESCRIPCIN
Answer
Dial
Hangup
Wait
Festival
Playback
APLICACIN
FICHA DESCRIPCIN
Background
NoOp
URL
ExecIf
ExecIfTime
URL
Prioridades
En un lenguaje de scripting, las acciones se van ejecutando de arriba a abajo, en
orden. En cambio, en Asterisk, el orden en el que se ejecutan las acciones debe ser
explcitamente indicado mediante nmeros. As, primero se ejecutar la accin 1,
despus la accin 2, y as sucesivamente.
Es decir, en los ejemplos anteriores no basta con poner las aplicaciones (acciones)
una debajo de la otra. Hay que indicar numricamente el orden, de forma explcita.
Definicin: La prioridad representa el orden en el que se ejecutarn las acciones del
dialplan.
La sintaxis para indicar el orden la veremos a continuacin.
Por ejemplo, supongamos que cuando alguien marque la extensin 3001, se pase la
llamada slo entre las 10h de la maana y las 20h de la tarde:
exten => 3001,1,ExecIfTime(10:
exten => 3001,2,Hangup
Fijaos que en este caso hemos utilizado la variable ${EXTEN} dentro de la llamada a
Dial() para que se lance la llamada a quien corresponda. La variable ${EXTEN} es una
de las variables bsicas que utilizaremos, y que contiene la extensin marcada por la
persona llamante.
Si quisiramos introducir una nueva aplicacin entre Wait() y Dial(), nos obligara a
actualizar los nmeros de prioridad de todas las aplicaciones que vienen debajo. Si el
dialplan fuese mucho ms largo, digamos 50 acciones en lugar de 5, imaginaos el
engorro que puede suponer esto.
Una solucin mejor es indicar que las aplicaciones se ejecuten de forma consecutiva,
de arriba a abajo. Para esto, podemos utilizar la prioridad n, que indica next. De
esta forma, podemos introducir nuevas aplicaciones en mitad de un dialplan sin tener
que actualizar los nmeros de prioridad. Slo tenemos que indicar cul es la prioridad
1, y utilizar prioridad n para el resto:
Por otro lado, cambiar la expresin de las extensiones a las que se hacen referencia
tambin resulta un engorro, ya que la expresin aparece en cada una de las lneas del
dialplan. Si quisieramos que el segundo dgito admitiera cero para poder llamar a
nmeros 902 XXX XXX, tendramos que modificar cada una de las lneas de este
dialplan. Sin embargo, hay otra sintaxis que permite definir la expresin slo una vez,
e indicar en las siguientes lneas que se trata de la misma extensin:
exten => _0034[8-9][0-8]XXXXX
same => n,Answ er
same => n,Wait(2)
same => n,Dial(SIP/3001)
same => n,Hangup
CONTEXTOS
Ya hemos visto cmo se definen las extensiones de marcacin y las acciones
asociadas a ellas. Segn lo estudiado hasta ahora, todos los usuarios tienen las
mismas libertades. Ya que no todos los usuarios son iguales, necesitamos algn
mecanismo que nos permita variar el comportamiento del sistema en funcin del
mismo. Eso son los contextos.
Cuando definimos un usuario en sip.conf le asignamos un contexto. Cuando ese
usuario inicia una llamada, se utiliza ese contexto del dialplan para ver qu
extensiones tiene accesibles y qu acciones debe realizar el sistema.
Definicin: Los contextos representan la unidad de organizacin ms bsica del
dialplan de Asterisk. Un contexto engloba extensiones y acciones. Se utiliza para
aumentar la seguridad del sistema, y para ofrecer servicios diferenciados en funcin
del usuario.
Un contexto se define de la siguiente manera:
[contexto1]
exten => <extensin>,<prioridad
[contexto2]
exten => <extensin>,<prioridad
[contexto1]
3
4
[contexto2]
EJEMPLO COMPLETO
Supongamos un hotel con una recepcin y tres habitaciones que cumple lo siguiente:
/etc/asterisk/sip.conf
[general]
udpbindaddr=0.0.0.0:5060
context=default
srvlookup=yes
allow guest=no
[general]
udpbindaddr=0.0.0.0:5060
context=default
srvlookup=yes
allowguest=no
alwaysauthreject=yes
7
8
; Recepcin
[0]
10
type=peer
11
host=dynamic
12
username=recepcion
13
secret=passwordrecepcion
14
context=contexto-recepcion
15
16
; Habitacin 101
17
[101]
18
type=peer
19
host=dynamic
20
username=room101
21
secret=password101
22
context=contexto-habitaciones
23
24
; Habitacin 102
25
[102]
26
type=peer
27
host=dynamic
28
username=room102
29
secret=password102
30
context=contexto-habitaciones
31
32
; Habitacin 103
33
[103]
34
type=peer
35
host=dynamic
36
username=room103
37
secret=password103
38
context=contexto-habitaciones
/etc/asterisk/extensions.conf
[general]
; Recibe lo que no tiene un cont
; Rechaza todo por seguridad.
exten => _X.,1,Hangup(21)
exten => s,1,Hangup(21)
[general]
6
7
[contexto-recepcion]
10
11
12
[contexto-habitaciones]
13
14
15