Mezclando Annyang con Wolfram Alpha, o sea, dando inteligencia a Antonia

Bueno, ¿de qué va esto? Particularmente quizá sabéis que no soy amigo de los dispositivos tipo Google Home o Alexa, por el mero hecho que no les puedes cambiar el nombre (por ahora), así que en mi caso uso Annyang para llamarla Antonia y customizar las ordenes. Pero y porqué meterle Wolfram Alpha?

 

Bien, Wolfram Alpha como muchos conoceréis, es como una herramienta con una gran base de datos de información, mediante una web le podemos preguntar cualquier pregunta que casi seguro sabrá la respuesta. Desde temas históricos, a resultados deportivos, y por supuesto cálculos matemáticos complejos. Como os decía, el uso habitual es hacerle las consultas vía web y en inglés; tiene posibilidad de usarse mediante API pero es de pago si hacemos más de 2000 consultas al mes (o lo usamos para fines comerciales).

Así que, la idea es hacerle consultas a nuestra Antonia, repasar este antiguo post si no tenéis en marcha vuestro propio asistente virtual. Total que, a Antonia la diremos algo como: “Antonia, pregunta, ¿Quién es Julio Iglesias?”, y mediante un scriptcillo, vamos a (i) recoger todo lo que viene detrás de la palabra ‘pregunta’, (ii) vamos a traducirlo al inglés, (iii) vamos a consultarlo a Wolfram Apha, (iv) vamos a recoger la respuesta que nos da, (v) vamos a traducirla del inglés al español y (vi) lo dirá por los altavoces (en mi caso lo mandará a Home Assistant, y este lo reproducirá en los altavoces de casa gracias a Snapcast). Y todo esto con una respuesta rapidísima, que funciona genial!

Bien, en la máquina donde corra nuestro Apache con Annyang crearemos el script que será llamado para hacer la consulta. En mi caso se llama antonia_pregunta.sh

#!/bin/sh
echo "$1" | cut -d " " -f2- > /home/hector/wolfram-antonia/1peticion_sin_pregunta.txt
Peticion_Sin_Pregunta=`cat /home/hector/wolfram-antonia/1peticion_sin_pregunta.txt`
/home/hector/wolfram-antonia/trans :en -brief "$Peticion_Sin_Pregunta" > /home/hector/wolfram-antonia/1peticion_en.txt
TraducePeticion=`cat /home/hector/wolfram-antonia/1peticion_en.txt`
curl -s "https://api.wolframalpha.com/v1/result?appid=XXXXXX-XXXXXXXXXX&units=metric&" --data-urlencode "i=$TraducePeticion" > /home/hector/wolfram-antonia/2respuesta.txt
TraduceRespuesta=`cat /home/hector/wolfram-antonia/2respuesta.txt`
/home/hector/wolfram-antonia/trans :es -brief "$TraduceRespuesta" > /home/hector/wolfram-antonia/2respuesta_es.txt
RespuestaES=`cat /home/hector/wolfram-antonia/2respuesta_es.txt`
curl -X POST -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXX" -H "Content-Type: application/json" -d '{"entity_id": "media_player.volumio_mpd", "message": "'"$RespuestaES"'"}' http://192.168.1.116:8123/api/services/tts/google_say

 

Este script es algo cutre, pero totalmente válido para un dinosaurio como yo. Necesitaremos dar de alta nuestra app para usar las API de Wolfram Apha (e indicar su ID en el script), y en mi caso también al enviarla a los altavoces de Home Assistant, mediante curl una llamada API para que lo diga Google_Say; pero bueno, cada uno que haga como quiera, el script funciona así de fácil: “./antonia_pregunta.sh “pregunta ¿Quien es Julio Iglesias?”. Lo dicho, le quita la primera palabra, lo traduce y nos dará la respuesta, luego ya como quieras lo mandas a tus altavoces 🙂

Pero antes de poder ejecutar el script necesitaremos cumplir un requisito más, ¡necesitamos un traductor! y qué mejor que esta maravilla, mediante este simple script podremos traducir rápidamente entre cualquier idioma (como argumento podríamos usar el idioma destino, entre otras opciones).

wget git.io/trans
chmod +x ./trans
./trans :es -brief "Hi there, how are you?"

 

Y queda listo, en el fichero php de Antonia no olvidaremos añadir que cuando escuche su nombre seguido de la palabra ‘pregunta’, ejecute este script, quedando:

...
elseif (strpos($valor, 'pregunta') === 0)
{
    exec('/home/hector/bong.sh');
    exec('/home/hector/wolfram-antonia/antonia_atenta.sh "'.$valor.'" ');
}
...

 

Quizá es un jaleo, pero no es nada complicado montárselo de verdad, así le dotaremos de más inteligencia a nuestro asistente virtual propio, o eso, o usas uno comercial. Que seguro es menos flexible e igual de inseguro 😉

Espero os haya sido de interés, gracias por compartir en las RRSS.