Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información. Aceptar

Tutorial Asterisk: Instalación y configuración de Asterisk

Diego Castillo Barnés
  • Escrito por Diego Castillo Barnés el 29 de Enero de 2015
  • 5 min de lectura | Sistemas
Tutorial Asterisk: Instalación y configuración de Asterisk

Ver Indice Tutorial

Instalación de Asterisk

Antes de instalar cualquier servicio, siempre se recomienda por motivos de seguridad actualizar la máquina en la que vayamos a realizar dicha instalación. En este caso, se ha decidido instalar Asterisk en un SO Debian 7 y para ello vamos a seguir los siguientes pasos:

  1. Actualizar la máquina y reiniciarla:

    sudo apt-get update
    sudo apt-get upgrade
    reboot

  2. Instalar las librerías que sean necesarias:

    sudo apt-get install build-essential
    sudo apt-get install libncurses5-dev libnewt-dev libmysqlclient-dev libmyodbc libssl-dev libxml2-dev unixodbc-dev libsqlite3-dev uuid-dev libbison-dev

NOTA - Para no tener que estar escribiendo continuamente ' sudo ', se puede cambiar el usuario a ' root ' y trabajar durante todo el proceso de instalación como ' root '.

  1. Se descargan y descomprimen los ficheros de Asterisk:

    wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/certified-asterisk-11.6-current.tar.gz
    tar zxvf certified-asterisk-11.6-current.tar.gz
    cd certified-asterisk-11.6-current

  2. Instalación del servicio de Asterisk:

    ./configure
    make menuselect
    make
    make install
    make samples
    make config

NOTA - Para cambiar algo en los ficheros de configuración tendremos que utilizar un editor como nano, vim o cualquier otro que se ajuste más a las preferencias del administrador del sistema.

  1. Para lanzar Asterisk, o si se realiza algún cambio en la configuración y es necesario reiniciar el servicio, existen varias alternativas desde la terminal. La más recomendada es parar y volver a arrancar el servicio:

    /etc/init.d/asterisk stop
    /etc/init.d/asterisk start

    O bien...

    service asterisk stop
    service asterisk start


Configurando Asterisk - sip.conf

Los dos ficheros de configuración más importantes de Asterisk posiblemente son el sip.conf que es el fichero que permite definir los canales SIP, tanto para llamadas entrantes como salientes, y el fichero extensions.conf que es el que define el comportamiento que va a tener una llamada en nuestra centralita (qué reglas rigen su enrutamiento o qué aplicaciones van a ejecutar). Si en vez de utilizar el protocolo SIP se prefiere trabajar con IAX2, será necesario configurar el fichero iax2.conf de forma muy parecida a como se hace con el sip.conf .

Lo primero es que, al igual que ocurre con otros ficheros de configuración de Asterisk, el fichero sip.conf se encuentra dividido en secciones cuyos nombres, a su vez, se encuentran definidos entre corchetes. La primera de ellas, [general] , permite definir las opciones generales de cada canal y, en consecuencia, los parámetros generales de cada cliente.

