Reconocimiento de voz con la API de Google Cloud ASR en Asterisk 15 sobre CentOS

asterisk-logo2
Imagen 1. Asterisk y Google ASR

Despues de bastante tiempo tras volver a configurar Google ASR en Asterisk, pero esta vez en CentOS, desde la ultima vez que lo hice en debian he conseguido dejar funcionando el reconocimiento de voz con Google, pero esta vez con la API de Google Cloud, así que en esta entrada voy a describir como conseguirlo:

Lo primero que debemos hacer en CentOS es instalar el siguiente grupo de paquetes:

# yum -y groupinstall 'Development Tools'

A continuación instalaremos los paquetes necesarios para el correcto funcionamiento de Asterisk 15:

# yum install wget ssh ncurses ncurses-devel uuid uuid-devel libuuid-devel jansson-devel libxml2-devel sqlite-devel

Nos movemos al directorio home y descargamos la version 15 de Asterisk:

# cd ~
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15-current.tar.gz

Nos movemos al directorio /usr/src, descomprimimos alli el tarball y nos movemos al directorio que nos ha generado:

# cd /usr/src
# tar zxvf ~/asterisk-15-current.tar.gz
# cd asterisk-15*

A continuación ejecutamos el script configure y despues el make para generar el menu de selección:

# ./configure
# make menuselect

A continuación ejecutamos los siguientes comandos. Si no tuviesemos algun paquete necesario se nos haria saber, así que si no termina correctamente la ejecución de estos comandos, prestad atención a la salida:

# make
# make install
# make config
# make install-logrotate

Si queremos generar ficheros de configuración de ejemplo podemos ejecutar:

# make samples

A continuación para el correcto funcionamiento de Asterisk procederemos a abrir el puerto 5060 tanto en TCP como UDP.

# firewall-cmd --set-default-zone=work
# firewall-cmd --zone=work --permanent --change-interface=$TU_DEVICEID
# firewall-cmd --zone=work --permanent --add-port=5060/udp
# firewall-cmd --zone=work --permanent --add-port=5060/tcp

Si durante la ejecución de Asterisk tuviesemos algun problema de ejecución podremos relacionarlo con SELinux, por lo cual yo recomiendo desactivarlo, podeis echarle un vistazo a la entrada anterior, en la que expliqué como desactivarlo. Lo siguiente que debemos hacer es reiniciar Asterisk y comprobar si ha arrancado correctamente:

# service asterisk restart
# service asterisk status

Accedemos a la consola de Asterisk:

# asterisk -cvvvvvv

En esta entrada omitiré la configuración de los diferentes ficheros, ya que en está entrada lo explique, así que si teneis alguna duda, echadle un vistazo.

Para realizar las pruebas utilizaré el softphone Zoiper el cual tiene version para Windows, Linux y Android, la configuración e instalación del mismo ya la expliqué en esta entrada.

Para tener correctamente configurado ASR en Asterisk, utilizaremos el Script de Zaf, actualizado para la API de Google Cloud, lo podemos descargar desde su GitHub o directamente haciendo clic aquí

A continuación debemos instalar las dependencias del Script. Ya que este está escrito en perl debemos descargar los siguientes paquetes:

# yum install flac flac-devel perl perl-JSON perl-libwww-perl.noarch perl-LWP-Protocol-https perl-Crypt-SSLeay

Debemos mover el fichero speech-recog.agi a la ruta donde se almacenan los binarios AGI de Asterisk, por defecto /var/lib/asterisk/agi-bin, si este directorio no exisitiese, deberia estar declarado su ubicacion en el fichero asterisk.conf dentro de /etc/asterisk.

Lo siguiente que debemos hacer es modificar el fichero extensions.conf y crear la extensión 666 dentro del contexto google-asr.

[google-asr]

exten => 666,1,Answer(); contestamos automáticamente la llamada.
same => n,agi(speech-recog.agi,es,2,#); utilizamos el Script de Zaf, idioma español, 2 segundos de timeout , y # tecla de interrupción/finalización.
same => n,Verbose(1,Lo que dijiste fue: ${utterance}); Verbose muestra un mensaje solo en la consola de Asterisk, es decir que nos enseña el contenido de la variable utterance.
same => n,Verbose(1,La probabilidad de ser correcto es: ${confidence}); Más de lo mismo pero con la variable confidence.
same => n,Verbose(1,La cantidad de caracteres que tiene utterance es: ${LEN(${utterance})}); Mostramos en la terminal la cantidad de caracteres que tiene utterance.
same => n,Hangup(); Se termina la llamada.

Tened en cuenta que esta extensión debe ser añadida al contexto de nuestro usuario sip en el fichero sip.conf

[100]
--SALIDA OMITIDA
context=google-asr;

Si tenemos otro contexto, por ejemplo: extensionesinternas, en el fichero extensions.conf podemos incluir el contexto google-asr a ese contexto de la siguiente forma:

[extensionesinternas]
--SALIDA OMITIDA
include => google-asr;

A continuación debemos realizar los dos pasos más importantes:

  1. Generar nuestra key de API en Google Cloud
  2. Activar la facturación en Google Cloud
  3. Insertar la Key en el fichero speech-recog.agi

Para el primer paso debes realizar las siguientes acciones:

  1. Ir a la consola de Google Cloud: https://console.cloud.google.com/?hl=es
  2. Si no tenemos un proyecto creado debemos crear uno nuevo, a continuación simplemente iremos a la lupa que esta en la parte superior y escribiremos “Google Cloud Speech API“, seleccionamos la API que nos aparece y la habilitamos.
    Sin título2
    Imagen 2. Habilitar Google Cloud Speech API
  3. En ese momento nos saldrá una ventana avisandonos de que para utilizar la API debemos activar un perfil de facturación y asociarlo al proyecto:
    6.JPG
    Imagen 3. Habilitar facturacion
  4. Una vez seguido el proceso para activar la facturación y finalizado, en la parte izquierda donde habilitamos la API veremos una llave que pone ‘Credenciales’. Hacemos clic allí y luego ‘Crear credenciales’ –> ‘Clave de API’ –> Copiamos la Key/Clave generada y cerramos.
    8.jpg
    Imagen 4. Crear credenciales -> Clave de API
    9
    Imagen 5. Clave de API Creada.

Para comprobar que no tenemos problemas con el perfil de facturación asociado al proyecto donde esta la API, podemos ejecutar:

$ curl https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=$KEY -X POST -d '{}'

En la salida no deberiais ver ningun problema relacionado con la facturación.

Ahora debemos editar el fichero speech-recog.agi y añadir nuestra Key generada a la variable $key, lo haremos con nuestro editor preferido nano o vi:

my $key = “”; debería quedar my $key = “AIzaSyB**todo lo demás

Una vez tengamos todo correctamente configurado si desde nuestro softphone realizamos una llamada a la extension 666 deberiamos escuchar un BEEP y a continuación deberiamos decir algo, en la prueba que he realizado dijé: “Hola esto es una prueba”, y como veis en los logs, Google ASR lo ha reconocido perfectamente.

logs
Imagen 6. Resultados de la prueba.
Anuncios

SELinux en CentOS y como desactivarlo

selinux-penguin-new_sized
Imagen 1. SELinux.

La entrada de hoy va ser rápida, es un simple tip sobre SELinux.

Asi que hablando en terminos genericos SELinux blinda el Kernel de Linux permitiendo la configuración del mismo con políticas de acceso, así que antes de nada lo que podemos hacer para comprobar en que estado lo tenemos, es ejecutar el siguiente comando:

#sestatus

La primera línea de la salida de este comando nos indicara el estado en el que se encuentra el mismo. Para desactivarlo, tenemos dos vías la permanente y la temporal.

Temporalmente podemos desactivarlo ejecutando:

#setenforce 0

También lo podremos desactivar ejecutando:

echo 0 > /selinux/enforce

Mientras el equipo permanezca encendido SELinux permanecerá desactivado, pero en cuanto reiniciemos el equipo, SELinux leerá los valores de su fichero de configuración y volverá a estar activo, ese fichero será el que modificaremos para que SELinux permanezca desactivado, así que modificaremos el fichero:

vim /etc/sysconfig/selinux

El valor a modificar sería el siguiente:

SELINUX=enforcing

Este habría que cambiarlo por:

SELINUX=disabled

Recordad que si simplemente modificais el fichero de configuración estos cambios no se harán efectivos al momento, para ello primero modificad el estado de SELinux con el primer comando y luego editad el fichero.

X11 forwarding a través de SSH, desde CentOS a Windows

logo.png
Imagen 1. X11

Hoy he tenido que hacer un X11 forwarding desde un servidor CentOS a un cliente Windows para realizar la instalación de Oracle . No es nada complejo, pero pueden surgir algunos problemas durante el camino si no se siguen los pasos adecuados, así que para empezar debemos instalar los siguientes paquetes en el servidor CentOS:

Continuar leyendo “X11 forwarding a través de SSH, desde CentOS a Windows”

Inicio de sesion usando cookies con cURL

captura.png
Imagen 1. cURL

Esta semana me he estado peleando con algo que al principio me parecía lo más básico del mundo, pero al final me ha hecho echarme un par de horas intentando sacarlo. Esto era el inicio de sesión en una pagina web con almacenado y reutilización de cookies de Inicio de sesión.

Básicamente lo que buscaba era que, un script que estoy haciendo para automatizar una tarea, se conectase a una pagina web con un usuario y contraseña, almacenase la cookie de inicio de sesión y la reutilizase en otra pagina de la web donde era obligatorio el inicio. La búsqueda de estos pasos básicos, me devolvía un poco de todo menos lo que quería, así que aquí os dejo las opciones que utilicé en mi script:

Continuar leyendo “Inicio de sesion usando cookies con cURL”

Permisos heredados en Linux con ACLS

tux__linux__logo_block_bw_by_berradev-d7pys3t
Imagen 1. Linux

Hace ya bastante que no publicaba nada pues he estado bastante enfocado en un proyecto, que ya voy terminando, así que ahora voy teniendo tiempo de nuevo. Hace poco un compañero me comentaba si existían los permisos heredados en Linux, y la verdad es que no hay algo como tal, hay algo así como una función de facto, así que podemos hacer algo muy parecido con ACLs sobre los directorios.

Supongamos que queremos crear un directorio en el que siempre Otros, tenga determinados permisos y esto no dependa del umask del usuario que procede a crear la carpeta o archivo, por ejemplo, tenemos la carpeta Todos, en la que tenemos ciertos documentos que siempre queremos que Otros tengan los permisos RWX sobre ellos, pero además, queremos que si alguien crea un nuevo documento o carpeta, contengan los mismos permisos.

Continuar leyendo “Permisos heredados en Linux con ACLS”

WannaCry, Petya y los que están por llegar…

IMG_20170629_134910

PoorBoy es un chico trabajador, PoorBoy sale de casa a la mañana, debe llegar hoy más temprano que nunca a la oficina, el jefe le requiere a primera hora. Marcha raudo y veloz, le gusta llegar temprano, y más aún si debe hablar con su jefe. 

Se dispone a coger el transporte público y elige tomar el autobús, es más lento que el tren pero ha salido temprano y puede permitirselo, total, es más barato. Llega a la parada, observa el panel digital con los horarios, pero no ve nada más que un texto criptico que no consigue entender desde lejos, le extraña, pero decide ir a la web de la compañía para descargar la tabla de horarios, pero la página no carga; ¡ah espera! ¡si!, hay un mensaje: 

-‘LA PAGINA WEB ESTA FUERA DE SERVICIO, DISCULPE LAS MOLESTIAS’

Le parece curioso cuanto menos, asi que decide esperar un poco más junto con las demás personas en la parada, el tiempo pasa y pasa y el bus no llega, ante la espera y el frío mañanero decide ir rápidamente a la cafetería que tiene a sus espaldas, necesita calentar un poco el cuerpo, así que se acerca a la camarera sonriendo y le pide un cortado para llevar, le da un billete de 5€, pero la camarera avergonzada le dice: 

-‘Señor, tendrá que darme el dinero exacto, por que el cajon-portamonedas inteligente no funciona está mañana y no le puedo dar ningún cambio’ 

PoorBoy desiste y se va a la parada de autobús de nuevo, cuando se esta acercando ve como la multitud en tono enfadada y bociferando se marchan, un operario de la compañía de autobuses les ha dicho algo, pero aún lo desconoce, así que toma carrerilla , se acerca y le pregunta que ocurre, a lo que le responden: 

-‘La nueva y reluciente flota de autobuses 100% eléctricos no funciona, y debe esperar ¡1 hora o mas, a que lleguen los autobuses ‘normales”

-¡Imposible! Hoy me requiere el jefe, piensa PoorBoy.

Así que se aleja deprisa a retirar algo más de dinero para ir en tren, llega al cajero más cercano, pero ve que no funciona, hay un mensaje  en pantalla bastante llamativo, le suena haber visto algo así antes, pero no presta demasiada atención, no hay tiempo para ello, así que rebusca en su mochila y encuentra otro billete de 5€, ¡Bien!, le llega para el tren, se va a la parada más cercana, baja las escaleras rápidamente, llega a la máquina de los tickets y visualiza el mismo mensaje del panel digital, el cajón portamonedas inteligente y del cajero, está vez muy extrañado decide leerlo y el texto empieza así:

‘ YOUR FILES HAVE BEEN ENCRYPTED'”

El mensaje que lee PoorBoy, nuestro personaje de la historia, ya todos sabemos que es el tipico de un ransomware, cómo podría ser el tan sonado WannaCry y el renacido Petya, que algunos conocían ayer. Una historia como la contada al principio de esta entrada, puede parecer ficción, pero nada más lejos de la realidad, a día de hoy es posible y podríamos decir que esta ocurriendo, ocurrió con WannaCry, ocurrio con Petya y volverá a ocurrir pronto con otro, solo es cuestión de tiempo.

Continuar leyendo “WannaCry, Petya y los que están por llegar…”

Canales y grupos de Seguridad Informática en Telegram

Telegram_logo.svg

Hace poco he decidido cambiar el nombre del blog, por que el nombre anterior me limitaba a escribir sobre determinadas cosas y al final parecía que el contenido no encajaba con el nombre del mismo. Con el nuevo nombre espero poder compartir más cosas con todos vosotros, sin preocuparme si el contenido encaja con el nombre. De ahora en adelante esto será Deivid’s Docs.

Bien, sin más dilación, comentaros que hace poco me encontraba buscando canales de seguridad informática en Telegram y salvo la entrada en el blog Security By Default, no encontré nada más interesante. Así que en esta entrada voy a dejar la lista de canales y grupos de Telegram los cuales he podido ir recopilando poco a poco y probablemente la vaya actualizando.

Continuar leyendo “Canales y grupos de Seguridad Informática en Telegram”