Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

La API de la plataforma Einstein Bots es una nueva API REST que le permite interactuar con sus Bots de Einstein desde cualquier cliente. También creamos un SDK de Java de código abierto y un conector de canal para brindarle las herramientas que necesita para integrar fácilmente Einstein Bots en cualquiera de sus canales de conversación además de los canales de participación digital existentes que son compatibles con Service Cloud.

En la publicación anterior , mostramos cómo usar un cliente de bot básico con el SDK de Java para conectar su canal al Bot de Einstein. En esta publicación, veremos el cliente administrado por sesión del SDK y sus características. Aprenderá a simplificar su implementación mediante la gestión automática de sesiones para su canal de conversación. Además, aprenderá a usar la memoria caché incluida o a proporcionar una implementación de memoria caché personalizada con el cliente administrado por sesión.

Resumen del cliente bot básico

Antes de ver un cliente administrado por sesión, hagamos un resumen rápido. Estos son los pasos de alto nivel para usar el cliente de bot básico. Puede encontrar ejemplos de código en nuestra publicación anterior .

  1. Crear un cliente de chatbot básico
  2. Llame al método startChatSession() para iniciar una sesión usando su ExternalSessionId
  3. Recuperar RuntimeSessionId de la respuesta del bot
  4. Llame al método sendMessage() usando RuntimeSessionId para enviar un mensaje a la sesión activa
  5. Llame al método endChatSession() para finalizar la sesión cuando termine la conversación

Aquí está la interfaz BasicChatbotClient para su referencia.

 interfaz pública BasicChatbotClient { BotResponse startChatSession (configuración de RequestConfig, ExternalSessionId sessionId, Sobre de solicitud de BotSendMessageRequest); BotResponse sendMessage (configuración de RequestConfig, RuntimeSessionId sessionId, Sobre de solicitud de BotSendMessageRequest); BotResponse endChatSession (configuración de RequestConfig, RuntimeSessionId sessionId, Sobre de solicitud de BotEndSessionRequest);
}

¿Cuándo debe comenzar una nueva sesión?

El desafío es que debe saber cuándo debe iniciar una nueva sesión (en lugar de enviar un mensaje a una sesión existente) y llamar a los métodos startChatSession() y sendMessage() de manera adecuada. En algunos casos, el canal no tiene límites claros entre sesiones para poder saber cuándo comienza una nueva sesión de conversación.

Por ejemplo, supongamos que un bot está escuchando en un canal de Slack y un usuario publica un mensaje. Debe iniciar una nueva sesión cuando el usuario publique un mensaje por primera vez (o después de mucho tiempo, según el tiempo de espera de la sesión). Alternativamente, si el usuario ya está en una conversación activa, puede enviar un mensaje a la sesión existente.

Para enviar un mensaje a la sesión existente, debe realizar un seguimiento de las sesiones activas de los usuarios junto con RuntimeSessionId . La buena noticia es que el cliente administrado por sesión ya proporciona esta funcionalidad, por lo que no es necesario que la implemente.

Introducción al cliente administrado por sesión

Primero veamos la interfaz SessionManagedChatbotClient para ver la diferencia entre ella y el BasicChatbotClient mencionado anteriormente.

 // El cliente bot administrado por sesión
interfaz pública SessionManagedChatbotClient { BotResponse sendMessage (configuración de RequestConfig, ExternalSessionId sessionId, Sobre de solicitud de BotSendMessageRequest); BotResponse endChatSession (configuración de RequestConfig, ExternalSessionId sessionId, Sobre de solicitud de BotEndSessionRequest);
}

Observe dos diferencias con respecto a la interfaz de BasicChatbotClient :

  • No hay un método startChatSession , solo sendMessage
  • Los métodos aceptan solo ExternalSessionId como parámetro

La ventaja de usar un cliente administrado por sesión es que no tiene que llamar explícitamente al método startChatSession() y no tiene que saber acerca de RuntimeSessionId . El cliente administrado por sesión se encargará de la administración completa de la sesión por usted, y el código de su aplicación puede permanecer sin estado. Todo el trabajo pesado de mantener la asignación entre ExternalSessionId y RuntimeSessionId , junto con determinar cuándo iniciar una nueva sesión, está a cargo del cliente administrado por sesión.

Uso de un cliente administrado por sesión

Suficiente teoría: escribamos un código para usar un cliente administrado por sesión. En esta sección, aprenderá a implementar un ciclo de vida de conversación completo, como iniciar una sesión de chat, enviar un mensaje a la sesión actual y finalizar una sesión de chat.

1. Agregar una dependencia POM

Encuentre la última versión de einstein-bot-sdk-java de Maven Central y agregue esta dependencia a su pom.xml .

 <dependencia> <groupId>com.salesforce.einsteinbot</groupId> <artifactId>einstein-bot-sdk-java</artifactId> <versión>${einstein-bot-sdk-java-versión}</versión>
</dependencia>

2. Cree un cliente administrado por sesión

SessionManagedChatbotClient usa JwtBearerFlow para OAuth y agrega capacidades de administración de sesiones además de BasicChatbotClient . El siguiente paso es pasar AuthMechanism y BasicChatbotClient como parámetros para SessionManagedChatbotClient .

 // Crear un mecanismo de autenticación de portador JWT.
