lunes, 10 de diciembre de 2012


USO DE VARIABLES

exten => 301,1,Set(LEIF=SIP/1000)
same => n,Dial(${LEIF})

Si se va a referenciar el nombre de la variable, en este caso será LEIF
Si se va a referenciar el contenido del valor, en este caso será ${LEIF}

Asterisk maneja 3 tipos de variables:

-Variables Globales: Pueden ser declaradas dentro del contexto [globals] al principio del archivo extensions.conf
[globals]
LEIF=SIP/1000

-variables de canal: Variable asociada con una llamada en particular, definida solamente mientras dura la llamada. Son configuradas con la aplicación set()

exten => 202,1,Set(MagicNumber=42)
same => n,SayNumber(${MagicNumber})

-Variables de ambiente: se utilizan para leer la variables del sistema (Linux). Para crearlas se utiliza la aplicación set() y la función del dialplan env(). No son muy utilizadas en el dialplan de Asterisk


Agregando variables al dialplan
[globals]
LEIF=SIP/1000
JIM=SIP/1001
RUSSELL=SIP/1002

[LocalSets]
exten => 1000,1,Dial(${LEIF})
exten => leif,1,Dial(${LEIF})

exten => 1001,1,Dial(${JIM})
exten => jim,1,Dial(${JIM})

exten => 1002,1,Dial(${RUSSELL})
exten => russell,1,Dial(${RUSSELL})

exten => 201,1,Goto(TestMenu,start,1)

[TestMenu]
exten => start,1,Answer()
same => n,Background(enter-ext-of-person)
same => n,WaitExten()

exten => 1,1,Dial(SIP/1000,10)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()

exten => 2,1,Dial(SIP/1001,10)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()

exten => i,1,Playback(pbx-invalid)
same => n,Goto(incoming,123,1)

exten => t,1,Playback(vm-goodbye)
same => n,Hangup()

En el siguiente vídeo se muestra la configuracion: Variables DialPlan


CONFIGURACION DE EXTENSIONES EN ASTERISK

En esta parte se configurarán los archivos sip.conf y extensions.conf ubicados en el directorio /etc/asterisk

RELACION ENTRE LOS CANALES DE CONFIGURACION Y EL DIALPLAN

En la grafica se muestra como se relaciona el archivo de configuración sip.conf con el archivo extensions.conf

El archivo de configuración de Asterisk extensions.conf es donde se define el dialplan de la centralita. Todas las llamadas entrantes y salientes se procesan en este archivo. En el lenguaje común, la extensión es el número de teléfono interno de una oficina o de un determinado servicio con el que se quiere comunicar. En el caso de Asterisk, la extensión es una serie de números o letras que define un bloque del dialplan dentro del cual se ejecutan aplicaciones o funciones de la PBX.

En Asterisk, el archivo sip.conf es donde se definen las extensiones SIP, los proveedores SIP y, en general, todo lo relacionado con el protocolo SIP. Con las extensiones configuradas se podrán llamar una con otra, se podrán enrutar las llamadas a teléfonos fijos y/o celulares, utilizar proveedores SIP, Gateway PSTN, y aprovechar los típicos servicios de una PBX como llamada en espera, desvío de llamadas, llamada a tres, contestador automático, buzón de voz, etc.


ARCHIVO SIP.CONF
Se crea el archivo sip.conf y se copia en él lo siguiente, así:

nano /etc/asterisk/sip.conf
[general]
context=unauthenticated
allowguest=no
srvlookup=yes
udpbindaddr=0.0.0.0
tcpenable=no

[office-phone](!)
type=friend
context=LocalSets
host=dynamic
nat=yes
secret=1234
dtmfmode=auto
disallow=all
allow=alaw

[1000](office-phone)
[1001](office-phone)

[general] etiqueta que introduce la parte general de la configuración
allowguest No = no se permiten llamadas entrantes (INVITE) de usuarios no autenticados (aumenta la seguridad de Asterisk). Yes = se permiten llamadas entrantes (INVITE de usuarios no autenticados
context default = el contexto donde llegarán las llamadas no autenticadas si allowguest=yes
srvlookup Permite hacer búsquedas de registros DNS SRV (RFC 2782) basadas en los nombres de dominio para llamadas SIP salientes del tipo: SIP/usuario@dominio. La búsqueda se hará solamente para el primer registro presente en el dominio. Valor: Yes
udpbindaddr Es la dirección IP y el puerto donde Asterisk se pondrá a la escucha para las señalización SIP utilizando el protocolo de transporte UDP. Si se indica 0.0.0.0 Asterisk escuchará en todas la direcciones IP presentes en el servidor Linux. Valor: 0.0.0.0:5060
tcpenable Permite la señalización SIP sobre el protocolo de transporte TCP Valor yes

[office-phone](!)
[office-phone] es la descripción del template (en este ejemplo se utilizará para configurar todas las extensiones que tienen acceso solo a llamadas locales). (!) es las sintaxis que indica que se trata de un template.
type friend=es un user y peer al mismo tiempo
• user: una extensión que se autentica al servidor Asterisk usando el campo From para hacer llamadas.
• peer: una extensión que se autentica para las llamadas entrantes utilizando la dirección IP y el puerto
context El contexto a que tendrá acceso la extensión. Valor LocalSets como se ha creado en el dialplan
host Si la extensión se conecta remotamente con un IP dinámico se pone dynamic. En caso contrario se pone la dirección IP del servidor Asterisk
nat se asume que los dispositivos están detrás de un NAT
secret La contraseña para la extensión. Personalizar Valor predefinido: 1234
dtmfmode Protocolo para los tonos DTMF
disallow all=se deshabilita todos los codec (audio/video)
allow alaw=se habilita el codec audio alaw

Para configurar una nueva extensión se puede utilizar el template de la siguiente forma:

[1000](office-phone)
[1001](office-phone)


CARGANDO LA CONFIGURACION DEL ARCHIVO SIP.CONF
Asterisk CLI

Desde la consola de asterisk se cargan los archivos de configuración de los canales

#asterisk -r
*CLI> module reload chan_sip.so

Verificar que los nuevos canales han sido cargados:
*CLI> sip show peers
*CLI> sip show users


UN DIAL PLAN BASICO PARA VERIFICAR LA CONFIGURACION DE LOS DISPOSITIVOS

Se copia lo siguiente en el archivo /etc/asterisk/extensions.conf

[LocalSets]
exten => 1000,1,Dial(SIP/1000)
exten => 1001,1,Dial(SIP/1001)

exten => 123,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()

Se recarga el dialplan después de configurar el archivo extensions.conf:

#asterisk -rx "dialplan reload”

O desde la consola de asterisk:

*CLI> dialplan reload

[LocalSets]
Se define el contexto LocalSets
exten => 1000,1,Dial(SIP/1000)
El comando exten => es para definir una extensión, 1000 es la extensión, 1 es la prioridad y Dial es la aplicación que se utiliza para iniciar una llamada usando el protocolo SIP.

exten => 123,1,Answer
Answer es la aplicación que se utilizará. En este caso Answer contesta la llamada
exten => 123,2,Playback(hello-world)
En este caso la aplicación es Playback cuya función es enviar el audio de una locución al canal que está llamando.

Para ver la configuración en detalle, ver el siguiente vídeo en youtube: Configuración extensiones en Asterisk







domingo, 9 de diciembre de 2012



DIALPLAN BASICO

SINTAXIS DEL DIALPLAN: un dialplan esta formado por 4 conceptos principales:

1. Contexto: Se define dándole el nombre del contexto dentro de corchetes [ ].

Hay dos contextos especiales [general] y [globals].

Al definir un canal (por ejemplo un archivo sip.conf, iax.conf, chan_dahdi.conf) uno de los parámetros requeridos en cada definición del canal es el contexto.

El contexto es el punto del dialplan donde las conexiones desde cada canal se inicia.

2. Extensions: Serie de pasos que contienen una aplicación a través de las cuales Asterisk tomara la llamada.

La sintaxis para una extensión es la palabra exten: (exten=>). Cada paso en una extensión esta compuesto por 3 opciones:

exten=> nombre, prioridad, aplicación()

3.Prioridades:
exten => 123,1,Answer()
exten => 123,2,do something
exten => 123,3,do something else
exten => 123,4,do one last thing
exten => 123,5,Hangup()

exten => 123,1,Answer()
same => n,do something
same => n,do something else
same => n,do one last thing
same => n,Hangup()

4.Aplicaciones:

Answer(): Traducción directa de "Responder". La función de esta aplicación básicamente es la de descolgar la llamada entrante

Playback(): Sirve para reproducir una pista de audio contenida en un archivo dentro del directorio especifico de pistas en español (var/lib/asterisk/sounds/es/)

Hangup(): Simplemente, cuelga la llamada. No es necesario pasarle ningún parámetro especifico.


DIALPLAN INTERACTIVO

-Goto() Envía una llamada a otra parte del diaplan

same => n,Goto(context,extension,priority)

- Background() Al igual que la aplicación Playback(), esta reproduce un archivo de audio grabado, sin embargo, al momento de presionar una tecla se interrumpe la grabación pasando la llamada a la extensión que corresponde con el numero que se presiono.

-WaitExten() Esta aplicación espera que el que esta llamando ingrese dígitos mediante DTMF y es usada directamente con la aplicación Background()



MANEJO DE ENTRADAS NO VÁLIDAS Y TIEMPOS DE ESPERA

En Asterisk cuando un contexto recibe una solicitud de una extensión no valida, la llamada es enviada a la extensión i.

Cuando al estar llamando no se oprime la tecla dentro del tiempo valido (10 segundos por defecto) la llamada será enviada a la extensión t

Ejemplo: exten => 201,1,Goto(TestMenu,start,1)


[TestMenu]
exten => start,1,Answer()
same => n,Background(main-menu)
same => n,WaitExten(5)

exten => 1,1,Playback(digits/1)
same => n,Goto(TestMenu,start,1)

exten => 2,1,Playback(digits/2)
same => n,Goto(TestMenu,start,1)

exten => i,1,Playback(pbx-invalid)
same => n,Goto(TestMenu,start,1)

exten => t,1,Playback(vm-goodbye)
same => n,Hangup()

Para ver la configuración en vídeo, ir al siguiente enlace: Aplicación Goto()




jueves, 6 de diciembre de 2012


CONVERTIR ARCHIVO CON FORMATO .mp3 A FORMATO .wav

Asterisk soporta muchos tipos de archivos de audio, (ver módulos de formatos y codecs en el directorio /usr/lib/asterisk/modules). Siempre se recomienda utilizar un formato y un códec que evite cargar al sistema cada vez que se reproduzca.

Por ejemplo, si un terminal IP utiliza códec Alaw, no es práctico que el archivo de audio se encuentre en GSM, ya que Asterisk tendrá que “traducir” el archivo codificado como ‘gsm’ a ‘alaw’ para que el terminal pueda reproducirlo y el teléfono o softphone escucharlo. Esto consume procesador y memoria que, multiplicado por el número de archivos que se pueden llegar a reproducir a la vez, pueden causar una carga excesiva y nada justificada.

Para evitar esto, se suelen convertir los archivos de audio al códec a utilizar: si un teléfono está configurado como ‘alaw’, la locución puede estar codificada en ‘alaw’ también y así evitar la conversión. Lo mismo ocurre si un terminal utiliza ‘G.729′ (cuya trascodificación requiere de licencias) por lo que si se convierten las locuciones a G.729, además de ahorrar procesamiento del sistema, también ahorra utilizar las licencias del códec G.729 que se tengan

Linux dispone de una herramienta fundamental que debe estar incluido en cualquier servidor de Asterisk: SOX, esta herramienta convierte un archivo a cualquier otro.

Se instala SOX el cual permite manipular archivos de audio:

cd /usr/src
wget http://downloads.sourceforge.net/project/sox/sox/14.3.2/sox-14.3.2.tar.gz
tar -xf sox-14.3.2.tar.gz
cd sox-14.3.2 $ ./configure -prefix=/usr Se termina con la compilación e instalación:
make
make install

Como la música en espera en Asterisk trabaja con archivos .wav se instala mpg123 que convertirá archivos .mp3 al formato .wav

cd /usr/src
wget http://sourceforge.net/projects/mpg123/files/mpg123/1.12.5/mpg123-1.12.5.tar.bz2/download
tar -xjvf mpg123-1.12.5.tar.bz2
cd mpg123-1.12.5
./configure --prefix=/usr
make
make install

Se crea la carpeta donde guardar los archivos de extensión .mp3:
mkdir /var/lib/asterisk/mohmp3
cd /var/lib/asterisk/mohmp3

Se guarda un archivo song.mp3 en la carpeta /mohmp3,

Se convierte el archivo song.mp3 a formato .wav
mpg123 -w song.wav song.mp3

Se baja la frecuencia de la muestra del archivo .wav y se pasa de stereo a mono sin perder la calidad
sox song.wav -V -r 22050 -c 1 song1.wav

Se copia el nuevo archivo song1.wav al directorio var/lib/asterisk/moh
cp /var/lib/asterisk/mohmp3/song1.wav /var/lib/asterisk/moh

Se reinicia Asterisk para que se guarden los cambios
/etc/init.d/asterisk restart


MÚSICA EN ESPERA

Una de las funcionalidades de Asterisk es la música en espera. En muchos servicios de asistencia al cliente es típico escucharla mientras se espera que algún operador atienda la llamada.

A continuación se configura el archivo musiconhold.conf. Se modifica de la siguiente manera:

nano /etc/asterisk/musiconhold.conf

Se añaden las siguientes líneas al final del archivo:

[default]
mode=files
directory=/var/lib/asterisk/mohmp3
random=yes

Se accede a la consola de Asterisk:
asterisk -rvvvvvvvvvvvvv

Se escribe:
CLI> moh reload

Para recargar la configuración de la música en espera.
CLI> moh show classes

A continuación, en el archivo de configuración de Asterisk extensions.conf es donde se define el dialplan de la centralita. Todas las llamadas entrantes y salientes se procesan en este archivo. Para que Asterisk sepa come enrutarlas se definen contextos, extensiones y prioridades. Más adelante se verá como se crea un contexto y dentro del contexto las extensiones y las prioridades.

Ahora se configura otra extensión que permite escuchar la música de espera

exten => 200,1,Answer
same => n,MusicOnHold(default,60)
same => n,Hangup


Marcando la extensión 200, Asterisk contestará la llamada (Answer) ejecutará la aplicación MusicOnHold que permite escuchar la musca de espera de una clase configurada en el archivo musiconhold.conf. La segunda opción (60) define el tiempo, en segundos, que se escuchará la música. Pasados los 60 segundos, la llamada terminará (Hangup).