Usando Servicios Cognitivos de traducción en Business Central - Business Central

Breaking

domingo, 28 de febrero de 2021

Usando Servicios Cognitivos de traducción en Business Central

nivel: Developer

fecha: 28/02/2021

En la pasada edición NetCoreConf 2021 tuve el placer de exponer en una sesión el uso de los servicios cognitivos dentro de Business Central, pero para los que les gusta más leerlo, aquí os dejo una explicación. Se trata de utilizar el servicio de traducción de Azure para incluir las traducciones de los productos.

Aquí tienes el video por si lo quieres ver: NetCoreConf2021


Servicios Cognitivos de Azure

Los servicios Cognitivos de Azure son recursos que se pueden crear dentro de la suscripción de Azure, que permiten utilizar la Inteligencia Artificial sin necesidad de ser un experto ni de tener que entrenar el modelo.

Estos servicios nos pueden servir para detectar anomalías, análisis de textos, traductores, conversión de textos a lenguaje hablado, visión por computadora,... y todo ello, sin necesidad de programar ni de tener conocimientos de Inteligencia Artificial.


Disponemos de diversos servicios cognitivos listos para usar.  Algunos creados directamente por Microsoft y otros por terceras partes que los podemos encontrar en el Marketplace de Azure.

Servicio de visión por ordenador

Procesamiento del lenguaje

Uno de los servicios cognitivos que encontramos se refiere al procesamiento del lenguaje, que como se puede intuir trata sobre lo relativo a textos y lenguaje hablado, pudiendo:

- Analizar un texto para ver su sentimiento (enfado, felicidad, alegría,...)

- Convertir un texto en lenguaje hablado

- Convertir un audio en texto

- Traducir

En mi caso, voy a usar el servicio de traducción para introducirlo en Business Central.

Traductor de Azure

El traductor es uno de los servicios cognitivos de Azure, empaquetado para ser llamado mediante API REST.

Nos permite la traducción de más de 70 idiomas, simplemente llamando a una API con el texto y el idioma al que lo queremos traducir.


Para crearlo lo buscamos en el marketplace y pulsamos "Crear":

Nos pedirá la suscripción y el grupo de recursos al que queremos añadir nuestro servicio, así como la región donde se instalará (recordad que las regiones son areas geográficas donde Azure tiene Datacenters en el mundo).  Cuanto más cerca estéis de una de esas regiones, menos retraso en las llamadas de las API tendremos y más rápido funcionará.


Para los que piensen que este sistema puede ser caro, indicaros que si elegimos la tarifa F0 disponemos de 2 M de caracteres traducidos al mes gratuitamente.  Para la aplicación que voy a sugerir es suficiente.

Una vez creado, el sistema nos indica el endpoint así como las claves para poder acceder al traductor:


Solamente necesitamos una de las claves, aunque Azure nos suministra dos por seguridad.

Ahora ya puedo usar mi servicio de traducción, llamando a la API desde Postman, desde tu aplicación y por supuesto desde Business Central.

Ejemplo desde Postman:



Respuesta



Una función para llamar al servicio cognitivo de traducción desde Business Central

Lo siguiente que vamos a realizar es llamar al traductor desde Business Central.  Para ello crearé una función que la llame.

La especificación completa de la API la puedes encontrar aquí, pero realmente es muy sencilla y te la voy a explicar con el ejemplo.


La función la creo en una codeunit.  Le paso como parámetros el texto y el idioma al que queremos traducir.  Nos devolverá el texto traducido.

Línea 36: Creamos la url a la que llamaremos:

StrSubstNo('https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=es&to=%1', idiomaTraducido)

https://api.cognitive.microsofttranslator.com/translate?api-version=3.0

Corresponde a la URL que hemos obtenido desde el portal de Azure, así como la función Translate y la versión de la API 

from=es    Corresponde al idioma de origen del texto.  En mi caso he puesto fijo el Español (es)

to=%1        Corresponde al idioma al que traduciremos.  Lo rellenaremos con el parámetro de la función.  (fr para francés, ru para ruso, en para inglés,...).  Puedes ver la lista completa aquí.

Línea 38.  Será el método de la llamada, en este caso POST.

Línea 40.  Corresponde al JSON con el texto a traducir.  

Línea 42.  Cargamos el JSON recibido para traducir, dentro de la variable http que será usada para llamar a la API.

Líneas 43 a 47: Son las cabeceras que incluimos en nuestra llamada:

    - Content-Type: le decimos que estamos mandando un JSON

    - Ocp-Apim-Subscription-Key: La clave generada por el servicio cognitivo en el portal Azure

    - Ocp-Apim-Subscription-Region La región (ubicación) en la que hemos creado nuestro servicio, en nuestro ejemplo 'northeurope'.

Línea 49.  Indicamos que la respuesta será un JSON

Línea 51.  Hacemos la llamada a la API.  

Si todo ha ido correctamente, nos llegará un JSON con el texto traducido que devolveremos en la función.

Como ejemplo para probar, podemos usar un servicio de traducción de textos en Business Central, en la que simplemente llamaremos a la función creada con el texto introducido en el campo "A traducir":


Usando la función en las traducciones de producto de Business Central

Todos conocemos que Business Central tiene una funcionalidad estandar de traducción de las descripciones de los productos.  Ésta hace que cuando un cliente tiene establecido un idioma en su ficha, las descripciones en pedidos, ofertas, facturas,... pueden aparecer en ese idioma.   Pero por mi experiencia, los usuarios comienzan con mucho interés, rellenando todas las traducciones o bien las hacen en la implantación.  Cuando llega el día a día, esto se olvida por diferentes motivos: no siempre la persona que crea el producto conoce las traducciones o se crea rápido para dar un servicio a un cliente.

Para evitar que se olvide, he decidido crear una funcionalidad, que me permita desde una acción de la ficha del producto, crear las traducciones, según los idiomas seleccionados y usando la función previamente desarrollada:


Esta extensión, lo único que hace es llamar a mi función, que a su vez llama al servicio de traducción de Azure.  Guardamos los textos traducidos en la tabla "Item translations" como registros, con cada uno de los idiomas que necesitemos:


Aunque el código de la creación de los registros es muy básico os lo pongo por si acaso:


Esto hará que cada vez que creemos una oferta, un pedido de compra, un pedido de venta, ... para un cliente en uno de nuestros idiomas seleccionados, las descripciones aparezcan en su idioma:


Y lógicamente, también los documentos:


Resumen

He intentado mostrar aquí el uso de uno de los servicios cognitivos de Azure de una manera práctica para mejorar una funcionalidad de Business Central.  Es decir, que veamos el uso cotidiano de la Inteligencia Artificial de una forma práctica, más allá de ver si una cara esta sonriendo o triste.  

Realmente se me ocurren muchas nuevas funcionalidades con el uso de los servicios cognitivos que intentaré ir probando.  Mientrás tanto, cualquier duda me lo comentáis.





No hay comentarios: