Vamos a tener un pequeño instructivo de cómo instalar
Asterisk en CentOS pero con la salvedad de que no utilizaremos tarjeta
FXO (Foreign Exchange Office), la cual se utiliza regularmente para
conectar nuestra PBX a una PSTN mediante una línea análoga. En
consecuencia, la PBX que configuraremos, nos servirá únicamente para una
red local y, si abrimos los puertos correspondientes en nuestro modem
DSL, podremos accesarla desde Internet.
Instalando Asterisk PBX
Desde la
página oficial de Asterisk podemos descargar el fuente necesario para su
compilación e instalación, pero no sin antes instalar los paquetes
necesarios para su compilación y la de otros componentes, que para este
tutorial no son necesarios, como dadhi-linux y dadhi-tools en CentOS.
# yum install -y gcc ncurses-devel libtermcap-devel kernel-devel gcc-c++ openssl-devel newt-devel zlib-devel unixODBC-devel libtool make
Ahora nos dirigimos a /usr/src para descargar el fuente de Asterisk 1.6.2.19:
# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.19.tar.gz
# tar xzvf asterisk-1.6.2.19.tar.gz
# cd asterisk-1.6.2.19
# ./configure
# make
# make install
# make config
# make samples
Configurando Asterisk PBX
El archivo
extensions.conf es la parte central de toda la configuración, dado que
es donde se define el dialplan de Asterisk. Se compone de 4 partes
principales: contextos, extensiones, prioridades y aplicaciones. El
dialplan se divide en secciones denominadas contextos, que están
rotuladas y contienen un grupo de extensiones. Los contextos se definen
colocando su nombre entre corchetes ([]). Este nombre puede contener
caracteres alfanuméricos además del guión y el guión bajo. Por ejemplo:
[interno]
Todas las instrucciones son parte del contexto hasta que el próximo contexto es definido. Existen dos contextos especiales:
[general] (variables predefinidas)
[globals] (variables no predefinidas)
Una
extensión es una instrucción que será seguida por Asterisk, luego de
ser disparada por una llamada entrante o bien por dígitos discados en un
canal, definida en el marco de un contexto. La sintaxis de una
extensión es la siguiente: exten => nombre,prioridad,aplicación()
exten => 101,1,answer()
Extensions
(start): Es una extensión especial que es utilizada si una llamada
entra a un contexto sin una extensión destino específica (por ejemplo
una llamada en un puerto FXO); la llamada trata de entrar
automáticamente a la extensiones.
[interno]
exten => s,1,answer()
Una
extensión puede tener varios pasos, denominados prioridades. Las
prioridades comienzan con 1 y se ejecutan en orden numérico. Si no
existe la prioridad N+1, Asterisk no salta a la siguiente prioridad
(N+2). Cada prioridad ejecuta una única aplicación. Por ejemplo:
exten => 101,1,Answer()
exten => 101,2,Hangup()
Prioridades sin numerar
Asterisk
introduce el uso de la prioridad n (next). Cada vez que Asterisk
encuentra una prioridad n, toma el número de la prioridad anterior y le
suma 1. Simplifica el proceso de escritura del dialplan, evitando tener
que volver a numerar las prioridades al insertar una prioridad para la
misma exten. Por ejemplo:
exten => 103,1,Answer()
exten => 103,n,hago algo
exten => 103,n,Hangup()
Nota como el orden numérico (1,2,3,etc) es reemplazado por la letra n.
Aplicaciones
Las
aplicaciones realizan una acción determinada en el canal actual,
controlando el comportamiento de la llamada y del sistema en sí. Algunos
ejemplos son:
answer(): contesta una llamada
hangup(): cuelga una llamada
dial(): realiza una llamada saliente
playback(): reproduce un archivo de sonido
Ciertas aplicaciones requieren del pasaje de parámetros, estos se incluyen dentro de los paréntesis, separados por coma “,”.
Un Dialplan simple
Basándome
en los conceptos anteriores y otros del libro de Asterisk, he creado
este Dialplan sencillo y fácil de entener su funcionamiento.
Configuración del fichero extensions.conf (Todo esto va al final del fichero):
[FRATERNEO]
;Las extensiones del usuario 500.
exten => 500,1,Answer( ) ;Costumbre de que asterisk conteste la llamada
exten => 500,n,Dial(Sip/500) ;llamando al usuario 500
exten => 500,n,Voicemail(500@default,u) ;usuario no disponible
exten => 500,n,Voicemail(500@default,b) ;usuario ocupada
exten => 500,n,Hangup() ;Otra buena costumbre que asterisk finalice proceso
;Las extensiones del usuario 510.
exten => 510,1,Answer( )
exten => 510,n,Dial(Sip/510)
exten => 510,n,Voicemail(510@default,u)
exten => 510,n,Voicemail(510@default,b)
exten => 510,n,Hangup()
;Las extensiones del usuario 520.
exten => 520,1,Answer( )
exten => 520,n,Dial(Sip/520)
exten => 520,n,Voicemail(520@default,u)
exten => 520,n,Voicemail(520@default,b)
exten => 520,n,Hangup()
;Las extensiones del usuario 530.
exten => 530,1,Answer( )
exten => 530,n,Dial(Sip/530)
exten => 530,n,Voicemail(530@default,u)
exten => 530,n,Voicemail(530@default,b)
exten => 530,n,Hangup()
Configuración del fichero sip.conf (Todo esto va al final del fichero):
[500]
context=FRATERNEO ;El contexto que hablamos en el Extensions.conf
callerid="Claudio" <500> ;Identificador de llamada
secret=500 ;Contraseña
mailbox=500@fraterneo ;Correo de Voz, y esta en el contexto por FRATERNEO
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw
[510]
context=FRATERNEO
callerid="Jose" <510>
secret=510
mailbox=510@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw
[520]
context=FRATERNEO
callerid="Ignacio" <520>
secret=520
mailbox=520@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw
[530]
context=FRATERNEO
callerid="Dario" <520>
secret=530
mailbox=530@fraterneo
type=friend
host=dynamic
canreinvite=no
call-limit=4
callgroup=1
pickupgroup=1
disallow=all
allow=gsm
allow=g729
allow=ulaw
allow=alaw
Es sumamente importante no tocar el resto del fichero ya que todo está
comentado y viene por defecto como ejemplo con sus comentarios y
explicaciones.
Ahora procedemos a iniciar el servicio asterisk, hacer que cargue
automáticamente al incicio y recargar el el Dialplan para que funcione
con la configuración que hemos agregado.
# service asterisk start
# chkconfig asterisk --level 345 on
Para entrar a la consola de Asterisk lo haremos con el comando asterisk -rv
(aunque podemos agregar muchas "v" para que sea más "verboso", es
decir, nos de más información de lo que está pasando en Asterisk).
# asterisk -rvvvvvvvvvvvvv
>localhost*CLI> dialplan reload
Configurar los clientes
Solo nos
queda esta parte de configurar los teléfonos. Estos pueden ser
SoftPhones (aplicación) o teléfonos físicos que soporten el protocolo
SIP. Un ejemplo de SoftPhone lo es Ekiga, en el cual podemos configurar
una cuenta SIP.
Espero les sea de gran utilidad y aprendizaje. Cualquier sugerencia o corrección se las agradeceré en los comentarios!