Asterisk es una PBX gratuita por SW. El sistema operativo elegido para la instalación no podría ser otro que Ubuntu Server, pero los pasos pueden ser extrapolados a cualquier otro Linux.

Prerequisitos
Antes de nada debemos asegurarnos de tener los paquetes necesarios para poder compilar Asterisk:
sudo apt-get install build-essential libxml2-dev ncurses-dev \ dahdi dahdi-source unixodbc unixodbc-dev
Instalar Asterisk
Ahora vamos a la web de descargas de Asterisk, seleccionaremos la última versión estable de los fuentes (la 1.8.7.0 cuándo escribí esta entrada), bajamos el paquete, lo descomprimimos y entramos en la carpeta:
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.7.0.tar.gz tar xzf asterisk-1.8.7.0.tar.gz cd asterisk-1.8.7.0
Es hora de configurar (ponemos el prefijo /usr para que todo se instale en /usr/bin y el PATH apunte a Asterisk bien):
./configure --prefix=/usr
Ahora si queremos (paso opcional) podemos ejecutar el menú de configuración (al estilo del kernel de Linux) para seleccionar los paquetes que queremos compilar para luego instalar:
make menuconfig
Ya sólo queda compilar e instalar (binarios y configuración):
sudo make install sudo make config sudo make samples
Instalar SoX
También instalaremos SoX lo usaremos más delante para mezclar ficheros de audio con las grabaciones de las llamadas. Instalaremos la última versión estable (la 14.3.2 cuando escribí esta entrada):
wget http://sourceforge.net/projects/sox/files/sox/14.3.2/sox-14.3.2.tar.gz/download \ -O sox-14.3.2.tar.gz tar xzf sox-14.3.2.tar.gz cd sox-14.3.2 ./configure --prefix=/usr make -s sudo make install
Configuración de ejemplo
Vamos a configurar la siguiente funcionalidad de prueba:
- Configura 4 extensiones para usuarios (de la 101 a la 104).
- Dichas extensiones tendrán buzón de voz (extensión 100).
- Crearemos 2 extensiones de contestación automática con mensajes pregrabados (201 y 202).
- Crearemos 2 salas de multiconferencia (la 301 y 302) dónde todos los que llamen se unirán a la conversación automáticamente.
- Todas las llamadas (a cualquiera de las extensiones nombradas) se grabarán en el servidor en formato
.wav
Los ficheros de configuración de Asterisk se alojan en la carpeta /etc/asterisk, es recomendable que guardemos una copia de seguridad de todos los ficheros que toquemos, dado que los ejemplos aquí expuestos son muy básicos y luego nos gustará poder recuperar los originales para ver todas las opciones de configuración disponibles en los originales.
sip.conf
Lo primero es el fichero básico sip.conf dónde ajustaremos los parámetros básicos de Asterisk y todas las extensiones que tengan que ser accedidas por usuarios (de la 101 a la 104):
[general] bindport = 5060 bindaddr = 0.0.0.0 context = others realm = 192.168.1.12 [101] type = friend context = phones secret = 101 host = dynamic [102] type = friend context = phones secret = 102 host = dynamic [103] type = friend context = phones secret = 103 host = dynamic [104] type = friend context = phones secret = 104 host = dynamic
Es importante cambiar el parámetro general realm por el nombre de la máquina (si tiene) o la dirección IP, algunos clientes pueden dar error sino se configura apropiadamente.
extensions.conf
Es el turno del más complicado (también el más versátil, claro) de los ficheros de configuración el que nos permite configurar el plan de marcado por extensiones, es decir extensions.conf:
[other]
[globals]
RINGTIME = 15
[phones]
exten => 100,1,VoiceMailMain(${CALLERID(num)},s)
exten => _10[1-4],1,Set(CALLFILENAME="Extension ${EXTEN} at ${STRFTIME(,,%Y-%m-%d %H:%M:%S:%3q)}")
exten => _10[1-4],n,Monitor(wav,${CALLFILENAME},m)
exten => _10[1-4],n,Dial(SIP/${EXTEN},${RINGTIME})
exten => _10[1-4],n,VoiceMail(${EXTEN},u)
exten => 201,1,Answer()
exten => 201,n,Set(CALLFILENAME="Extension ${EXTEN} at ${STRFTIME(,,%Y-%m-%d %H:%M:%S:%3q)}")
exten => 201,n,Monitor(wav,${CALLFILENAME},m)
exten => 201,n,SayDigits(123456789)
exten => 201,n,Hangup()
exten => 202,1,Answer()
exten => 202,n,Set(CALLFILENAME="Extension ${EXTEN} at ${STRFTIME(,,%Y-%m-%d %H:%M:%S:%3q)}")
exten => 202,n,Monitor(wav,${CALLFILENAME},m)
exten => 202,n,Wait(2)
exten => 202,n,Playback(hello-world)
exten => 202,n,Wait(2)
exten => 202,n,Hangup()
exten => _30[12],1,Set(CALLFILENAME="Extension ${EXTEN} at ${STRFTIME(,,%Y-%m-%d %H:%M:%S:%3q)}")
exten => _30[12],n,Monitor(wav,${CALLFILENAME},m)
exten => _30[12],n,MeetMe(${EXTEN},q)
En los parámetros generales hemos configurado los segundos de espera de las extensiones antes de saltar el buzón de voz, en el ejemplo a 15 segundos.
Se configura la extensión 100 como buzón de voz.
Luego se configura, mediante una plantilla (_10[1-4], es decir de la extensión 101 a la 104) las extensiones de usuarios, lo primero es crear una variable CALLFILENAME para crear un nombre de fichero para grabar la conversación, esto creará por ejemplo el fichero Extension 102 at 2011-09-25 18:44:06:537.wav. Luego se monitoriza (Monitor) la llamada con el nombre de fichero calculado, y se hace la llamada (Dial) a la extensión (con la variable ${EXTEN}) y un timeout (configurado en la sección general); finalmente si la llamada no se atiende por el usuario, esta se redirige al buzón de voz (VoiceMail) del usuario).
Para las extensiones 201 y 202 se contesta la llamada inmediatamente (Answer), se graban y se invocan varios métodos para que suene algo (como SayDigits o Playback), luego se cuelga la llamada (Hangup).
Por último se configuran las extensiones de multiconferencia (la 301 y la 302) con grabación y añadiendo al usuario que llama la la sala de multiconferencia (MeetMe).
voicemail.conf
Ahora le toca el turno al fichero de configuración voicemail.conf para el buzón de voz de las 4 extensiones de usuario (101 a 104):
[general] format = wav [default] 101 => 101,User 101,user101@email.com 102 => 102,User 102,user102@email.com 103 => 103,User 103,user103@email.com 104 => 104,User 104,user104@email.com
Evidentemente tendrás que cambiar los correos electrónicos para que dichos usuarios sean notificados cuándo les llegue un mensaje de voz que no hayan podido/querido atender; para que esto funcione es necesario que el servidor dónde corra Asterisk pueda enviar correos electrónicos. Si el correo electrónico se omite (quitando la coma que lo precede también) no se enviarán dichos correos. Es interesante el hecho de que Asterisk adjuntará un fichero de sonido en el email para que podamos escuchar directamente desde el correo el mensaje de voz.
meetme.conf
Por último configuraremos las salas de conferencia en el fichero meetme.conf:
[general] [rooms] conf => 301 conf => 302
Pruebas
Para probar nuestro Asterisk podemos bajar un cliente VoIP para nuesto ordenador, como por ejemplo la versión gratuita X-Lite para Windows o Mac OS.
Los datos a configurar (para X-Lite) son los siguientes:
- Account name: 101
- En la solapa General:
- User ID: 101
- Domain: 192.168.1.12 (o lo que corresponda)
- Password: 101
- En la solapa Voicemail:
- Check for voicemail: habilitado
- Number to dial for checking voicemail: 100
También podéis usar vuestro iPhone, la aplicación se llama “3CXPhone – VoIP / SIP Softphone”, pero tenéis muchas otras gratuitas y de pago. Los datos de configuración son similares a los descritos arriba.
Un comentario
Juan
2011/10/23, a las 23:05 (UTC 2)
hola amigo he encontrado información muy buena en tu web!
segui todos los pasos que pones…
bueno en el sip.conf le tuve que agregar esta linea
allow = all ;antes de poner esta linea no me dejaba llamar
también agregué esta linea
videosupport = yes ; para videoconferencia
todo esta funcionando muy bien
pero quisiera preguntarte como hago para que funcione la configuración del buzón de correo. Buscando encontré esta linea, espero puedas ayudarme
mailbox=100@phones