Integración del bot con un explorador webIntegrate your bot with a web browser

se aplica a: SDK V4APPLIES TO: SDK v4

Algunos escenarios requieren algo más que solo un bot para satisfacer un requisito.Some scenarios require more than just a bot to fulfill a requirement. Puede que un bot deba enviar al usuario a un explorador web para completar una tarea y, a continuación, reanudar la conversación con el usuario una vez completada la tarea.A bot may need to send the user to a web browser to complete a task and then resume the conversation with the user after the task has been completed.

Autenticación y autorizaciónAuthentication and authorization

Si busca la capacidad de leer el calendario del usuario en Office 365, o quizás incluso crear citas en nombre del usuario, el usuario antes debe autenticarse en Microsoft Azure Active Directory y autorizar al bot a acceder a los datos del calendario del usuario.If a bot wants the ability to read the user's calendar in Office 365, or perhaps even create appointments on behalf of that user, the user must first authenticate with Microsoft Azure Active Directory and authorize the bot to access the user's calendar data. El bot redirigirá al usuario a un explorador web para completar las tareas de autenticación y autorización y, a continuación, reanudará la conversación con el usuario.The bot will redirect the user to a web browser to complete the authentication and authorization tasks, and then will subsequently resume the conversation with the user.

Seguridad y cumplimiento normativoSecurity and compliance

A menudo, los requisitos de seguridad y cumplimiento restringen el tipo de información que un bot puede intercambiar con un usuario.Security and compliance requirements often restrict the type of information that a bot can exchange with a user. En algunos casos, puede ser necesario que el usuario envíe y reciba datos fuera de la conversación actual.In some cases, it may be necessary for the user to send/receive data outside of the current conversation. Por ejemplo, si un usuario desea ejecutar un pago mediante un proveedor de pagos externo, no se debe especificar un número de tarjeta de crédito dentro del contexto de la conversación.For example, if a user wants to execute a payment using a third-party payment provider, a credit card number should not be specified within the context of the conversation. En su lugar, el bot redirigirá al usuario a un explorador web para completar el proceso de pago y, a continuación, reanudará la conversación con el usuario.Instead, the bot will direct the user to a web browser to complete the payment process, and then will subsequently resume the conversation with the user.

En este artículo se explora el proceso de facilitar la transición de un usuario desde el bot al explorador web y viceversa.This article explores the process of facilitating a user's transition from bot to web browser, and back again.

Nota

La transición del chat al explorador web y a la inversa no es ideal, dado que el cambio entre aplicaciones puede confundir fácilmente a un usuario.Transitioning from chat to web browser and back is not ideal, as switching between applications can easily confuse a user. Para brindar una mejor experiencia, muchos canales ofrecen ventanas HTML integradas que un bot puede usar para presentar aplicaciones que, de lo contrario, aparecerían en un explorador web.To provide a better experience, many channels offer built-in HTML windows that a bot can use to present applications would otherwise appear in a web browser. Esta técnica permite al usuario permanecer dentro de la conversación a la vez que tiene acceso a recursos externos.This technique allows the user to remain within the conversation while still accessing external resources. Este enfoque es conceptualmente similar a las aplicaciones móviles que administran flujos de autorización mediante OAuth en las vistas web incrustadas.This approach is conceptually similar to mobile applications managing authorization flows using OAuth within embedded web views.

Del bot al explorador web y viceversaBot to web browser, and back again

En este diagrama se muestra el flujo de alto nivel para la integración entre el bot y un explorador web.This diagram shows the high-level flow for integration between bot and web browser.

Interacción entre bot y web

Piense en cada paso del flujo:Consider each step of the flow:

  1. El bot genera y muestra un hipervínculo que redirigirá al usuario a un sitio web.The bot generates and displays a hyperlink that will redirect the user to a website. El hipervínculo suele incluir datos a través de los parámetros de cadena de consulta en la dirección URL de destino que especifican información sobre el contexto de la conversación actual, por ejemplo, el id. de la conversación, el id. del canal y el id. del usuario en el canal.The hyperlink typically includes data via querystring parameters on the target URL that specify information about the context of the current conversation, such as conversation ID, channel ID, and user ID in the channel.

  2. El usuario hace clic en el hipervínculo y se le redirige a la dirección URL de destino dentro de un explorador web.The user clicks the hyperlink and is redirected to the target URL within a web browser.

  3. El bot entra en un estado en espera de comunicación desde el sitio web que indique que se ha completado el flujo del sitio web.The bot enters a state awaiting communication from the website to indicate that the website flow is complete.

    Sugerencia

    Diseñe este flujo para que el bot no permanezca permanentemente en el estado "en espera" si el usuario nunca completa el flujo del sitio web.Design this flow so that the bot will not permanently remain in the 'waiting' state if the user never completes the website flow. En otras palabras, si el usuario abandona el explorador web y vuelve a comunicarse con el bot, el bot debe reconocer esa entrada, no ignorarla.In other words, if the user abandons the web browser and starts communicating with the bot again, the bot should acknowledge, not ignore that input.

  4. El usuario completa las tareas necesarias a través del explorador web.The user completes the necessary task(s) via the web browser. Podría tratarse de un flujo de OAuth o cualquier secuencia de eventos necesaria para el escenario en cuestión.This could be an OAuth flow or any sequence of events required by the scenario at hand.

  5. Cuando el usuario completa el flujo del sitio web, este genera un "número mágico" y se indica al usuario que copie el valor y lo pegue en la conversación con el bot.When the user completes the website flow, the website generates a 'magic number' and instructs the user to copy the value and paste it back into the conversation with the bot.

  6. El sitio web indica al bot que el usuario ha completado el flujo del sitio web.The website signals to the bot that the user has completed the website flow. Comunica el 'número mágico' al bot y proporciona todos los datos pertinentes.It communicates the 'magic number' to the bot and provides any other relevant data. Por ejemplo, en el caso de un flujo de OAuth, el sitio web podría proporcionar un token de acceso al bot.For example, in the case of an OAuth flow, the website would provide an access token to the bot.

  7. El usuario vuelve al bot y pega el "número mágico" en el chat.The user returns to the bot and pastes the 'magic number' into the chat. El bot valida que el "número mágico" proporcionado por el usuario coincida con el valor esperado, comprobando que el usuario actual es el mismo usuario que previamente hizo clic en el hipervínculo para iniciar el flujo del sitio web.The bot validates that 'magic number' provided by the user matches the expected value, verifying that the current user is the same user who previously clicked the hyperlink to initiate the website flow.

