Un chatbot para el control de activos

Oct 29 2020
En este artículo, estoy armando un chatbot para Asset Control como un pequeño proyecto divertido. ¿Por qué? Porque había querido implementar un chatbot durante un tiempo, aunque solo sea para entender cómo hacerlo, y hacerlo en el dominio AC parece natural.

En este artículo, estoy armando un chatbot para Asset Control como un pequeño proyecto divertido. ¿Por qué? Porque había querido implementar un chatbot durante un tiempo, aunque solo sea para entender cómo hacerlo, y hacerlo en el dominio AC parece natural. También lo integraré con Slack para ver cómo podría encajar con mis herramientas y flujo de trabajo ya existentes.

¿Un chatbot para hacer qué?

Ya te habrás encontrado con chatbots en varios lugares. Pueden estar en los sitios web de la empresa y ayudarlo a obtener respuestas a las preguntas frecuentes, permitirle hacer reservas, etc.

En este caso, quiero implementar un prototipo de chatbot para integrar con Slack que me permita comunicarme con Asset Control. Es posible que desee solicitarle información sobre el estado de mi entorno de CA o solicitar datos.

Para guiar la implementación, utilicé las siguientes preguntas que el bot debería poder responder:

  • ¿Cuál es el último precio de XYZ?
  • ¿Cuál fue este mes alto para XYZ?
  • ¿Cuántos sospechosos hoy?
  • ¿Está actualizada la replicación?

Entonces, ¿estamos implementando el bot desde cero? Por supuesto no. Hay una serie de soluciones y rápidamente me conformé con Google Dialogflow. Veamos cómo funciona esto.

Construyendo el bot en Dialogflow

Para construir nuestro bot en Google Dialogflow , necesitamos comprender algunos conceptos:

  • Intenciones
  • Entidades
  • Cumplimiento

Un intent agrupa todo lo que pertenece a un determinado tema definido de forma estricta que el bot debe manejar. En nuestro caso, se trata de la recuperación del último precio disponible de una acción de nuestro sistema. Usaremos Dialogflow para entrenar al bot para que comprenda cuándo la conversación trata sobre tal intención dándole frases de entrenamiento. Lo veremos en un minuto.

Entonces, las entidades son bloques de construcción que conforman nuestra conversación y son de particular interés por lo que queremos captarlos como parámetros. Ahora, en nuestro caso, ese sería el símbolo de cotización AAPL cuando hacemos la pregunta "¿Cuál es el último precio de AAPL?"

Por último, el concepto de cumplimiento nos permite llegar a los servicios en la parte posterior del chatbot a través de webhooks. Es decir, nos comunicaremos con Asset Control para consultar el stock dado y recuperar el último precio disponible.

Ahora construyamos nuestro bot.

Paso 1: configura tu bot.

Dirigirse a https://dialogflow.cloud.google.com/#/login e iniciar sesión. Luego, cree un Agente AcChatBot:

Paso 2: crear una entidad de stock

En el menú de la izquierda, haga clic en Más junto a Entidades, llámelo Stock e ingrese [A-Z][A-Z0-9]{1,6}como una expresión regular. Si bien no es completamente compatible con los símbolos de cotización, es suficiente para nuestro ejemplo y funciona con las comprobaciones de las expresiones regulares realizadas por el propio Dialogflow (por ejemplo, no demasiado amplio, etc.). Entonces guárdalo.

Paso 3: crea la última intención de precio

Es hora de nuestra última intención de precio. Nuevamente, en el menú de la izquierda, seleccione el signo más junto a Intents, llámelo Last pricey haga clic en AGREGAR FRASES DE ENTRENAMIENTO:

Entra What is the last price for AAPL?. Luego resalte AAPLcon su mouse. Esto abrirá una ventana emergente. Busque Stock, luego seleccione la opción presentada:

Si se hace correctamente, el resultado se verá así para garantizar que Dialogflow capture la entidad Stock correctamente:

¡IMPORTANTE! Luego desplácese hacia abajo, abra la sección Cumplimiento, haga clic en Habilitar cumplimiento y luego cambie a Me Enable webhook call for this intentgusta:

Esto nos permite llamar a nuestra propia función de backend y comunicarnos con Asset Control.

Asegúrate de guardar la intención antes de continuar.

Paso 4: implementar un servicio REST para recuperar datos de control de activos

Nuevamente, hay muchas formas de hacer esto. Usaremos Spring Boot ya que hace todo el trabajo pesado por nosotros y nos quedamos en Java y, por lo tanto, podemos hacer uso inmediato de la misma API de Asset Control Java que usa Adetta .

Si aún no lo sabe, Adetta es nuestro software de automatización de pruebas para Asset Control. Asegúrese de echar un vistazo a la Introducción a Adetta aquí .

Lo interesante es una clase AcBotControllery su handleIntentmétodo como se muestra a continuación:

Puede ver que el webhook para el cumplimiento de Dialogflow está manejando una solicitud POST. Tanto su entrada como su salida son JSON. Y usamos GoogleCloudDialogflowV2Webhook*clases para manejar tanto la solicitud como la respuesta JSON por nosotros.

El manejo real de la intención se pasa a un AcBotIntentHandler que obtenemos al llamar AcBotIntents.getHandlerFor(request). Veamos esta clase:

Construimos un mapeo de intents a manejadores (¿recuerdas nuestra Last priceintención?) E implementamos un método para recuperar un manejador adecuado dada la intención codificada en el objeto de solicitud. También definimos un controlador predeterminado en caso de que no podamos encontrar un controlador real:

Ahora, para obtener nuestro último precio para una acción determinada, veamos AcBotLastPriceIntentHandler:

Verá cómo recuperamos nuestro parámetro de entidad Stock del objeto de solicitud usando request.getQueryResult().getParameters().getOrDefault("Stock", "")y luego llamamos getLastPriceMessageForStockcomo se muestra aquí:

Nos protegemos contra la falta de valor de las acciones. De lo contrario, buscamos en nuestro sistema de control de activos acciones con el ticker dado. En caso de que no tengamos tal ADO, mostramos el mensaje correspondiente. De lo contrario, continuamos recuperando datos de precios para cada ADO que hemos encontrado (si bien debería ser un solo ADO, la implementación solo devolvería varios mensajes si es necesario).

Así es como encontramos el último precio:

Cargamos la serie temporal de ADO, obtenemos el último registro y, si está presente, creamos un mensaje que se leerá como The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. Y nuevamente nos protegemos contra los casos en los que no podemos encontrar un precio.

Usando Spring Boot podemos iniciar esto y hacer que nuestro servicio REST se ejecute en localhost: 8080 / ac-bot. ¿Qué sigue?

Bueno, obviamente estamos haciendo un poco de trampa ya que no estamos implementando este servicio en ningún lado, por lo que para que esté disponible desde el exterior, usaremos ngrok para configurar un túnel para nosotros:

Paso 5: Configura nuestro propio webhook de cumplimiento

A continuación, debemos informarle a Dialogflow dónde está nuestro servicio REST, así que regrese allí y haga clic en Cumplimiento en el menú de la izquierda:

Luego ingrese la https://...dirección proporcionada por ngrok y asegúrese de agregar la /ac-botal final.

Ok, el momento de la verdad. En la esquina superior derecha donde dice Try it now, podemos escribir What is the last price for AAPL?y si todo está funcionando bien deberíamos obtener la siguiente respuesta:

¡Esto es emocionante!

Paso 6: integra nuestro chatbot con Slack

Ahora, no vamos a seguir usando la consola de Dialogflow para jugar con nuestro bot. En su lugar, lo integraremos con Slack. Entonces, elija Integraciones en el menú de la izquierda, busque Slack e inicie un bot de prueba:

Luego dirígete a Slack y comienza a chatear con el bot:

Luego, podemos repetir el ciclo para implementar las otras preguntas / intenciones descritas al comienzo del artículo.

Palabras de cierre

Pensé que era divertido de hacer. Y más fácil de lo que pensaba también. Por supuesto, tomé varios atajos:

  • Solo ejecuta el servicio localmente.
  • Sin consideración por la seguridad, el control de acceso y la elección del entorno de control de activos.
  • Uso muy limitado del bot.

Espero que hayas disfrutado de este artículo. Póngase en contacto para compartir sus pensamientos, hacer preguntas, etc. Estamos aquí para ayudarlo.