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 .
- Crear un cliente de chatbot básico
- Llame al método
startChatSession()
para iniciar una sesión usando suExternalSessionId
- Recuperar
RuntimeSessionId
de la respuesta del bot - Llame al método
sendMessage()
usandoRuntimeSessionId
para enviar un mensaje a la sesión activa - 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
, solosendMessage
- 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