viernes, 4 de octubre de 2013

Asterisk - Centos

Asterisk es una aplicación 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 económica, la cual ayude a distribuir su sistema de telefonía 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 instalación 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 libuuid-devel 

3. Una vez instaladas las dependencias  verifique que el kernel de su máquina coincida con la versión 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 


4. Pocisionese en el directorio /usr/src:
#cd /usr/src 

5. Proceda a descargar los paquetes necesarios para la instalación de Asterisk:
La url es http://downloads.asterisk.org 

Descarga de Asterisk: 

Descarga de LibPRI
#wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz 

Con los paquetes descargados procedemos a la instalación de los mismos; la instalación se realiza en el siguiente orden:
A.  DAHDI
B.  Libpri
C.  Asterisk

6. La instalación 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



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 continuación seleccione las opciones CORE-SOUNDS-ES-GSM y EXTRA-SOUNDS-EN-GSM
#make  && make install && make samples && make config
#cd .. 


Reinicie el sistema con el comando:
#reboot 

7.Compruebe que DAHDI está cargado
#lsmod | grep dahdi 



Configuración SIP

1. Compruebe que Selinux está en modo permisivo o solo si es necesario coloquelo en DISABLE
#nano /etc/selinux/config     (Primera linea de configuración)


2. Desactive la protección de IPTables en su computador (Recuerde que en un entorno de producción el firewall no debe ser desactivado).
#service iptables stop


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 configuración 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 contraseñas cifradas con el protocolo MD5
bindport=5060 >>Puerto UDP que será aceptado
bindaddr=0.0.0.0 >> Dirección IP en la cual se escucharán 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 español


Otros parámetros:
allowguest=no  >>No permitir llamadas de extensiones SIP remotas sin contraseña
tcpenable=yes  >>Desde la versión 1.6 es posible configurar el servidor para que permita también conexiones TCP
tcpbindaddr=0.0.0.0:5059  >>Dirección 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 función subscribe del protocolo SIP
allowsubscribe=yes  >>Esto permite a las extensiones controlar el estado de las demás
notifyringing=yes  >>Notifica si la extensión está timbrando a las demás extensiones (ya veremos como funciona)
notifyhold=yes  >>Notifica si la extensión está en espera
useragent=3CX  >>La central se presentará con este nombre. A veces algunos proveedores no permiten conectarse a ellos si reconoces que detrás de la conexión está un servidor Asterisk. En este modo nos presentamos como si fuéramos 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 extensión. 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=contraseña  >>La clave de la extensión
qualify=yes  >>Para saber el tiempo de respuesta de una extensión y si está alcanzable o no
mailbox=2000@default   >>La casilla de voz de la extensión (según la configuración del archivo voicemail.conf)
host=dynamic  >>Si la extensión 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 extensión intente conectarse directamente con la extensión llamada. No si queremos que Asterisk haga de puente entre las dos extensiones.
nat=yes  >>Si la extensión se conecta al servidor asterisk detrás de un cortafuego hay que poner yes
callerid=Fulano <2000>  >>El nombre y el numero de identificación de la extensión
allow=alaw   >>Habilita el codec audio alaw
allow=g729   >>Habilita el codec audio
allow=h263   >>Habilita el codec vídeo
allow=h263p   >>Habilita el codec vídeo ( Mejora del H.263 )
allow=h264   >>Habilita el codec vídeo ( MPEG-4 "HD" )

Ahora un ejemplo para un proveedor de llamadas VoIP
[sip.voip.com]  >>Nombre que le asignamos al proveedor
type=peer   >>Lo vamos a utilizar solo para llamadas salientes (peer)
host=sip.voip.com   >>El nombre del host del proveedor
fromdomain=sip.voip.com   >>Dominio del proveedor
fromuser=fulano   >>Los dato que nos pide el proveedor para conectarnos (usuario y contraseña)
context=from-voip   >>El contexto de utilizar en extensions.conf para las llamadas entrantes
call-limit=2   >>Número de canales que brinda el proveedor.

5. Crear las extensiones de los usuarios.
Usted acaba de crear sus primeras cuentas SIP, para que una comunicación sea viable entre dichas cuentas usted debe crear las extensiones en el plan de marcado, para ello debe editar el archivo extensions.conf de la carpeta /etc/asterisk:

#mv extensions.conf extensions.conf.ejemplo
#nano extensions.conf 

Answer(): contesta una llamada
Hangup(): cuelga una llamada
Dial(): realiza una llamada saliente
Playback(): reproduce un archivo de sonido
Voicemail(): permite administrar la mensajería de voz y las contestadoras


6. Ingrese a la consola de asterisk mediante el comando: Entre mas (v) mas Verbosidad en al información
#asterisk –rvvvvv


Recargue SIP ( sip reload )
Recargue el diaplan ( dialplan reload )
Visualice las aplicaciones ( core show applications)
Visualice detalles de las aplicaciones ( core show application Nombre_Aplicación )

Clientes SIP

1. Descargamos e instalamos el softphone  que más nos guste: Yo utilice el 3CX (en clientes maquinas de windows 7)
a.  3CX
b.  X-Lite

Desde esta parte podemos descargar el softphone del cliente


Una vez este descargada la aplicación, procedemos a ejecutarla y si saben ingles pueden leer los pasos, sino solo dan click en Next y aceptan los terminos.


Luego de dar click en Finish la aplicación se ejecuta automáticamente. Cuando este inicie pedirá que creemos una cuenta para iniciar sesión, la cual la configuraremos con los parámetros que creamos en el asterisk así:

            
.
Cuando la cuentas se creen aparecerá en la pantalla del softphone On Hook (Enganchado), ahora solo será marcar las extensiones, como aparece en las imagenes.



