• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
@S/4HANA  ·  #innovation  ·  #mobile  ·  Technical Articles

Cree una notificación de mantenimiento para SAP S/4HANA utilizando IBM Watson y los servicios de SAP

By s4pcademy 


servicio%20ingeniero

caso de uso

Para comprender los beneficios de integrar SAP e IBM Watson, verá un caso de uso.

Un día, mientras un ingeniero de servicio trabajaba afuera, escuchó el ruido de una máquina. Debido a las obstrucciones causadas por las herramientas, fue difícil ingresar un informe de texto largo para repararlo en el sitio web y tuvo que regresar a su oficina. Mientras completaba el formulario, necesitaba encontrar la máquina entre otras en la base de datos y recordar otros detalles, como el estado de mal funcionamiento, lo que podría resultar en una entrada inexacta e insuficiente. En el peor de los casos, podría olvidarse de presentar el informe debido a otro trabajo que debía realizarse. Si hubiera utilizado una aplicación que combinara los servicios de SAP e IBM Watson, la situación hubiera sido diferente.

Proceso principal

La aplicación tiene las siguientes ventajas.

  • Cualquiera puede informar un problema tan pronto como lo descubra.
  • La ubicación se define por geolocalización.
  • No es necesario teclear la descripción del problema (manos libres).
  • El teléfono ayuda a encontrar el objeto técnico correcto.
  • Los problemas se pueden documentar con texto e imágenes.
  • Solo se requiere un teléfono móvil y no una PC de escritorio.

Arquitectura

Arquitectura de Soluciones

SAP Build Apps, anteriormente conocido como SAP AppGyver, es un servicio Low-Code/No-Code (LCNC) que se utiliza como capa de visualización. Kyma es un servicio de orquestación para desarrollar, operar y administrar el tiempo de ejecución de aplicaciones nativas de la nube que se combina con Kubernetes. Ejecuta un paquete Node.js dentro de un contenedor Docker en el clúster de Kubernetes. Node.js consta de tres capas: proxy, aplicación y destino. En la capa de proxy, los datos recibidos de SAP Build Apps se pasan a la capa de la aplicación como punto final de proxy. La capa de aplicación luego implementa la lógica de negocios. Finalmente, la capa de destino actúa como punto final de destino y accede a las API de varios servicios después de recibir datos de la capa de aplicación.

Arquitectura de proxy

Asistente de IBM Watson

IBM Watson Assistant permite conversaciones naturales con computadoras mediante el uso de IA para comprender la intención del mensaje. Esto proporciona una mayor eficiencia y precisión a través del almacenamiento de datos.

El asistente se compone de Acciones y Pasos. Una Acción es una sección de diálogo entre el asistente y el usuario que tiene como objetivo resolver un problema o completar una tarea. En la demostración, «Crear notificación de mantenimiento» es una acción que resuelve un problema, ‘Informar un problema de máquina’. Dado que se pueden crear varias acciones, el asistente debe identificar qué acción desea realizar el usuario diciéndole al asistente un ID de componente en el que se hizo clic.

Comportamiento

Comportamiento

Un Paso se refiere a un solo diálogo entre el asistente y el usuario dentro de una Acción. Los pasos se combinan para resolver un problema y pueden tener funciones como decidir tipos de respuesta, actualizaciones de variables, validación y bifurcación condicional. La bifurcación condicional se puede utilizar para hacer una pregunta al usuario si el asistente no entiende su respuesta, o para determinar si se cambia de una solicitud de notificación de mantenimiento a una de orden de mantenimiento cuando se selecciona «Muy alta» como paso de prioridad de mantenimiento.

Crear%20Pasos%20en%20Acción

Crear pasos en la acción

En este caso de uso, se utilizan dos tipos de respuesta: Opciones y Texto libre. Mientras que la escritura se utiliza en el desarrollo de acciones en IBM Watson Assistant como un valor de texto libre, IBM Watson Speech to Text se utiliza durante el desarrollo de aplicaciones en SAP Build Apps.

