Quobit

Cultura Digital, Tutoriales, tecnología y gadgets

Tutorial basico para entender como Funciona y se Programa Asterisk

asterisk logo2

asterisk logo2

Uno de las soluciones PBX del mercado ha sido Asterisk, sin embargo, no muchos entienden la forma en como se instala esté programa.

Por ello te comparto el siguiente tutorial que te ayudará a entender su funcionamiento

Tutorial para instalar y configurar Asterisk

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.