Si entramos a la terminal del asterisk con el comando #asterisk -rvvvvv , he iniciamos sesión en los clientes podremos ver como se registran en el asterisk. 



VideoLlamada

Para la configuración es muy simple, será agregar al fichero sip.conf unas lineas:


[general]
videosupport=yes
allow=g729
allow=h264
allow=h263
allow=h263p



Luego de añadir 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 ). 


Colocar Asterisk en español

Gracias a voipnovatos, tenemos unos paquetes en español.

1. Desde la consola ingresamos al directorio de asterisk/sounds


2. Descargamos los paquetes

# wget -c http://www.voipnovatos.es/voces/voipnovatos-core-sounds-es-alaw-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-core-sounds-es-g729-1.4.tar.gz

# wget -c http://www.voipn
ovatos.es/voces/voipnovatos-core-sounds-es-gsm-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-core-sounds-es-ulaw-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-extra-sounds-es-alaw-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-extra-sounds-es-ulaw-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-extra-sounds-es-g729-1.4.tar.gz

# wget -c http://www.voipnovatos.es/voces/voipnovatos-extra-sounds-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á después de haber descomprimido todo. (En mi caso solo descargue los básicos)


6. En los archivos de configuración como los son SIP.CONF y IAX.CONF, sea el caso, añadimos esta linea

language=es


7. Por ultimo recargamos el servicio de asterisk

#service asterisk reload

Servicio de Buzón de Voz

Para crear la opción de buzón de voz, vamos a editar 3 ficheros: voicemail.conf, sip.conf y extensions.conf

1.Como voicemail.conf nos mostrará una serie de parámetros  lo que vamos hacer es cambiar su nombre por voicemail.conf.original y creamos otro desde el principio.

#mv voicemail.conf voicemail.conf.original
#nano voicemail.conf

Este fichero quedará así:


format >> Es el tipo de formato en que se guardarán y enviarán los mensajes
maxmsg >> Es la cantidad de mensajes que se podrán guardar
maxsec >> Es la cantidad de tiempo (segundos) que dura la grabación del mensaje
skipms >> Es la cantidad de milisegundos que pasa entre mensajes de opciones
maxsilence >> Es la cantidad de tiempo (segundos) que pasa en silencio luego de decir el menú del buzón de voz.

[contexto]
Número de exten => ClaveUsuario, Usuario, EmailUsuario

2. Vamos a editar SIP.CONF, añadimos a los canales la linea mailbox
mailbox=exten_usuario@contexto_del_voicemail.conf


3. En extensions.conf vamos a crear las extensiones de los usuarios y la extensión del menú principal del buzón.
Se añadirá la aplicación del buzón para las extensiones
exten=> extensión,prioridad (n), VoiceMail(extensión@contexto_del_voicemail.conf)


Incluiremos un contexto llamado aplicaciones

include => aplicaciones
[aplicaciones]

exten => #exten , 1 , aplicación()
same => n , VoiceMailMain(@default)



4. En el fichero SIP.CONF, vamos a añadir en los canales la linea:

mailbox=#exten@default



5. Ingresamos a la consola de asterisk y reiniciamos los servicios:

sip reload
voicemail reload
dialplan reload

6. Cuando hacemos la llamada y se nos transfiere al buzón; En la consola Asterisk, podemos ver los mensajes que salen en el audio, ya sea en ingles o español, estos se mostraran en la consola.


Troncales IAX2 con cuentas SIP

Como este tema es un poco complicado, voy a configurar todos los ficheros (SIP.CONF , IAX.CONF , EXTENSIONS.CONF)

1. Configuración de usuarios
///sip.conf///sedeA///
[general]
context=default
disallow=all
allow=ulaw
allow=gsm
allow=g729
language=es         ///Si ya hemos instalado los paquetes 

[1001]
context=tele
type=friend
host=dynamic
secret=1000

///sip.conf///sedeB///

[general]
context=default
disallow=all
allow=ulaw
allow=gsm
allow=g729
language=es         ///Si ya hemos instalado los paquetes


[2001]
context=tele
type=friend
host=dynamic
secret=1000



2. Configuración 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. Configuración 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 deberán ser añadidos

[telefonos]
include => tel-locales
include => tel-remotos

[tel-locales]
exten => _10XX,1,Dial(SIP/${EXTEN},15)
include => usuarios


[tel-remotos]
exten => _20XX,1,Dial(IAX2/sedeB/${EXTEN},15) ///Por medio de este canal serán ubicadas las extensiones

[troncalA]
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 deberán ser añadidos

[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 serán ubicadas las extensiones

[troncalB]
include => tel-locales

4.Reiniciamos las aplicaciones 
sip reload
iax2 reload
dialplan reload

Grabar audio para IVRs

Utilizando el mismo fichero del ejemplo anterior, vamos a añadir un contexto llamado aplicaciones , de la siguiente manera:

.... texto anterior ....

[troncalA]
include => tel-locales

[aplicaciones]
;grabadora
exten => 99,1,Answer()
exten => 99,n,Wait(1)
exten => 99,n,Record(Nombre_audio.Extensión)
exten => 99,n,Wait(2)
exten => 99,n,Playback(Nombre_audio)  ///Sin extensión
exten => 99,n,Hangup()

El audio será guardado en /var/lib/asterisk/sounds/ ,con esta aplicación podemos re-grabar utilizando el mismo nombre de audio, o si cambiamos el nombre nos creara otro archivo de audio