Cómo instalar Asterisk en Ubuntu Server

asterisk

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.

5 comentarios

  1. Jorge Aurelio dice: Responder

    Hola, amigo, segui todos los pasos al pie de la letra (Según yo, claro) y no me marca ningun error ni nada, pero al momento de utilizar el X-Lite no me deja conectarme, me sale el siguiente error: Account Failet to Enable. Account: 101 could not be enabled.

  2. Gustavo dice: Responder

    Hice todos los pasos que indicas… pero cuando llamo a un anexo registrado no timbra y sale como si hubiera contestado…. mas en el receptor no sale ni el timbrado…

  3. abril 2nd dice: Responder

    abril 2nd…

    Cómo instalar Asterisk en Ubuntu Server « OCIO y TECnología…

  4. Helver Velasquez dice: Responder

    Gracias Emilio Gonzales….esto me ha servido de mucho……………todo me funciono bien………..

  5. Juan dice: Responder

    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

Deja un comentario