Uso del estado de usuario de JavaScript v3 en un bot de la versión v4Using JavaScript v3 user state in a v4 bot

se aplica a: SDK V4APPLIES TO: SDK v4

En este artículo se muestra un ejemplo de cómo un bot de la versión v4 puede realizar operaciones de lectura, escritura y eliminación en la información de un estado de usuario de la versión v3.This article shows an example of how a v4 bot can perform read, write, and delete operations on v3 user state information.

El ejemplo de código se puede encontrar en el ejemplo de adaptador de estado de usuario v4 v3.The code sample can be found in v4 v3 user state adapter sample.

Nota

Un bot mantiene un estado de conversación para realizar un seguimiento de la conversación y dirigirla, y formular preguntas al usuario.A bot maintains conversation state to track and direct the conversation and ask questions to the user. Mantiene el estado del usuario para realizar el seguimiento de las respuestas del usuario.It maintains user state to track the user's answers.

PrerrequisitosPrerequisites

  • npm versión 6.9.0 o posterior (necesario para admitir el alias de paquete).npm version 6.9.0 or later (needed to support package aliasing).

  • Node.js versión 10.14.1 o posterior.Node.js version 10.14.1 or later.

    Para comprobar la versión instalada en el equipo, en un terminal, ejecute el comando siguiente:To check the version installed on your computer, in a terminal, execute the following command:

    # determine node version
    node --version
    

ConfigurarSetup

  1. Clonación del repositorioClone the repository

    git clone https://github.com/microsoft/botbuilder-samples.git
    
  2. En un terminal, vaya a BotBuilder-Samples/Migration/MigrationV3V4/Node/V4V3-user-state-adapter-sample-botIn a terminal, navigate to BotBuilder-Samples/Migration/MigrationV3V4/Node/V4V3-user-state-adapter-sample-bot

    cd BotBuilder-Samples/Migration/MigrationV3V4/Node/V4V3-user-state-adapter-sample-bot
    
  3. Ejecute npm install en las siguientes ubicaciones:Run npm install in the following locations:

    root
    /V4V3StorageMapper
    /V4V3UserState
    
  4. Ejecute npm run build o tsc para compilar los módulos StorageMapper y UserState en las siguientes ubicaciones:Execute npm run build or tsc to build the StorageMapper and UserState modules in the following locations:

    /V4V3StorageMapper
    /V4V3UserState
    
  5. Configuración de la base de datosConfigure the data base

    1. Copie el contenido del archivo .env.example.Copy the content od the .env.example file.
    2. Cree un nuevo archivo denominado .env y pegue el contenido anterior.Create a new file called .env and past the previous content into it.
    3. Rellene los valores de los proveedores de almacenamiento.Fill in the values for your storage provider(s). Tenga en cuenta que el nombre de usuario, la contraseña y la información de host se pueden encontrar en Azure Portal en la sección del proveedor de almacenamiento determinado como, por ejemplo, Cosmos DB, Table Storage o SQL Database.Notice that Username, password and host information can be found in the Azure portal under the section for your particular storage provider such as Cosmos DB, Table storage or SQL database. El usuario define los nombres de tablas y las colecciones.Table and collection names are user-defined.
  6. Establecimiento del proveedor de almacenamiento del botSet the bot's storage provider

    1. Abra el archivo index.js en la raíz del proyecto.Open the index.js file in the project root. Al principio del archivo (líneas 38-98 aproximadamente) verá las configuraciones para cada proveedor de almacenamiento, como se indica en los comentarios.Towards the beginning of the file (lines ~38-98) you will see configurations for each storage provider, as noted in the comments. Leen los valores de configuración del archivo .env a través de process.env de Node.They read in the configuration values from the .env file via Node process.env. El siguiente fragmento de código muestra cómo configurar la instancia de SQL Database.The following code snippet shows how to configure the SQL Database.

      /*-----------------------------------------------------------------------------
        SQL Database Configuration
      -----------------------------------------------------------------------------*/
      
      const sqlConfig = {
          userName: process.env.SQL_USER_NAME, // obtain from Azure Portal
          password: process.env.SQL_PASSWORD, // obtain from Azure Portal
          server: process.env.SQL_SERVER_HOST, // obtain from Azure Portal
          enforceTable: true, // If this property is not set to true it defaults to false. When false if the specified table is not found, the bot will throw an error.
          options: {
              database: process.env.SQL_DATABASE_NAME, // user defined
              table: process.env.SQL_TABLE_NAME, // user defined
              encrypt: true,
              rowCollectionOnRequestCompletion: true
          }
      }
      
    2. Especifique el proveedor de almacenamiento que desea que use el bot pasando la instancia del cliente de almacenamiento que prefiera al adaptador StorageMapper (línea 107 aproximadamente).Specify which storage provider you want your bot to use by passing the storage client instance of your choice to the StorageMapper adapter (~line 107).

      /*** Pass current storage provider to StorageMapper ***/
      /*** possible values: cosmosStorageClient, tableStorage, sqlStorage ***/
      const storageMapper = new StorageMapper(cosmosStorageClient);
      

      La configuración predeterminada es Cosmos DB.The default setting is Cosmos DB. Los valores posibles son:The possible values are:

          cosmosStorageClient
          tableStorage
          sqlStorage
      
  7. Inicie la aplicación.Start the application. En la raíz del proyecto, ejecute el comando siguiente:From the project root, execute the following command:

    npm run start
    

Clases de adaptadorAdapter Classes

V4V3StorageMapperV4V3StorageMapper

La clase StorageMapper contiene la funcionalidad principal del adaptador.The StorageMapper class contains the main adapter functionality. Implementa la interfaz de almacenamiento de la versión v4 y asigna los métodos del proveedor de almacenamiento (lectura, escritura y eliminación) de nuevo a las clases del proveedor de almacenamiento de la versión v3 para que el estado del usuario con formato v3 se pueda usar en un bot de la versión v4.It implements the v4 Storage interface and maps the storage provider methods (read, write and delete) back to the v3 storage provider classes so that v3-formatted user state can be used from a v4 bot.

V4V3UserStateV4V3UserState

Esta clase extiende la clase BotState de la versión v4 (botbuilder-core) para que use una clave del tipo v3, lo cual permite las operaciones de lectura, escritura y eliminación en el almacenamiento de la versión v3.This class extends the v4 BotState class (botbuilder-core) so that it uses a v3-style key, allowing read, write & delete to v3 storage.

Prueba del bot con Bot Framework EmulatorTesting the bot using Bot Framework Emulator

Bot Framework Emulator es una aplicación de escritorio que permite probar y depurar un bot en localhost o mediante la ejecución remota mediante un túnel.Bot Framework Emulator is a desktop application that allows to test and debug a bot on localhost or running remotely through a tunnel.

Conexión al bot con Bot Framework EmulatorConnect to the bot using Bot Framework Emulator

  1. Inicie Bot Framework Emulator.Launch Bot Framework Emulator.
  2. Escriba la siguiente dirección URL (punto de conexión): http://localhost:3978/api/messages.Enter the following URL (end point): http://localhost:3978/api/messages.

Pasos de pruebasTesting steps

  1. Abra el bot en el emulador y envíe un mensaje.Open bot in Emulator and send a message. Proporcione su nombre cuando se le solicite.Provide your name when prompted.
  2. Una vez acabado el turno, envíe otro mensaje al bot.After the turn is over, send another message to the bot.
  3. Compruebe que no se le vuelve a solicitar su nombre.Assure that you are not prompted again for your name. El bot debería leerlo del almacenamiento y reconocer que ya se le ha solicitado.The bot should be reading it from the storage and recognize that it already prompted you.
  4. El bot debe devolver su mensaje.The bot should echo back your message.
  5. Vaya al proveedor de almacenamiento en Azure y compruebe que su nombre está almacenado como datos de usuario en la base de datos.Go to your storage provider in Azure and verify that your name is stored as user data in the database.

Implementación del bot en AzureDeploy the bot to Azure

Para más información sobre la implementación de un bot en Azure, consulte Implementación de un bot en Azure para obtener una lista completa de las instrucciones de implementación.To learn more about deploying a bot to Azure, see Deploy your bot to Azure for a complete list of deployment instructions.

Lecturas adicionalesFurther reading