Comprobación de la identidad del usuario mediante el "número mágico"Verifying user identity using the 'magic number'

La generación de un "número mágico" durante el flujo del bot al sitio web (paso 5 anterior) permite al bot comprobar posteriormente que el usuario que inició el flujo del sitio web sea realmente el usuario para el que estaba previsto.The generation of a 'magic number' during the bot-to-website flow (step 5 above) enables the bot to subsequently verify that the user who initiated the website flow is indeed the user for whom it was intended. Por ejemplo, si un bot está llevando a cabo un chat grupal con varios usuarios, cualquiera de ellos podría haber hecho clic en el hipervínculo para iniciar el flujo del sitio web.For example, if a bot is conducting a group chat with multiple users, any one of them could have clicked the hyperlink to initiate the website flow. Sin el proceso de validación del "número mágico", el bot no tiene manera de saber qué usuario ha completado el flujo.Without the 'magic number' validation process, the bot has no way of knowing which user completed the flow. Un usuario podría autenticarse e insertar los tokens de acceso en la sesión de otro usuario.One user could authenticate and inject access tokens in another user's session.

Advertencia

Este no es simplemente un riesgo de los chats grupales.This isn't just a risk within group chats. Sin el proceso de validación del "número mágico", cualquier persona que obtenga el hipervínculo para iniciar el flujo del sitio web puede suplantar la identidad de un usuario.Without the 'magic number' validation process, anyone who obtains the hyperlink to launch the website flow can spoof a user's identity.

El número mágico debe ser un número aleatorio generado mediante una biblioteca de criptografía fuerte.The magic number should be a random number generated using a strong cryptography library. Para obtener un ejemplo del proceso de generación en C#, consulte este código dentro de la biblioteca BotAuth.For an example of the generation process in C#, see this code within the BotAuth library. BotAuth permite que los bots que están integrados en Microsoft Bot Framework implementen el flujo del bot al sitio web para autenticar a un usuario en un sitio web y, a continuación, usar el token de acceso que se generó a partir del proceso de autenticación.BotAuth enables bots that are built in Microsoft Bot Framework to implement the bot-to-website flow to authenticate a user in a website and then to subsequently use the access token that was generated from the authentication process. Puesto que BotAuth no realizar ninguna suposición acerca de las funcionalidades del canal, estos flujos deberían funcionar bien con la mayoría de los canales.Since BotAuth does not make any assumptions about the channel's capabilities, such flows should function well with most channels.

Nota

La necesidad del proceso de validación del "número mágico" debería caer desuso a medida que canales creen sus propias vistas web incrustadas.The need for the 'magic number' validation process should be deprecated as channels build their own embedded web views.

¿Cómo hace el sitio web para "indicar" al bot?How does the website 'signal' the bot?

Cuando el bot genera el hipervínculo donde el usuario hará clic para iniciar el flujo del sitio web, incluye información a través de los parámetros de cadena de consulta en la dirección URL de destino sobre el contexto de la conversación actual, por ejemplo, el id. de la conversación, el id. del canal y el id. del usuario en el canal.When the bot generates the hyperlink that the user will click to initiate the website flow, it includes information via querystring parameters in the target URL about the context of the current conversation, such as conversation ID, channel ID, and user ID in the channel. Posteriormente, el sitio web puede usar esta información para leer y escribir variables de estado para ese usuario o esa conversación con Bot Framework SDK o las API REST.The website can subsequently use this information to read and write state variables for that user or conversation using the Bot Framework SDK or REST APIs. Consulte el paso 6 anterior para obtener un ejemplo de cómo el sitio web "indica" al bot que el flujo del sitio web está completo.See step 6 above for an example of how the website 'signals' to the bot that the website flow is complete.

Código de ejemploSample code

Como se describe en este artículo, la biblioteca BotAuth permite que los flujos de OAuth se enlacen con los bots que se compilan con .NET y Node en Microsoft Bot Framework.As described in this article, the BotAuth library enables OAuth flows to be bound to bots that are built using .NET and Node in the Microsoft Bot Framework.

Recursos adicionalesAdditional resources