¿Cómo conseguir que una Inteligencia Artificial coloree las fotos del abuelo?

Cuando hablamos  de Inteligencia Artificial, es fácil pensar en sistemas muy complejos y caros. Sin embargo, lo más complejo es crear un modelo para resolver una clase de problemas. Ese modelo, una vez creado, es fácil de aplicar para solucionar un problema concreto usando un poco de imaginación. Hoy veremos como usar un modelo creado por otra persona, para nuestro objetivo: colorear las fotos que tengamos en blanco y negro de nuestros abuelos.

Imagen en blanco y negro coloreada por una Inteligencia Artificial
De una postal antigua, republicada en eldiariomontanes.es

Para la creación de un modelo, hay que saber mucho del ámbito de aplicación, hay que tener una buena base de matemáticas estadísticas y hay que conocer los diferentes algoritmos e invertir un buen tiempo probando cosas distintas. Mucha gente está creando distintos modelos, ya sea para practicar, para investigar o con otros objetivos.

Algunos de estos modelos son liberados por sus creadores, como el que nos ocupa hoy:

DeOldify es un proyecto basado en Deep Learning para colorear y restaurar imágenes antiguas. Su creador (Jason Antic) lo liberó bajo licencia MIT, lo cual nos permitirá hacer casi cualquier cosa con él.

Por tanto, para conseguir nuestro objetivo de hoy, que no es ni más ni menos que colorear las fotos antiguas de nuestros abuelos que tengamos por casa, podremos hacer uso de este proyecto.

Pero ¡ojo! También podríamos usarlo para montar un servicio online de coloreado automático de imágenes antiguas a razón de euro cada una, o para colorear las imágenes captadas por una cámara de visión nocturna (de las baratas que se ven en verde y negro).

¿Qué podemos esperar de esta Inteligencia Artificial?

En mis pruebas, que podéis ver en la foto de cabecera o en el mini-hilo que parte del siguiente twit, podéis ver los resultados con algunas fotos muy distintas. Probablemente, trabajando un poco sobre el modelo para afinar algunos puntos o incluso reentrenándolo (siguiendo los pasos de Jason) con imágenes similares a sobre las cuales queremos aplicar el modelo, podríamos obtener resultados mejores aún.

¿Cómo podemos usar esta Inteligencia Artificial?

Cuando estuve haciendo mis pruebas (hace un mes aprox.), y dado que quería jugar mucho, opté por instalar todo lo necesario en mi máquina. En ese momento no es algo que habría aconsejado porque no era trivial, pero ahora parece que con unas pocas instrucciones lo puedes tener funcionando en cualquier lado. ¡Ojo! No las he probado, pero Jason dice que en su ordenador funciona ;).

git clone https://github.com/jantic/DeOldify.git DeOldify
cd DeOldify
conda env create -f environment.yml

#Then run it with this:

source activate deoldify
jupyter lab

Sin embargo hay un modo mucho más sencillo y es ejecutarlo online partiendo del notebook subido a la plataforma de Google Colab.  Ten en cuenta que es una plataforma que no está pulida del todo y que no siempre funciona bien, por lo que si no te funciona a la primera: no te desesperes.

Los pasos serían:
  1. Visita la url.
  2. Abajo, donde ves las fotos de Lincoln y demás, cambia los links de los wget por links a las fotos que quieras (tienen que estar en internet en una url accesible a cualquiera, por ejemplo puedes compartirlas mediante un enlace de Google Drive). Si lo necesitases podrías copiar más bloques para procesar más fotos: un wget y un vis.plot_transformed_image por imagen.
  3. Ejecuta la opción de menú Runtime>Run all.
  4. Cuando el script llegue a la mitad (al bloque de auth.authenticate_user…) te pedirá que sigas un link y copies un código para autenticarte con una cuenta de Google. Esto es porque necesita descargarse los pesos que se han obtenido en los entrenamientos del modelo para que la red neuronal pueda usarlos con las nuevas fotos, cuando te lo instalas en tu equipo es un paso que se puede saltar, pero con este script de Colab es necesario.
  5. Espera a que procese las imágenes.
  6. Comparte conmigo tus resultados ya sea con un comentario, un twit o lo que veas.

Con estos pasos tan sencillos, obtendrás unas imágenes antiguas que antes sólo tenías en blanco y negro, coloreadas por una Inteligencia Artificial. Cuando tu familia te pregunte como lo has hecho, puedes hablarles de Inteligencia Artificial, Deep Learning, etc. o bien puedes usar el comodín de «magia de informático».

La falacia de la protección de datos

Hablando de protección de datos hay muchas cosas que no funcionan y que podríamos tratar: desde la manipulación para que aceptes cookies, a la delegación de la agencia de protección de datos en las entidades para cumplir o no tras la aparición de la GDPR. Sin embargo, hoy vamos a ver un caso muy concreto y real de como se manejan datos que deberían tener la protección más alta según la «antigua» LOPD. Hoy hablaremos de como se gestionan los datos sanitarios por entidades de nuestro país.

Cuando trabajas en multinacionales, es típico que parte de tu salario sea un seguro médico privado. En mi caso tenía un seguro médico de Sanitas, que decidí mantener cuando dejé de trabajar para aquellas ya que viajo de un lado para otro y es complicado que te atiendan en centros públicos cuando no estás en casa.

Tras un tiempo y ver que no me daban el servicio que en mi opinión cabría esperar, decidí darme de baja. Me pareció importante tener una copia de todas las pruebas e informes de consultas que hubiese tenido con ellos, por si en el futuro la pudiese necesitar, así que haciendo uso del derecho de acceso (pág. 19) me dispuse a consultar a Sanitas y aquí es donde comienza la odisea.

Para empezar, Sanitas no es una única empresa, son varias con lo cual no es trivial saber a quien tienes que preguntar. Para esto yo tiré del contrato, pues el seguro estaba firmado sólo con una empresa (Sanitas S.A. de Seguros).

Les solicité todo lo que indica la guía del ciudadano y estos me remitieron toda esa información, pero mi sorpresa llegó cuando en los datos no encuentro ni un sólo dato médico. Me informan de que ellos sólo se encargan de cobrar y me pasan un listado con las facturaciones indicándome que tengo que remitirme a esas empresas (que en la mayoría de los casos llevan la palabra «Sanitas» en su nombre legal o comercial).

Preocupante que no estuviese ninguno de los informes a los que tenía acceso a traves de su web, pero decidí no pelearme ya que habría que ver de quién es la web y cómo está todo programado para ver quien toca los datos en cada momento y en especial cuando no están cifrados. Iba a ser una pelea muy ardua.

Aunque en ese listado sé que falta alguna (no he ido en ese periodo tanto al médico como para no saber a dónde he ido, presupongo que es debido a que con alguna entidad tienen convenios tales que no precisan facturarse), decido ponerme en contacto con estas haciendo uso del mismo derecho de acceso con el mismo tipo de comunicación:

  • IGUALATORIO MÉDICOQUIRÚRGICO COLEGIAL, S.A. DE SEGUROS
  • IDCQ Hospitales y Sanidad, S.L.U.
  • SANITAS, S.A. DE HOSPITALES
  • SANITAS NUEVOS NEGOCIOS SL
  • DENTAL SANTA MARÍA DE LA CABEZA, S.L.
  • INSTITUTO ANTIASMÁTICO CENTRO ALERGOLÓGICO, SL

Aquí cada uno ha hecho lo que le ha dado la gana. No voy a entrar en qué ha hecho quién, o qué cosas están mal RGPD en mano, pero os plantearé algunas anécdotas para que veais que todo es un chiste de muy mal gusto y que nuestros derechos, aunque muy bonitos en el papel, en la práctica no sirven siempre.

  1. Sólo uno me informa de la finalidad, destinatarios, derechos, etc. El resto sólo me proporcionan la historia (si llega).
  2. Hubo uno que me remitió una nota manuscrita diciendo que no tenía ningún dato mío. Mal, sea mentira o sea verdad.
  3. Dos me mandaron los datos en un cd, que poniéndonos pejigueros podríamos considerar que en 2018 ya no es un medio común y de uso general.
  4. Dos me hicieron personarme para obtener mis datos.
  5. Uno se lió y en lugar de una copia me dió el original, y como son tan cutres que reutilizan material, tengo en mi poder datos de una paciente que pasó consulta hace unos años.
  6. De uno conozco sus sistemas (porque parte los programé yo), y no me proporcionaron todos los datos de los que disponían.

Podría haber quien diga que me ponga en contacto con la agencia de protección de datos para denunciarlo, pero la experiencia (la mía, que otros tendrán otra) me dice que es un movimiento que no sirve de nada. Además que tengo casi todo lo que quería y mucho más de lo que pensaba que obtendría cuando empecé (hace meses).

En resumen. El papel dice que tenemos unos derechos sobre nuestros datos, pero aquí tenemos un claro ejemplo de que no es del todo cierto, una falacia. Las empresas, que aquí son el fuerte mientras los consumidores somos los débiles, hacen lo que quieren esperando que nadie se quiera engarrar y si llega alguno preguntando ni se molestan en intentar hacer las cosas medio bien.

Si eres una empresa, mi consejo: no te desentiendas de la gestión de datos y la privacidad, puede parecer trivial, pero en realidad es vital.

Si eres un cliente, mi consejo: haz uso de tus derechos y solicita siempre una copia de tus datos importantes, les tendrás a buen recaudo y cuantos más lo hagamos más fácil será que se pongan las pilas y estandaricen el procedimiento.

Las 3 leyes de la deontología informática

  1. f. Parte de la ética que trata de los deberes, especialmente de los que rigen una actividad profesional.
  2. f. Conjunto de deberes relacionados con el ejercicio de una determinada profesión.

Recientemente nos hemos topado con noticias que tal vez no llamen mucho la atención de primeras, pero para los que estamos en el “mundillo del metal” (que diría Bonilla) creo que sí lo son. Hemos visto como compañeros tecnólogos se han revelado en las grandes empresas: en Google, en Amazon y ahora en Microsoft; para presionarlas y que dejen de hacer cosas que no les parecen éticas.

La ética es un tema muy subjetivo. He tenido la suerte de poder estudiarla desde pequeñito, lo que me ha hecho tener la creencia de que no se debe juzgar a nadie sin estar en su pellejo. Puedes ser crítico, puedes opinar distinto, incluso puedes ser radical y oponerte de manera activa a lo que sea, pero no hay una distinción absoluta entre el bien y el mal y por lo tanto las circunstancias de cada uno van a afectar mucho a su toma de decisiones.

Supongo que muchos hemos vivido algún caso en el que se nos planteaba una cuestión ética, que normalmente pasa por “hacer lo que me mandan o hacer lo que está bien”.

Mi caso (más grave) ya lo conté en Twitter hace unos meses, a raíz del “amago” (que me alegro enormemente de que finalmente no se materializase) de extradición de Falciani:

En resumen, me pidieron que ocultase unos datos de una empresa (pública) porque le iban a hacer una auditoría. Me negué y un compañero lo hizo. No estoy de acuerdo con las acciones de mi jefe por aquel entonces ni del compañero que las ejecutó, pero no les juzgaré a ellos pues sólo estoy en situación de juzgarme a mi.

Creo firmemente que debemos ser cuidadosos con lo que hacemos y que debemos actuar siempre en conciencia de lo que creemos que está bien. Nuestras acciones tienen efectos y hoy en día, la informática otorga mucha capacidad a los que la controlan. Además, la gente que trabajamos en tecnología tenemos la suerte de que hoy por hoy, podemos elegir nuestro trabajo pues la demanda de profesionales es altísima. Todo esto nos da un gran poder y como todos los amantes de Spiderman saben: un gran poder conlleva una gran responsabilidad.

Pero bueno, hablar del bien y del mal es muy fácil y “gratuito”, es mejor hablar de cosas concretas. Miremos, por ejemplo, el código deontológico de los ingenieros informáticos colegiados en el Colegio Profesional de Ingenieros en Informática de Andalucía. No os miento si os digo que no conozco a ni un sólo informático que no haya incumplido alguna de las normas «básicas» que ahí se establecen. Yo el primero de todos, que quede claro. ¿Y vosotros? ¿Las habéis cumplido todas siempre? ¿A rajatabla? ¿Y la gente que conocéis? Me apostaría una caña a que haciendo memoria alguna ocasión se os ocurre.

Probáblemente, que nadie cumpla dicha deontología quiere decir que lo que esta marca difiere mucho de lo que la mayoría cree que es ético o no y es que, como decía al principio, la ética es un tema muy subjetivo.

Además, aún con sus 8 páginas de normas, creo que la mencionada deontología se deja cosas en el tintero porque por ejemplo no tendría ningún tipo de aplicación en los casos que vimos al principio de Google, Amazon y Microsoft.

Quienes conocemos las 3 leyes de la robótica, sabemos que es mejor tener poca cantidad de normas suficientemente generalistas que nos permitan aplicarlas en cada caso. También es cierto que si habéis leído a Asimov sabréis que surgen excepciones constantemente que provocan que te cuestiones si esas leyes son correctas, pero en la gran mayoría de los casos funcionan adecuadamente.

De cualquier modo, creo que podemos seguir su ejemplo para tener una deontología informática que sea de aplicación en la mayoría de los casos:

  1. No emplees tus conocimientos y habilidades para hacer algo que te parezca que está mal.
  2. Si gracias a tus conocimientos y habilidades puedes hacer algo por cambiar algo que está mal, hazlo.
  3. En cualquier situación que no esté afectada por los puntos 1 y 2 intenta hacer el mejor trabajo que puedas con los recursos a tu alcance.

Creo que siguiendo estas tres “leyes” la evaluación de cada situación se puede simplificar bastante. Los dos primeros son egoístas ya que, aunque ayudarían a que devolvamos a la sociedad un poquito de lo que nos da, también nos ayudarán a dormir mejor por la noche. El último, aunque pueda parecer el más obvio, también hay que tenerlo muy en cuenta para que no se nos olvide hacer siempre el mejor trabajo posible.

¿Cómo lo véis? ¿Estás sí que podéis decir que las habéis cumplido siempre?

¿Cómo conseguir la verdadera web abierta?

La web abierta es algo que preocupa a mucha gente desde hace bastante tiempo. Los gobiernos y grandes corporaciones monopolizan el control sobre la WWW, sobre sus contenidos, sobre sus tecnologías, sobre servicios vitales para su funcionamiento… Hay alertas que nos dicen que vamos camino a una distopía, o que incluso ya estamos en ella. ¿Cómo podemos evitarlo? ¿Cómo podemos conseguir la verdader web abierta?

No me voy a meter en grandes definiciones, ya hay otros que definen lo que és la web abierta de un modo más o menos acertado, pero para marcar un poco la línea decir que la web abierta es que la gente tenga el poder sobre la web, que tengan el control sobre sus propios contenidos para dejar acceder a todo el que ellos quieran.

Hay muchos elementos a tener en cuenta, de cara a la web abierta. Están las tecnologías a emplear, está la posibilidad de buscar la información (las búsquedas), está el acceso al contenido en sí… y son muchos los factores a tener en cuenta en cada uno de estos puntos.

Por ejemplo, el W3C (World Wide Web Consortium) tiene un pequeño wiki sobre «open web platform» en el que especifica algunas tecnologías que son completamente libres, y que sirven de base para tener una web abierta. Son las mínimas, pero no todo el mundo puede saber de todas ellas para controlar su propio contenido.

Puede que parezca un nuevo miedo, el hecho de que preocupe que la gente deje de tener el control. Sin embargo, dándole la vuelta (pasando del miedo de que quiten el control a la gente, al deseo de que lo tenga), ya en los comienzos de la Web su inventor, Tim Berners Lee, insistió mucho (sin éxito) a los desarrolladores de navegadores web de la época con que los navegadores también debían ser herramientas para que los usuarios pudiesen editar documentos, editar la web. Fue ignorado como el típico loco pesado que no sabe lo que dice, porque «¿por qué iban los usuarios querer crear sus propias páginas web? ¿Por qué iban a querer crear contenidos?«.

Respecto a este tema, la semana pasada tuve la suerte de poder (volver a) asistir al Ignite Madrid, y entre otras charlas muy interesantes pude escuchar la de Luis Roig (alias Darum) en la que advertía que «nos han robado Internet». No haré muchos spoilers pues en breves saldrá la versión en vídeo (gallifante para el primero que lo enlace en los comentarios cuando salga), pero os diré que en 5 minutos hizo un breve e impactante repaso a la historia de la Web, defendió la web abierta y planteó el futuro que viene.

Puede que os preguntéis cuál es ese porqué que debería de haceros mover incómodos en vuestra silla. A fin de cuentas ya podéis publicar lo que queráis en miles de sitios: Facebook, Twitter, Instagram, Snapchat, … y siempre, a las malas, podréis decir lo que queráis en todos esos grupos de WhatsApp.

Voy a delegar en mi exsocio y amigo, Juan, que es un fiel defensor de la web abierta y que ya explicó en la WordCamp Madrid de 2017 «¿por qué defender la web abierta?».




Justo esta semana, me ha llegado uno de los motivos de preocupación: hace años me autoedité un libro (#yuzzsfo Descubriendo Silicon Valley) y lo publiqué en Bubok para que el que quisiera pudiese descargárselo o tener una edición impresa (que me alegro de que nadie comprase, realmente). Esta semana me dieron el aviso de que para descargar el libro ahora hay que «pagar» dando una dirección de email a cambio. Acto seguido lo descargué, lo subí a un repositorio de archivos «propio» (Google Drive), y cree un enlace de bit.ly (por medir y saber cuantas descargas tengo que sumar a las 768 que tiene en Bubok).

Así que «ya está», tomé el control de mis contenidos y puse mi granito de arena para la web abierta… ¿seguro?

Hay mucha gente que me dirá que esto no es ningún ejemplo de web abierta. He puesto mi archivo en manos de un gigante al que le importo cero (Google), y he direccionado el tráfico a él a través de un tercero que podría cambiar el destino de la navegación de los usuarios-consumidores sin yo enterarme.

Entonces, ¿cómo es la verdadera web abierta?

El tener tu propia página puede ser web abierta. Pero por ejemplo, esta página que leéis está alojada y mantenida por el mencionado Juan por lo que yo no tengo un control total, ya que yo no tengo acceso a su proveedor de hosting. Él tampoco tiene un control total, puesto que su proveedor de hosting puede cortarle el acceso en cualquier momento.

Podría montarme una granja de servidores en casa como tiene mi amigo Inda, pero ¿bastaría con esto? Mi proveedor de Internet podría cortarme la línea, o el ayuntamiento decidir que ya no quiere que pasen cables de fibra por sus calles. Podría alguien manipular los servidores de DNS (que es el eslabón más débil de toda la arquitectura de la web, aunque eso es otra historia que deberá ser contada en otro momento) y evitar que se pudiese acceder a mi contenido más que por IP. O aún teniendo yo todo el control de mis cosas, podría ser que por el lado de los usuarios-consumidores les aplicasen restricciones similares que les impidiese llegar a mis contenidos ¿y entonces de qué serviría que yo tuviese el control sobre ellos?

La verdadera web abierta es una utopía (EMHO) que, a día de hoy, como tal es imposible alcanzar. Igual que en el trabajo en el que delegamos responsabilidades en compañeros o en la vida en la que delegamos decisiones en gobiernos, estamos obligados a delegar parte del control sobre la Web.

Debemos elegir con sabiduría que publicamos en Facebook y que en nuestra propia web. Debemos elegir si el servicio X me provee extras suficientes y me da una confianza tal como para que tenga sentido ponerme en sus manos.

Ahora bien, como con los compañeros o los gobiernos, en todo momento deberemos estar atentos a cualquier alerta para tomar medidas si hay un cambio que modifique nuestra confianza.

Chatbots (III): La magia de crear chatbots sin abrir Visual Studio gracias a FormFlow

Los chatbots, las interfaces conversacionales, que empezaron a estar de moda hace un par de años resultan muy divertidos, pero no siempre son útiles. Requiere bastante esfuerzo diseñar una conversación teniendo en cuenta todas las opciones de respuesta que pueden plantear los usuarios. Pero: ¿es necesario controlar todas las posibles entradas para realizar una tarea de negocio? En la mayoría de las aplicaciones, la respuesta es un rotundo “no”. Si así fuese, no se basarían la mayoría de apps en formularios para recoger datos con los que hacer algo.

Seguir leyendo en CompartiMOSS.

Chatbots (II): Cómo lograr que tu móvil te lea Hacker News (los contenidos también)

Siguiendo con la serie sobre Chatbots, he preparado un programilla para que Google Assistant te permita navegar usando la voz por Hacker News (el foro de Y Combinator dedicado a noticias de tecnología) y escuchar el cuerpo de las noticias que más te interesen.

[In English]

Si sólo quieres usarla basta con que le digas a Google «Talk to Hacker News Reader«. Sin embargo, si quieres conocer los puntos clave para poder hacer algo similar en pocas horas y con muy poco código sigue leyendo, porque vamos a ver 6 características humanas muy fáciles de obtener gracias a Dialogflow.

Dialogflow es una plataforma de Google (antes conocida como API.ai), que nos permite diseñar chatbots de un modo sencillo.

Es tan potente, que se pueden hacer muchísimas cosas sin tirar una sóla línea de código.

Por ejemplo, tiene integrado un sistema de reconocimiento de lenguaje natural el que, dándole unos cuantos ejemplos para que entrene, será capaz de reconocer lo que quieren decir los usuarios de nuestra acción y conducirles por las partes de nuestro chatbot para que obtengan la respuesta adecuada.

Por tanto, nos permitirá dar a nuestro chatbot de capacidades «humanas» de un modo muy simple.

1. Escucha

Los intents son el componente principal de un chatbot en Dialogflow. Lo podemos ver como cada unidad de conversación, es cada parte que nuestro sistema va a ser capaz de comprender y dar una respuesta.

Dialogflow nos permite indicar eventos y otras cosas que lanzarán ese intent, y en especial, nos permite indicar distintas frases que le sirvan de guía al chatbot, para que cuando las detecte sepa qué es ese y no otro el que tiene que lanzar.

También permite indicar directamente respuestas ahí mismo, que se irán lanzando aleatoriamente sin que tú tengas que programar nada.

2. Entendimiento

Que el chatbot pueda, sin que programemos nada, distinguir unas frases de otras es genial, pero le falta algo de poder. Al final, no sólo es importante escuchar las frases si no que también hay que entender los conceptos que están encerrados en ellas.

Al introducir las frases de ejemplo, tenemos la posibilidad de seleccionar partes del texto para decirle que es algo importante que debería abstraer y entender más allá de la muestra concreta.

Cuando el motor de reconocimiento del lenguaje entienda alguna de las entidades que hayamos mapeado a variables, las extraerá y nos las pasará como parámetros en las peticiones que nos diga que tenemos que procesar.

El sistema viene ya preparado para entender muchas cosas por defecto, pero nos da la libertad de definir nuestras propias entidades que nos ayuden a modelar exactamente lo que queremos. Por ejemplo, yo me he creado una entidad con los distintos apartados de noticias de Hacker News que se pueden leer: top, new, best, ask, show y job. Así el sistema puede entender que un usuario quiere que le lean los trabajos subidos a la plataforma o las últimas noticias.

3. Inteligencia

Cuando las opciones de respuesta de los intents no son suficientes, podemos crear nuestro propio servicio web que conteste a las peticiones que haya entendido el sistema.

Con las librerías que ofrece Google es fácil montar un servicio en cualquier lenguaje y plataforma. Sin embargo, para cosas pequeñas como el Hacker News Reader, nos permite codificar directamente sobre la plataforma código en node.js que será desplegado de manera transparente para nosotros en Firebase.

Cuando penséis en las cosas que podéis hacer, daros cuenta de que tirando de un servicio (en Firebase o dónde queráis) no estaréis ejecutando código en cliente, por lo que podéis hacer literalmente todo.

Por ejemplo, no os tenéis que ceñir a usar APIs para acceder a contenidos, pues no hay restricciones de cross origin que se apliquen a vuestro código. Tenéis todo Internet a vuestro alcance de un modo sencillísimo.

Mi acción permite al usuario escuchar las noticias que están linkadas desde Hacker News. Para esto se descarga la web (como si fuese un navegador) y la procesa para extraer el contenido (no me he esmerado mucho y se podría hacer mucho mejor).

4. Análisis

Para usar el editor inline, tendremos que tener algunas restricciones como que por narices nuestra función deberá llamarse «dialogflowFirebaseFulfillment» si queremos que se despliegue automáticamente y funcione todo bien.

Sin embargo, gracias a que Dialogflow escucha y entiende, al dotar de inteligencia a nuestro chatbot lo tendremos muy fácil para que sea capaz de realizar los análisis pertinentes de cada petición del usuario.

En el código podremos de un modo sencillo mapear cada uno de los intents que hayamos creado con funciones nuestras. Como estos se encargaban de escuchar, nos indicarán lo que el usuario quiere.

También podremos acceder a los parámetros que el sistema haya entendido gracias a las entidades que hayamos creado (entender).

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    const agent = new WebhookClient({
        request,
        response
    });
    //...

    function read(agent) {
        var number = agent.parameters.number || 0;
        //...
    }

    let intentMap = new Map();
    intentMap.set('Default Welcome Intent', welcome);
    intentMap.set('Repeat', repeat);
    intentMap.set('Back', repeat);
    intentMap.set('Read', read);
    //...
    var promise = null;
    try {
        promise = agent.handleRequest(intentMap).then(function() {
            log('all done');
        }).catch(manageError);
    } catch (e) {
        manageError(e);
    }
    return promise;
});

5. Respuesta

Para que nuestro chatbot conteste, tan solo tenemos que hacer uso del método add de nuestro WebhookClient. Podremos pasarle directamente texto, sugerencias de respuesta para guiar al usuario o fichas con texto enriquecido en dónde podremos embeber imágenes, poner emoticonos, etc.

Hay que tener en cuenta que algunos de los dispositivos en los que potencialmente correrá nuestra aplicación pueden que no tengan pantalla o navegador web por ejemplo. Por lo que hay que tener en cuenta que, si queremos algo puramente conversacional, deberíamos evitar los estímulos visuales y ayudar a nuestro bot a expresarse sólo con el uso de la palabra.

6. Recuerdo

Una de las cosas que más nos exasperan a todos es tener que repetir las cosas una y otra vez, por lo que es importante que nuestro bot recuerde lo que ya se le haya dicho.

Para esto usaremos los contextos. Los contextos es una estructura que maneja Dialogflow para ayudarnos a filtrar entre intents y permitir a la plataforma lanzar el adecuado. Se pueden usar, por ejemplo, para saber si el dispositivo del cliente tiene pantalla.

Su uso no está muy documentado, pero una vez que ves como funcionan los dos métodos básicos, es trivial su uso para guardar información entre cada frase de una conversación.

    //...
    var context = agent.getContext('vars');
    var vars = context ? context.parameters : {
        ts: (new Date()).getTime() % 10000,
        items: [],
        pointer: 0,
        list: 0,
        //...
    };
    //...
    agent.setContext({
        name: 'vars',
        lifespan: 1000,
        'parameters': vars
    });
    //...