El flujo del chatbot se puede probar haciendo clic en el botón Vista previa.

Más detalles

Voz a texto de IBM Watson

IBM Watson Speech to Text reconoce el lenguaje hablado y lo transcribe a texto con un alto grado de precisión. Es compatible con varios tipos de archivos de audio y puede admitir muchos idiomas. Además, el modelo se puede personalizar para satisfacer necesidades específicas para diferentes casos de uso. Además de estas características, el servicio también ofrece diarización de locutores, que puede distinguir entre múltiples locutores. Es particularmente útil para transcribir conversaciones o discusiones entre varias personas.

// src/watson/s2t/target/apis.js
  async convertWavAudio2Text(wav) {
    return await speechToText
      .recognize({
        audio: wav,
        contentType: "audio/wav",
        model: "en-US_BroadbandModel",
        backgroundAudioSuppression: 0.2,
        keywords: [
          "machine",
          "vibration",
          // ...
          "motor",
          "pump",
        ],
        keywordsThreshold: 0.5,
      })
      // ...
  }

Avance: recopilando palabras de uso común desde el módulo de SAP utilizando las API de SAP S/4HANAformateándolos en formatos de datos apropiados, registrándolos como palabras clave y configurando adecuado umbral, se puede mejorar la precisión del reconocimiento de voz.

Partes centrales

Definir clase de paso

SAP Build Apps es una plataforma LCNC construida sobre React Native. Permite la definición de una clase y la creación de la instancia, similar a cualquier lenguaje de programación regular. Crea una clase de paso para un componente de diálogo que incluye una pregunta de la IA y una respuesta del usuario. Dentro de la instancia de Step, la información recibida de IBM Watson Assistant se utiliza para modificar el estilo y otras propiedades del componente.

Proporcionar objetos técnicos candidatos

Al calcular la distancia entre la ubicación actual obtenida a través de SAP Build Apps y la ubicación de cada Objeto Técnico registrado en la base de datos de SAP S/4HANA, el sistema puede generar una lista de objetos candidatos ordenados por proximidad. Gracias a eso, el usuario puede encontrar fácilmente el objeto deseado entre muchos objetos.

// src/watson/assistant/calculateMeters.js
const calculateMeters = (currentLat, currentLon, targetLat, targetLon) => {
  const EARTH_RADIUS = 6371e3;
  const φ1 = (currentLat * Math.PI) / 180;
  const φ2 = (targetLat * Math.PI) / 180;
  const Δφ = ((targetLat - currentLat) * Math.PI) / 180;
  const Δλ = ((targetLon - currentLon) * Math.PI) / 180;

  const a =
    Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
    Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  const metres = Math.round(EARTH_RADIUS * c);
  return metres;
};

Fórmula Haversine se puede utilizar para calcular la distancia entre dos puntos en una esfera. Aunque la Tierra no es una esfera perfecta, el error es insignificante para este caso.

Describir información de texto largo por voz

Al presionar el botón de grabación y explicar la situación verbalmente, el usuario evita largas entradas de texto. Si el texto convertido difiere de lo que realmente se dijo, el usuario puede hacer clic en el icono de volver a grabar e intentarlo de nuevo.

el flujo de trabajo

Tener un tamaño de archivo más grande es una desventaja, aunque permite una mayor calidad de sonido y un tiempo de grabación más largo. Sin embargo, en este caso de uso, las grabaciones rara vez duran más de un minuto. Por lo tanto, es mejor priorizar una alta calidad de audio, ya que la precisión del reconocimiento de voz es fundamental. Al principio, utiliza las funciones Iniciar grabación de audio y Detener grabación de audio de SAP Build Apps. Estas funciones crean un archivo de audio local temporal con una extensión AAC, que luego se puede convertir al formato Base64 usando la función Convertir a Base64 antes de enviarse al proxy.

Los argumentos del inicio de la grabación de audio:

Argumentos de entrada Descripción Valores
Frecuencia de muestreo Frecuencia de muestreo de la grabación, en kHz. 44100
Canales Graba en un canal (mono) o dos (estéreo). 1
Bits por muestra ¿Cuántos bits por muestra deben almacenarse? 24

El código para el proxy se proporciona a continuación.

// src/watson/s2t/application/convertS2T
const { Readable } = require("stream");
const ffmpeg = require("fluent-ffmpeg");

// base64 => buffer => stream => wav
const convertBase64ToWav = (base64) => {
  const buffer = Buffer.from(base64, "base64");
  const stream = Readable.from(buffer);
  const wav = ffmpeg(stream).audioBitrate("1058k").format("wav").stream();
  return wav;
};

Para mantener aún más la calidad del audio y evitar conversiones innecesarias, se recomienda seleccionar una extensión de archivo y una tasa de bits de audio adecuadas. En este caso, debe elegir un archivo WAV, que no es un formato de compresión con pérdida. También es crucial calcular la tasa de bits con precisión para obtener grabaciones de voz de alta calidad. En general, la tasa de bits de audio se puede calcular utilizando la siguiente fórmula:

Tasa de bits de audio = Tasa de muestreo × Canales × Bits por muestra.

El audioBitrate en el código se calcula de esta manera,

1058 (kbps) = 44100 (Hz) × 24 (bits) × 1

Crear solicitud de mantenimiento

Las opciones seleccionadas en SAP Build Apps deben mapearse porque no son valores apropiados para enviar a SAP S/4HANA.

// src/integrationSuite/target/mapping.js
const mappingList = {
  MaintNotificationCode: {
    "Erratic output": "ERO",
    "Insufficient power": "POW",
    "Load drop": "LOA",
    Noise: "NOI",
    Overheating: "OHE",
    Vibration: "VIB",
    Other: "OTH",
    Unknown: "UNK",
  },
  MaintenanceObjectIsDown: {
    Yes: "True",
    No: "False",
  },
  // ...
};
const mapping = (body) => {
  for (var reqKey in mappingList) {
    const bodyValue = body[reqKey];
    if (bodyValue && mappingList[reqKey][bodyValue]) {
      body[reqKey] = mappingList[reqKey][bodyValue];
      break;
    }
  }
  return body;
};

El contenido de la solicitud incluye los valores ReporterFullName y ReportedByUser, que se obtienen cuando el usuario se autentica en la página de inicio de sesión. La respuesta es el Id. de notificación de mantenimiento, que se utiliza para la siguiente imagen adjunta.