Mecanismo de autenticación oAuth = JwtBearerOAuth.with() .privateKeyFilePath(privateKeyFilePath) .loginEndpoint(loginEndpoint) .connectedAppId(conectadoAppId) .connectedAppSecret(secreto) .userId(usuarioId) .construir(); // Crear un cliente administrado por sesión.
Cliente SessionManagedChatbotClient = ChatbotClients .sesión gestionada() .basicClient(ChatbotClients.basic() .basePath(basePath) .authMechanism(oAuth) .construir()) .cache(nuevo RedisCache(TU_TTL_SECONDS,TU_REDIS_URL)) .construir();

Discutiremos el parámetro de cache más adelante en esta publicación.

3. Crear una configuración de solicitud

Cree una RequestConfig con su botId , orgId y forceConfigEndPoint . Para encontrar estos valores, consulte la Guía para desarrolladores de la API de Bots de Einstein . Por lo general, desea crear una configuración una vez por bot en su organización y reutilizarla para cada solicitud.

 //Crear configuración de solicitud
RequestConfig config = RequestConfig.with() .botId(botId) .orgId(orgId) .forceConfigEndpoint(forceConfigEndPoint) .construir();

4. Envía un mensaje

Primero, cree un ExternalSessionId para identificar de forma única una sesión en su canal. Por ejemplo, podría ser "ID de usuario" para Slack o "hilo de Twitter" para Twitter. Luego, cree un BotSendMessageRequest y llame al método sendMessage para enviar.

 // Recuperar el ID de la sesión externa del canal externo.
// Por ejemplo, podría ser ID de usuario para holgura, hilo de twitter para twitter. // Para este ejemplo, usamos UUID aleatorio ExternalSessionId externalSessionId = nuevo ExternalSessionId(UUID.randomUUID().toString()); // Crea la solicitud para enviar un mensaje al bot.
BotSendMessageRequest sendMessageRequest = BotRequest .withMessage(buildTextMessage(mensaje)) .construir(); // Envía la solicitud utilizando el ID de sesión externo.
Respuesta de BotResponse = cliente .sendMessage(config, externalSessionId, sendMessageRequest);

El objeto BotResponse es el mismo que con BasicChatbotClient , por lo que puede recuperar la respuesta del bot de la misma manera que se describe en la publicación de blog anterior .

5. Terminar la sesión del bot

El código es el mismo que con BasicChatbotClient excepto que pasa un ExternalSessionId en lugar del ID de sesión interna del bot.

 // Crea la solicitud para finalizar la sesión del bot.
BotEndSessionRequest botEndSessionRequest = BotRequest .withEndSession(EndSessionRason.USERREQUEST).build(); // Enviar la solicitud al bot para finalizar la sesión.
BotResponse endSessionResponse = cliente .endChatSession(config, externalSessionId, botEndSessionRequest);

Cómo realiza el seguimiento de las sesiones el cliente gestionado por sesión

Ahora aprendió a usar el cliente administrado por sesión proporcionado por el SDK, pero la lógica de seguimiento de la sesión dependerá de su canal y es posible que deba personalizarlo para su caso de uso. Por lo tanto, es útil comprender cómo funciona el cliente administrado por sesión.

El cliente administrado por sesión realiza un seguimiento de las sesiones en función de una combinación de ExternalSessionId , BotId y OrgId . Si el cliente envía una solicitud de mensaje con una nueva combinación de esos ID, llama automáticamente a startChatSession para iniciar la sesión de chat. Recupera RuntimeSessionId de startChatSession y agrega mapeo entre sesiones activas y RuntimeSessionId en un Cache . Si la combinación de ExternalSessionId , BotId y OrgId ya existe en Cache , enviará un sendMessage a la sesión existente utilizando el valor de RuntimeSessionId almacenado en caché.

El Cache ahora se puede personalizar para sus necesidades.

Personalización de la memoria caché utilizada por el cliente gestionado por sesión

¡Estas casi listo! En esta última sección, aprenderá cómo personalizar el caché para sus necesidades porque el caché
es una capa importante que es específica de la arquitectura de su aplicación.

Elegir una biblioteca de caché

Hemos incluido InMemoryCache y RedisCache listos para usar. InMemoryCache lo ayuda a ejecutarse fácilmente en un entorno de desarrollo. No se recomienda su uso en una organización de producción.

Puede usar RedisCache para implementarlo y ejecutarlo fácilmente en una infraestructura de nube. Si no puede usar Redis, puede proporcionar su propia implementación de caché.

Proporcionar su propia implementación de caché

Si desea utilizar cualquier otro servicio de caché distribuido (por ejemplo, Memcached), proporcionamos una abstracción de caché . Puede implementar esta interfaz de caché de acuerdo con su sistema de caché y pasarla al método .cache del generador de clientes administrados por sesión.

Resumen

En resumen, aprendió cómo simplificar su integración de Bots de Einstein usando el cliente administrado por sesión y cómo personalizarlo para sus necesidades. Esto le ahorra tiempo porque:

  • El cliente administrado por sesión simplifica la conexión a Einstein Bots mediante la administración automática de sesiones
  • No necesita iniciar una sesión explícitamente ni realizar un seguimiento de los ID de sesión en tiempo de ejecución.
  • Puede usar el RedisCache proporcionado o proporcionar su propia implementación de caché para el seguimiento de sesiones

Para obtener más información, consulte la guía del usuario de Einstein Bot SDK .

Sobre el Autor

Rajasekar Elango es ingeniero de software principal en Salesforce y trabaja en la plataforma Einstein Bots. Puedes seguirlo en LinkedIn o Twitter .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/06/simplify-your-einstein-bots-integration-using-the-session-managed-client.html

Entradas recomendadas