Con estas 6 capacidades humanas ya tenéis las claves para poder hacer algo similar vosotros mismos y dar mucha más funcionalidad a Google Assistant.

Espero que os resulte útil, tanto la acción en sí como la información extra. Si es así compartidlo y difundid la palabra.

Seguiremos con algunos otros sistemas que nos permiten también hacer chatbots de un modo sencillo, y con cómo integrar nuestros bots en distintas plataformas.

Chatbots (I): Crea una app para hablar con tu móvil sin programar nada

Comienza hoy una serie de posts relacionados con los chatbots, con una dirección y sentido pero sin saber muy bien a dónde llegaremos.

En el de hoy vamos a ver un modo supersencillo de crear una aplicación que te permita hablar (en plan chat o usando la voz) con tu móvil sin programar nada, ¡ni una sóla línea de código!

[In English]

Muchos, habréis usado ya Google Assistant. El «Siri» de Google al que accedías en terminales Android diciendo «Ok, Google».

Ahora ya no está sólo en teléfonos Android, se puede disfrutar de su ayuda en los terminales con iOS, en los Google Home, smart watches, en coches, televisores, etc.

Por cierto, decir que Google  (por el programa de recompensas del que os hablé hace un par de meses) me mandó un mail indicándome que me va a regalar un Google Home por una aplicación que hice siguiendo este método, empleando tan solo unas pocas horas. ¿Queréis hacer lo mismo?

Cuando vais a la consola de actions (que así se llaman las aplicaciones para el asistente), al añadir un nuevo proyecto, Google te da varias opciones. Puedes programártelo todo contra una API, puedes usar una plataforma avanzada en la que puedes programar pero que te da muchas cosas hechas (se llama DialogFlow), o puedes usar una de las tres plantillas que tiene.

Como veis en la imagen previa hay 3 plantillas distintas:

  1. Trivia. Es una plantilla que te permite crear un juego de preguntas y respuestas. Por cada pregunta te permite aportar distintas respuestas e incluso sinónimos a las respuestas. Esta plantilla está preparada para cargar contenidos en Inglés, Francés, Alemán y Japonés.
  2. Personality Quiz. Es una plantilla preparada para crear tests de personalidad. Por ejemplo, podríais crear uno como el que usó Cambridge Analítica (la del follón con Facebook) para captar datos de millones de estadounidenses e influir en sus elecciones. Esta, por el momento, sólo se puede usar para crear contenido en inglés.
  3. Flash Cards. Es una plantilla que por el momento sólo permite crear apps en inglés, y que busca que se cree un juego educativo para aprender sobre cosas.

En el primer paso (salvo en la segunda que no dispones por el momento de esta opción), has de elegir el tipo de personalidad. Esto es principalmente elegir si quieres una voz de mujer, hombre o robot. La elección también influirá en el acento, expresiones y efectos de sonido que empleará tu aplicación.

En el segundo paso, el de contenido, es importante que os copieis la plantilla de Google Sheet que os ofrece, ya que si creais una vosotros desde cero, es muy fácil que no cumpláis con todas las validaciones que se realizarán después.

En la plantilla podéis cambiar cuanto queráis para adaptarla a vuestro contenido, pero es muy importante que en la segunda hoja (que está pensada para que introduzcáis varios parámetros de configuración) cambieis el título de vuestra aplicación, para no entrar en conflicto con otras aplicaciones que se hayan creado antes.

Una vez que hayáis seguido este wizard (el formulario que te guía paso a paso por un proceso, para los ajenos al mundo del diseño y desarrollo de aplicaciones), tan sólo tendréis que seguir el de Overview para indicar cómo se debe invocar a vuestra aplicación, poner descripciones e iconos, etc. etc.

Con esto hecho, ya estaréis preparados para mandar vuestra aplicación a validación y que una vez que sea aprobada, vuestros usuarios puedan decirle a su móvil «Talk to …» y que empiece la magia.