Trabajando con Asterisk. Parte 3

Como bien comente en el articulo anterior, vamos a realizar algunas configuraciones para ver de verdad como funciona Asterisk, así que empezaremos configurando el fichero sip.conf, pero antes que nada le cambiaremos de nombre y crearemos un fichero limpio con el mismo nombre y posteriormente lo editaremos con nuestro editor preferido:

root@linux:/etc/asterisk # cd /etc/asterisk
root@linux:/etc/asterisk # mv sip.conf sip.example.conf && touch sip.conf
root@linux:/etc/asterisk # vi sip.conf

[general]
allowguest=no;
srvlookup=yes;
udpbindaddr=0.0.0.0:5060;
transport=udp;

[100]
type=friend;
host=dynamic;
username=100;
secret=100;
callerid=David;
context=internas;
mailbox=100@buzon;
allow=all;

[101]
type=friend;
host=dynamic;
username=101;
secret=101;
callerid=Divad;
context=internas;
mailbox=101@buzon;
allow=all;

Como podéis observar desde ya declaro el contexto que voy a crear en extensions.conf y el buzón que creare en voicemail.conf . Ahora, vamos a editar el fichero extensions.conf, y realizaremos los mismos pasos que con el fichero anterior para empezar:

root@linux:/etc/asterisk # mv extensions.conf extensions.example.conf && touch extensions.conf
root@linux:/etc/asterisk # vi extensions.conf

[general]
static=yes;
writeprotect=no;
autofallthrough=yes;
priorityjumping=no;

[internas]
exten => _1XX,1,Dial(SIP/${EXTEN},20)
same => n,VoiceMail(${EXTEN}@buzon)
same => n,Hangup()

En el fichero que he creado, podéis ver 3 cosas nuevas, paso a explicaros:

  • Dial: es la aplicación que se encarga de realizar llamadas, ésta está compuesta por el protocolo a utilizar (SIP), la variable ${EXTEN} que es una variable global que almacena al numero que se marca y el numero 20, que es el tiempo en segundos que transcurrirán hasta que salte el buzón.
  • Voicemail: es la aplicación encargada de lanzar todo el proceso para dejar un mensaje en el buzón de voz de un usuario.
  • same =>: es una variable con la que indicamos que la siguiente extensión es la misma que la anterior, así evitamos poner en cada línea extent => _1XX

Continuamos editando el fichero voicemail:

root@linux:/etc/asterisk# mv voicemail.conf voicemail.example.conf && touch voicemail.conf
root@linux:/etc/asterisk# vi voicemail.

[buzon]
100 => 100, David, david@msn.com;
101 => 101, Divad, divad@msn.com;

Bien, una vez hecho lo anterior entraremos a la CLI de Asterisk escribiendo:

root@linux:/etc/asterisk# asterisk -r
linux*CLI>

Una vez dentro configuraremos la consola para que nos de toda la información posible, así iremos entendiendo poco a poco lo que hace Asterisk internamente; entonces ejecutamos:

linux*CLI> core set verbose 9
Console verbose was OFF and is now 9

Podemos entrar en Asterisk con el siguiente comando:

root@linux:/etc/asterisk# asterisk -rvvv

Lo cual produciría lo mismo que entra en la CLI de Asterisk y ejecutar core set verbose 3, es decir por cada v que pongamos después de la r, se aumentará el ‘verbose’ en 1.

A continuación ejecutamos los siguientes tres comandos:

linux*CLI> dialplan reload
…salida omitida…
linux*CLI> sip reload
…salida omitida…
linux*CLI> voicemail reload
…salida omitida…

Con esto conseguimos que Asterisk releea todos los ficheros de configuración y aplique los cambios pertinentes, ahora, si ejecutamos el comando sip show users; podremos detallar como ahora aparecen dos usuarios SIP que son los que hemos creado.

linux*CLI> sip show users
Username Secret Accountcode Def.Context ACL Forcerport
100 100 internas No No
101 101 internas No No

Bien ahora instalaremos Zoiper para realizar algunas pruebas.

Instalando Softphone Zoiper en Linux

Ojo, necesitaremos GUI para esto. Entonces, nos iremos a la pagina Oficial de Zoiper, concretamente a la zona de descargas haciendo clic aquí y descargaremos el fichero tar.gz disponible para arquitecturas 32 y 64. Una vez descargado los descomprimiremos con tar.

root@linux:/etc/asterisk# cd /home/david/Descargas
root@linux:/home/david/Descargas# tar xvfz Zoiper*

Veremos que hay dos archivos, bien, pues utilizaremos el que corresponda con respecto a nuestra arquitectura, para saberla podemos ejecutar uname -m.

Desde la GUI debemos ejecutar el fichero .run y realizar una instalación muy típica de Windows (Next, Next, etc…). Si al ejecutarla nos pidiese permisos de superusuario/root, entonces desde un terminal deberíamos ejecutar gksudo nautilus, así, se nos abriría un explorador de ficheros con privilegios root, pero claro, esto solo funciona si tenemos nautilus instalado, si no, tendrás que buscarte un poco la vida :D.

Con Zoiper abierto, nos iremos a la parte superior en Configuración y haremos clic en Crear nueva cuenta, después deberemos realizar lo siguiente:

Account type: SIP
user@host: 100@192.168.0.105 o la IP de tu maquina con Asteriskpassword:100
Account name: No tocamos.

Así finalizamos la configuración del Softphone, ahora para comprobar que todo ha quedado OK, iremos a la terminal de Asterisk y ejecutaremos lo siguiente:

root@linux:/etc/asterisk# asterisk -r
linux*CLI> sip show peers;
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description
100/100                   192.168.0.105                            D  Auto (Yes) No             57724    Unmonitored
101/101                   (Unspecified)                            D  Auto (No)  No             0        Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 1 offline]

Como podemos comprobar el usuario 100 ahora tiene especificado un host, con la dirección IP 192.168.0.105, que es la misma, en mi caso, que tiene la centralita Asterisk.

Bien, vamos a realizar una llamada a la extensión 101, que ahora mismo esta desconectada y vamos a ver que pasa en la centralita, entonces ejecutamos:

root@linux:/etc/asterisk# asterisk -r
linux*CLI> core set verbose 9
linux*CLI>

Selección_001

Como podéis detallar en la imagen, podemos ver como se ejecuta la extensión internas y se detalla el valor que toma la variable ${EXTEN}, en este caso = Dial (“SIP/100-00000002″,”SIP/101,20“) que vendría a ser el numero que hemos marcado, además nos dice que un canal del tipo SIP no se ha podido crear ya que el Suscriptor esta ausente; bien, pues vamos a hacer que ese ‘suscriptor’ ausente deje de estarlo, para ello utilizaremos la App para Android Zoiper.

La descargaremos desde Google play, y una vez instalada iremos a Ajustes –> Cuentas y agregaremos una cuenta con los siguientes parámetros, OJO solo en mi caso, vosotros deberéis poner la IP de vuestra Centralita, el usuario SIP y su contraseña, en fin, vuestros datos. Finalmente realizamos de nuevo una llamada y veremos en la centralita como se ejecutan las aplicaciones y se usa la extensión internas.

  1. Tienes una cuenta … Sí
  2. Configurar su cuenta … Configuración manual
  3. SIP o IAX … SIP

Screenshot_2015-09-25-00-04-57   Screenshot_2015-09-25-00-05-03   Screenshot_2015-09-25-00-05-08

Screenshot_2015-09-25-00-04-47   Screenshot_2015-09-25-00-05-19   Screenshot_2015-09-25-00-21-28

Creando un menu de llamada

Si queremos crear un menú, os puedo dar un par de ideas, como veréis aquí utilizare las aplicaciones Goto, WaitExtent, Background, etc… ya veis que al final mucha de la habilidad que podamos tener con Asterisk, dependerá de como utilizamos las aplicaciones y de cuantas conocemos. Así que bueno, os dejo con un ejemplo de un menú, y en la siguiente entrega os traeré algo mucho más heavy: Reconocimiento de voz con Google ASR y Text To Speech con Festival.

[menu]; creamos en nombre del contexto.
exten => s,1,Answer(); el valor S hace referencia a una extensión interna de Asterisk que se utiliza para iniciar un proceso.
exten => s,n,Wait(1); Espera la cantidad de segundas pasados como parámetros.
exten => s,n,Background(press-1); reproduce el sonido de fondo pasado como parámetro.
exten => s,n,Background(or);
exten => s,n,Background(press-2);
exten => s,n,WaitExten(3);
espera 3 segundos al valor que será introducido por el usuario, espera un valor desde el tablero de marcado del cliente.

; dejamos un espacio para establecer las condiciones

exten => 1,1,Playback(you-entered); si el valor introducido es 1, damos prioridad 1 y reproducimos: Playback you-entered
exten => 1,n,Playback(digits/1); si el valor introducido es 1, continúa ejecutando el PLayback digits 1
exten => 1,n,Goto(s,1); Goto lleva a un punto en concreto, en este caso a la extensión S y la prioridad 1

; dejamos un espacio para establecer las siguientes condiciones

exten => 2,1,Playback(you-entered); Si el valor introducido reproduce el sonido.
exten => 2,n,Playback(digits/2)
exten => 2,n,Goto(s,1);
vuelve a la extensión S y la prioridad 1.

; dejamos un espacio para establecer las siguientes condiciones

exten => h,1,NoOp(Han colgado la llamada!!!!);El valor H hace referencia Hangup, es decir, si se cuelga la llamada entonces  NoOp muestra un mensaje en la consola, el mensaje lo pasamos como parámetro.
exten => h,n,Hangup(); se cuelga la llamada.

; dejamos un espacio para establecer las siguientes condiciones

exten => t,1,Playback(too-low); el valor T hace referencia a Timeout, es decir si se sobrepasa el tiempo, los 3 segundos establecidos en WaitExten, entonces reproduce el sonido Too-low.
exten => t,n,Goto(s,1); y vuelve al inicio.

; dejamos un espacio para establecer las siguientes condiciones

exten => i,1,Playback(pbx-invalid); El valor i hace referencia a Incorrect, es decir que si se introduce un valor que no esta definido, se reproduce el sonido pbx-invalid.
exten => i,n,Hangup(); y se cuelga la llamada.

Un comentario sobre “Trabajando con Asterisk. Parte 3

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s