Esta es una demostración sencilla usando Google Cloud Functions y Flujos para realizar reconocimiento de imágenes en una imagen enviada por Telegram.
Flujos y Más Allá
Como desarrollador de Flujos, a menudo pienso en quiénes son nuestros usuarios, por qué utilizan Flujos y qué necesitan para alcanzar sus objetivos; y luego, qué características necesitamos implementar para servir mejor a esos usuarios.
Flujos es un potente motor de automatización de arrastrar y soltar para crear flujos de comunicación. Inicialmente lo concebimos como una solución sin código, pero encontramos que muchos usuarios podían obtener un comportamiento realmente poderoso escribiendo algo de código para casos de uso específicos. Estos fragmentos de código pueden estar dentro de Flujos, o pueden ser funciones en la nube de terceros, como funciones de AWS Lambda o Google Cloud Functions.
Un caso de uso interesante: Reconocimiento de Imágenes
Para un ejemplo corto y divertido, te mostraré cómo implementar una aplicación que reconoce perritos calientes. Configuraremos un flujo en Flujos, que recibirá imágenes de los usuarios y decidirá si enviaron un perrito caliente o no.
Para muchos de nuestros clientes, este tipo de reconocimiento de imágenes puede ser muy poderoso. Imagina que diriges un servicio de entrega y querías verificar entregas exitosas automáticamente. Similar a lo que voy a mostrar, podrías usar datos de ubicación, fotos de paquetes e incluso firmas de los destinatarios para crear un flujo de verificación en Flujos.
Un plan para el éxito
Primero, configuraremos una función en la nube, que recibe una solicitud con una URL a una imagen, luego utiliza una API de reconocimiento de imágenes para procesar la imagen, y responde si hay un perrito caliente en la imagen o no.
Luego construiremos un flujo, que recibe un mensaje de un usuario a través de un canal de mensajería (Telegram en este caso), ejecuta la función en la nube de arriba y responde al usuario si hay un perrito caliente en una foto que envió.
Configurando la función de Google Cloud
Primero, necesitaremos configurar una función en la nube. Para empezar rápido, crea una función en la nube usando este tutorial: https://cloud.google.com/functions/docs/quickstart-console. Como 'Trigger' elige el desencadenador HTTP, entorno de ejecución: Node.js 10, y en el campo de código fuente inserta el fragmento de código. Es un código simple, que verifica si la solicitud contiene código JSON y responde sí o no.
A continuación, necesitarás desplegar esta función. Para probarla dentro de Google Cloud Platform, sigue los pasos del tutorial.
Para probar desde tu navegador, ve a la siguiente URL insertando la dirección específica para tu función:
https://tu-dirección-de-función.cloudfunctions.net/HotDogOrNot/?url=hello debería retornar {"isHotDog": true} y la dirección https://tu-dirección-de-función.cloudfunctions.net/HotDogOrNot debería retornar {"isHotDog": false}.
¡Buen trabajo! Configuraste una función de Google Cloud. Ahora necesitamos hacer que nuestra función en la nube sea más inteligente.
Configurando la API de Google Vision
Para hacerlo más inteligente, agreguemos reconocimiento de imágenes. Para este propósito utilizaremos la API de Google Vision. Para comenzar, sigue los pasos 1-4 de este tutorial: https://cloud.google.com/vision/docs/quickstart-client-libraries. En el tutorial activarás la API de Vision y crearás una cuenta de servicio para usarla.
Ahora regresa a la función en la nube que creaste. Activa "Variables de entorno, redes, tiempos de espera y más" y en el archivo "Cuenta de servicio" elige la cuenta de servicio de VisionAPI que acabas de crear. Ahora podemos acceder a la API de Vision dentro de nuestra función.
Ahora cambiemos el código. En la pestaña “Package.json”, inserta este código. Agregará la biblioteca de la API de Google Vision como una dependencia a tu función, y en la pestaña "Index.js" actualiza el código existente con el siguiente fragmento de código.
¿Cuál es la diferencia en comparación con la versión anterior? Agregamos una solicitud a VisionAPI, que devuelve las 'etiquetas' que encontró en la imagen. Luego filtramos estas etiquetas por descripción: si contiene “perrito caliente” y si tiene más del 60% de confianza en esa etiqueta. Si hay al menos 1 etiqueta restante después de filtrar, eso significa que encontramos un perrito caliente en la imagen.
Para entender cómo funciona la API de Google Vision y cómo se ve la respuesta, revisa su documentación, https://cloud.google.com/vision/docs
Después de eso, despliega la nueva versión de nuestra función. Para probarlo desde tu navegador, busca cualquier imagen de un perrito caliente y guarda su URL. Ahora ve a la URL de tu función (insertando la dirección correcta para tu función) https://tu-dirección-de-función.cloudfunctions.net/HotDogOrNot?url=url_a_imagen y reemplaza la "url_a_imagen" con una URL de la imagen encontrada. Si hay un perrito caliente en la imagen, la página devolverá {"isHotDog": true}.
Ahora conectemos esta función a Flow Builder.
Creando un flujo en Flujos
Inicia sesión en el Panel de Bird o regístrate para obtener una cuenta si no tienes una.
Si eres nuevo en Flujos y no tienes ningún canal configurado, necesitarás ir a la página de configuración del canal y elegir configurar el canal de Telegram. Elegí Telegram para esta demostración porque es fácil y rápido de configurar.
Ahora tienes un canal que podemos usar en Flujos. Ve a la página de Flujos, crea un nuevo flujo personalizado y elige el desencadenador del canal "Telegram".
Serás redirigido a una página de flujo, donde deberías elegir tu canal de Telegram como desencadenador, en nuestro caso es “Perrito Caliente”. Por favor, agrega 2 pasos: “Obtener variables” y “Responder al mensaje del canal”.
Dentro del paso “Obtener variables” llamaremos a nuestra función en la nube y recuperaremos la respuesta en la variable “isHotDog” que contendrá “true” o “false” como respuesta de la función de Google Cloud. En el campo de URL por favor inserta la URL de tu función https://tu-dirección-de-función.cloudfunctions.net/HotDogOrNot y completa todos los demás campos como en la imagen del "contenido del paso de Obtener variable".
Y dentro del paso “Responder al mensaje del canal” responderemos al cliente con un mensaje que contenga la respuesta sí o no. Para eso, inserta en el campo "Responder con mensaje" el siguiente texto "¿Perrito caliente en la imagen? {{isHotDog}}".
Si tienes algún problema construyendo el flujo, puedes exportarlo desde el archivo: simple-hotdog-flow.json.
Para probarlo, envía una imagen a tu bot de Telegram.
¡Hasta ahora, se ve genial! Creamos un pequeño chatbot, que verifica las imágenes que los clientes envían. Para hacerlo más bonito, añadamos algunos pasos más como se muestra a continuación:
Si tienes algún problema construyendo el flujo, puedes exportarlo desde el archivo: advanced-hotdog-flow.json.
Resultados
Aunque este es un ejemplo divertido, creemos que este tipo de funcionalidad puede ser muy útil para nuestros usuarios.
Si deseas más características como esta integradas en Flujos, escribe a nuestro equipo de soporte para hacérnoslo saber.