marzo 6, 2022

Ensayo: Conector personalizado con Telegram en Power Platform (II)

En esta segunda parte, voy a centrarme en enseñar como utilizar nuestro conector personalizado de Telegram con Power Automate.

Ensayo: Conector personalizado con Telegram en Power Platform (II)

Primero de todo agradecer el interés que esta generando cada publicación del blog. Es muy reconfortante recibir feedback de todos los lectores que semanalmente se pasan por aquí para ver lo que hago.

En la primera parte del ensayo veíamos como crear un conector personalizado en Telegram. En esta segunda parte, voy a centrarme en enseñar como utilizar dicho conector con Power Automate.

Power Automate de tipo HTTP

Para poder recibir los eventos que el BOT de Telegram nos envía a través de sus webhooks, deberemos crear un Power Automate de tipo HTTP. Si buscamos el desencadenador en la lista, no aparece. Podemos seleccionar cualquiera y luego cambiarlo desde el editor de flujo:

Cambiando el trigger y guardando el flujo, ya estaremos en disposición de poder utilizar Power Automate como una dirección HTTP donde enviar solicitudes de tipo POST.

Continuaremos con este Power Automate mas adelante. De momento, nos guardaremos la URL generada.

Power Automate para realizar el SetWebHook

Este paso pese a ser realmente sencillo, resulta clave. Para hacer esto lo podríamos hacer desde una herramienta tipo POSTMAN, pero para que quede todo en "casa" (en la Power Platform) realizaremos la acción de setWebHook con Power Automate. Para ello, crearemos un flujo manual y utilizaremos el conector personalizado creado en ENSAYO: CONECTOR PERSONALIZADO CON TELEGRAM EN POWER PLATFORM (I) Para no estar escribiendo todo el rato el token de autenticación que nos proporcionó el @botfather de Telegram, guardaremos el valor en una variable de entorno, que utilizaremos en todos nuestros métodos en el campo my_bot_token. En el campo URL escribiremos la URL generada en el apartado anterior.

Una vez ejecutemos este flujo por primera vez, conseguiremos que todos los eventos de nuestro BOT de Telegram sean enviados automáticamente a la URL especificada.

Power Automate de análisis de razas de perro

Y por fin llegamos a la parte final. Nos dirigimos nuevamente al primer Power Automate (el de tipo HTTP). Dado que este Power Automate ya esta preparado para recibir imágenes, los siguientes pasos serán muy sencillos. La visión general del flujo es la siguiente:

Para hacer mas fácil el ensayo (os lo doy mascado), voy a utilizar Análisis de JSON para que no perdáis tiempo analizando las respuestas de Telegram y podáis probar esta implementación. Hay que remarcar que esta implementación solo funciona para imágenes sin comprimir. Las imágenes comprimidas de Telegram vendrán troceadas y por lo tanto haría que realizar algun tipo de operación para volver a juntarlas. Aclarado esto, comparto el primer esquema JSON.

{"type":"object","properties":{"update_id":{"type":"integer"},"message":{"type":"object","properties":{"message_id":{"type":"integer"},"from":{"type":"object","properties":{"id":{"type":"integer"},"is_bot":{"type":"boolean"},"first_name":{"type":"string"},"language_code":{"type":"string"}}},"chat":{"type":"object","properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"type":{"type":"string"}}},"date":{"type":"integer"},"document":{"type":"object","properties":{"file_name":{"type":"string"},"mime_type":{"type":"string"},"thumb":{"type":"object","properties":{"file_id":{"type":"string"},"file_unique_id":{"type":"string"},"file_size":{"type":"integer"},"width":{"type":"integer"},"height":{"type":"integer"}}},"file_id":{"type":"string"},"file_unique_id":{"type":"string"},"file_size":{"type":"integer"}}}}}}}

Copiando este JSON en la parte de Esquema, podremos disponer de los elementos que nos esta devolviendo Telegram.

Con el método getFile nos traemos el identificador de la imagen que nos han pasado a través del chat. El elemento file_id tiene la siguiente expresión

body('Análisis_del_archivo_JSON')?['message']?['document']?['file_id']

Como se trata de un ensaño no tiene control de errores como por ejemplo que si no nos envían una foto, no tendremos el elemento file_id.

Una vez recibimos el identificador de la imagen, analizamos nuevamente la respuesta y en Esquema utilizamos el siguiente JSON:

{"type":"object","properties":{"ok":{"type":"boolean"},"result":{"type":"object","properties":{"file_id":{"type":"string"},"file_unique_id":{"type":"string"},"file_size":{"type":"integer"},"file_path":{"type":"string"}}}}}

Una vez tenemos el identificador de la imagen, almacenada en algun sitio de Telegram, utilizaremos el método downloadFile. La expresión para file_path es la siguiente:

body('Análisis_del_archivo_JSON_2')?['result']?['file_path']

En este punto tenemos la imagen en base64. Por lo tanto ya estamos en disposición de utilizar el modelo de detección de razas de perro explicado en el ensayo ENSAYO: APLICANDO EL MODELO DE CLASIFICACIÓN SUPERVISADO EN POWER APPS. Utilizando los modelos personalizados de AI Builder seleccionaremos el de Razas de perro. En cuanto a la imagen,  es importante que se la demos en formato binario. Por lo que deberemos hacer una conversión con la siguiente fórmula:

base64ToBinary(outputs('downloadFile')?['body']['$content'])

Hecho esto, ya solo nos quedará enviar el mensaje de vuelta. En chat id, colocaremos el id de la conversación que hemos recibido en primer momento por el conector HTTP:

body('Análisis_del_archivo_JSON')?['message']?['chat']?['id']

Y en el campo text colocaremos el campo Prediction procedente del modelo de AI Builder para devolver el resultado de la detección de razas de perro.

Resultado final

De la misma manera que nuestra aplicación hecha en Power Apps era capaz de reconocer razas de perro, mediante el modelo que habíamos fabricado con Lobe, este pequeño Bot de Telegram, tiene exactamente las mismas capacidades, ya que comparten el mismo modelo de inteligencia artificial.

Esta es solo una de las muchas maneras que podemos interconectar varios elementos de la Power Platform. Se trata de una plataforma tan elástica, que mediante conectores personalizados podemos abrir todavía mas las posibilidades de construir casi cualquier cosa que se nos ocurra.

Espero que os haya gustado el ensayo.

¡Pronto mas y mejor!