[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...

Ya que los clientes SIP deben ser declarados previamente para poder lanzar o recibir llamadas, lo siguiente que se puede hacer es definir uno o varios contextos para los posibles clientes del servicio que proporciona Asterisk. Algunos de los parámetros de configuración más importantes en este caso serán:

  • type - Tipo de cliente SIP. Existen 3 tipos: peer , user y friend en función de cómo se manejan las llamadas entrantes/salientes y cómo se identifica el usuario.
  • secret - Contraseña que utiliza el cliente para autenticarse en el sistema.
  • host - Dirección IP o nombre del host que utiliza el cliente. Si está asignada de manera dinámica por DHCP, ' dynamic '.
  • context - Contexto al que pertenece el cliente.
  • qualify - Si está puesto a ' yes ', se monitoriza el estado de la extensión.
  • mailbox - Indica el buzón de voz correspondiente a esa extensión.

Para definir dos extensiones, la 102 y la 103 utilizando estos y algunos parámetros más...

[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...

[102]
type=friend
secret=1ezkR
host=dynamic
context=ext_internas
callerid="Jose Luis" <102>
dtmfmode=rfc2833
qualify=yes
mailbox=1002@default
...

[103]
type=friend
secret=e7uKz
host=dynamic
context=ext_internas
callerid="Beatriz" <103>
dtmfmode=rfc2833
qualify=yes
mailbox=1003@default
...

Si fuera necesario configurar cientos de extensiones, quizás sea más cómodo de cara a la programación definir una máscara y aplicarla a cada una de las extensiones que se quiera crear. En este caso, a la máscara se le ha llamado extensiones-internas y se han definido las extensiones 102 y 103 cambiando únicamente los parámetros necesarios.

[general]
language=es
disallow=all
allow=alaw
allow=ulaw
videosupport=no
...

[extensiones-internas](!)
type=friend
host=dynamic
context=ext_internas
dtmfmode=rfc2833
qualify=yes
...

[102](extensiones-internas)
secret=1ezkR
callerid="Jose Luis" <102>
mailbox=1002@default

[103](extensiones-internas)
secret=e7uKz
callerid="Beatriz" <103>
mailbox=1003@default

Para profundizar en este tema lo mejor es coger el fichero de configuración por defecto, o de ejemplo, que trae Asterisk y leerse uno a uno cada uno de los parámetros que incluye. Con algo de experiencia, y muchas ganas de aprender, se depura cualquier fallo en las comunicaciones que se produzca por una mala configuración de los clientes SIP.

Configurando Asterisk - extensions.conf

El fichero de configuración extensions.conf es el que controla el plan de marcado ( dialplan ) de la centralita. Se puede decir que es el corazón de Asterisk ya que define cómo se comportarán las llamadas entrantes y salientes en el sistema.

Este fichero está compuesto por contextos, extensiones y prioridades. Se comenta brevemente en qué consiste cada una de ellas:

  • Contextos - Los contextos son cada una de las secciones en las que está dividido el dialplan y es lo que permite separar o incluir fragmentos de código en éste. Existen 3 contextos reservados: general , global y default . Si una extensión, de las que hay definidas en el fichero sip.conf , tiene como parámetro context un contexto de los que hay definidos en el dialplan, cuando dicha extensión efectúe una llamada, empezarán a ejecutarse las líneas de código asociadas a dicha extensión en ese contexto.

  • Extensiones - Una extensión es cada una de las llamadas que permiten ejecutar un fragmento de código de un contexto. Cuando una extensión llama a un número u otra extensión, lo normal es tener líneas de código dentro del dialplan que le indiquen al sistema cómo tiene que tratar esa llamada. Por ejemplo: Primero que se descuelgue la llamada, luego que salte una locución y que se llame a dos destinos de manera simultánea. Una extensión se define como un conjunto de valores: (número de extensión,prioridad,aplicación a ejecutar) . El primero de ellos, el " número de extensión ", es el patrón que hay que marcar dentro de dicho contexto para llamar al destino objetivo. La " prioridad " indica el orden en el que se van a ejecutar las sucesivas instrucciones asociadas a un mismo " número de extensión " y la " aplicación a ejecutar " es la orden que se va a ejecutar en la línea dada por el " número de extensión " y la prioridad " prioridad ".

Con una presentación de un caso práctico, todos estos conceptos quedarán más claros.

[llamadas-entrantes]
exten => 958993803,1,NoOp(Tenemos una llamada entrante...)
exten => 958993803,2,Answer()
exten => 958993803,3,Playback(bienvenida)
exten => 958993803,4,Dial(SIP/958)
exten => 958993803,5,Hangup()

[llamadas-salientes]
exten => 20001,1,Dial(SIP/102&SIP/103)
exten => 20001,2,Hangup()

exten => 20002,1,Dial(SIP/104&SIP/105)
exten => 20002,2,Dial(SIP/106)
exten => 20002,3,Hangup()

Se puede ignorar el número de la prioridad si ésta se edita como same => n, (' n ' de ' next ). Con esta opción no sólo se gana en rapidez a la hora de programar la centralita sino que también se evita tener que cambiar todas las líneas posteriores para esa misma extensión en caso de añadir nuevas líneas en el futuro.

[casa]                             ; Nombre del contexto
exten => 30001,1,NoOp(IVR de casa) ; NoOp es una aplicación que no hace nada más que mostrar por el CLI de Asterisk el mensaje que se le indique como parámetro.
same => n,Answer()                 ; Para responder la llamada
same => n,Wait(1)                  ; Esperar un segundo antes de seguir ejecutando el dialplan
same => n,Playback(mensaje-de-bienvenida) ; Reproducir un mensaje de nombre 'mensaje-de-bienvenida'
same => n,Dial(IAX2/2014)          ; Llamar a través del protocolo IAX2 a la extensión 2014 definida en el fichero iax.conf
same => n,Hangup()                 ; Terminar la llamada

También se pueden definir patrones de marcado para ejecutar el mismo fragmento de código para múltiples y distintas extensiones. Por poner un ejemplo de una oficina con 5 extensiones, podemos escribir un fragmento de código que se ocupe extensión a extensión de que los usuarios puedan llamarse entre sí o podemos generar un único fragmento de código con un patrón de marcado ( pattern ) que permita llamar a distintos destinos en tan sólo 3 líneas de código:

[empresa]
exten => _400X,1,NoOp(Llamando a la extensión ${EXTEN})
same => n,Dial(SIP/${EXTEN})
same => n,Hangup()

Con estas 3 líneas la centralita interpreta que si se llama a cualquiera de las extensiones definidas por el patrón de marcado 400X (en el rango: 4000, 4001, 4002,... 4009 ), estaremos llamando al cliente SIP con número de cliente igual al valor almacenado en la variable reservada EXTEN y que coincide con el número que se acaba de marcar. Como se puede observar, el juego que da un patrón de marcado es muy amplio.

Estas son algunas de las empresas que ya confían en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan día a día en la materia que imparten

Conviértete en profesor de OpenWebinars