// src/integrationSuite/target/apis.js
async postMaintNotif(body, proxyRes) {
    const mappedBody = mapping(body);
    return await axios
      .post("/v1/pr/API_MAINTNOTIFICATION/MaintenanceNotification", {
        TechnicalObject: mappedBody.TechnicalObject,
        NotificationText: mappedBody.NotificationText,
        MaintNotificationCode: mappedBody.MaintNotificationCode,
        MalfunctionEffect: mappedBody.MalfunctionEffect,
        MaintenanceObjectIsDown: mappedBody.MaintenanceObjectIsDown,
        MaintNotificationLongText: mappedBody.MaintNotificationLongText,
        MaintNotifLongTextForEdit: mappedBody.MaintNotificationLongText,
        MaintPriority: mappedBody.MaintPriority,
        ReporterFullName: mappedBody.ReporterFullName,
        ReportedByUser: mappedBody.ReportedByUser,
        MalfunctionStartDate: mappedBody.MalfunctionStartDate,
        LocationDescription: mappedBody.LocationDescription,
        RequiredStartDate: mappedBody.RequiredStartDate,
        RequiredEndDate: mappedBody.RequiredEndDate,
        NotificationReferenceDate: mappedBody.NotificationReferenceDate,
        NotificationType: "Y1",
        TechObjIsEquipOrFuncnlLoc: "EAMS_EQUI",
        MaintNotificationCodeGroup: "YB-PMGNL",
      })
      .then((res) => {
        return res.data.MaintenanceNotification.MaintenanceNotificationType
          .MaintenanceNotification.TEXT;
      })

Adjuntar imágenes

Puede usar la función de cámara en SAP Build Apps para tomar una foto y enviarla al proxy en formato base64. Sin embargo, los datos de imagen pueden consumir una gran cantidad de comunicación. Por lo tanto, es necesario verificar la configuración de la biblioteca. En este caso, se usa Express.js y el límite predeterminado para el cuerpo de la solicitud es de 100 KB. Si el cuerpo de la solicitud supera el límite, se producirá un error 413 («entidad de solicitud demasiado grande»).

Para resolver este problema, puede configurar Express.js de la siguiente manera,

// src/app.js
const express = require("express");
const app = express();
app.use(express.urlencoded({ extended: true, limit: "100mb" }));

Primero debe recuperar los valores de ‘Cookie’ y ‘X-CSRF-Token’ porque deben incluirse en el encabezado de la solicitud POST.

// src/s4HANA/target/apis.js
    const res = await axios("/opu/odata/sap/API_CV_ATTACHMENT_SRV", {
      headers: {
        "x-csrf-token": "FETCH",
      },
    });
    const cookie =
      res.headers["set-cookie"][0] + ";" + res.headers["set-cookie"][1];
    const xCSRFToken = res.headers["x-csrf-token"];

Puede ver los detalles de los parámetros del encabezado.

Parámetros de encabezado Descripción Valores de ejemplo
La interfaz de usuario de SAP Fiori no muestra DMS (Sistema de gestión de documentos) sino GOS (Servicios de objetos genéricos)
El ID de notificación de mantenimiento con el prefijo 0 000010000624
El nombre del archivo con extensión. ObjetoTécnico1.jpg

El tipo de archivo del cuerpo debe ser binario.

// src/s4HANA/target/apis.js
    return await axios
      .post(
        "/opu/odata/sap/API_CV_ATTACHMENT_SRV/AttachmentContentSet",
        binaryFile,
        {
          headers: {
            "Content-Type": "image/jpeg; image/png",
            BusinessObjectTypeName: "PMQMEL",
            LinkedSAPObjectKey: body.linkedSAPObjectKey,
            Slug: body.slug,
            Cookie: cookie,
            "X-CSRF-Token": xCSRFToken,
          },
        }
      )

Conclusión

Ha visto cómo se pueden combinar los servicios de IBM Watson y SAP para crear una notificación de mantenimiento a través de la voz en un dispositivo móvil. Esta integración puede beneficiar enormemente a las empresas al optimizar sus operaciones. Aunque se demuestra la notificación de mantenimiento, esta integración se puede aplicar a varias aplicaciones de eficiencia comercial en cada módulo de SAP.

Por favor, comparta sus comentarios o pensamientos en un comentario. FNo dude en seguirnos y contactarnos si tiene otros casos de uso o soluciones en mente, o si desea obtener más detalles.

Referencias

Créditos

Gracias a Günter Albrecht y Mohini Verma por apoyarme en este proyecto!

SAP S/4 HANA

¡Puede acceder a los temas de SAP S/4HANA desde aquí!



Source link


CreeIBMlosmantenimientoNotificaciónparaS4HANASAPserviciosunautilizandoWatson

Artículos relacionados


EWM-MFS  ·  mfs  ·  opensource-plc-emulator  ·  PLC  ·  Technical Articles
Cómo configurar y ejecutar el emulador de PLC para SAP EWM MFS
ABAP Enhancement  ·  Technical Articles
Mensaje de error personalizado para componentes de pedido de MP (iw31/iw32)
Product Information
Simplificando DevOps para SAP Cloud Integration con Figaf

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Administración del tiempo de SuccessFactors: cómo administrar Comp-off / Time off in Lieu, con solo la administración de ausencias habilitada para su organización.
Previo
[Central Finance]: transfiera la información de activos a campos definidos por el cliente en la interfaz de publicación secundaria de FI
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar