miércoles, 11 de septiembre de 2013

Instalando y configurando Asterisk PBX en CentOS

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.




Finalmente si abrimos los puertos de nuestro modem DSL que Asterisk utiliza, podremos accesar fuera de nuestra red local y configurar clientes amigos desde Internet. En este enlace pueden ver una lista de comandos del CLI de Asterisk.

Espero les sea de gran utilidad y aprendizaje. Cualquier sugerencia o corrección se las agradeceré en los comentarios!

No hay comentarios:

Publicar un comentario