v4 봇에서 JavaScript v3 사용자 상태 사용Using JavaScript v3 user state in a v4 bot

적용 대상: SDK v4APPLIES TO: SDK v4

이 문서에서는 v4 봇에서 v3 사용자 상태 정보에 대한 읽기, 쓰기 및 삭제 작업을 수행할 수 있는 방법의 예제를 보여줍니다.This article shows an example of how a v4 bot can perform read, write, and delete operations on v3 user state information.

코드 샘플은 v4 v3 사용자 상태 어댑터 샘플에서 찾을 수 있습니다.The code sample can be found in v4 v3 user state adapter sample.

참고

봇은 대화를 추적하고 안내하며 사용자에게 질문하기 위해 대화 상태 를 유지 관리합니다.A bot maintains conversation state to track and direct the conversation and ask questions to the user. 사용자의 답변을 추적하기 위해 사용자 상태 를 유지 관리합니다.It maintains user state to track the user's answers.

사전 요구 사항Prerequisites

  • npm 버전 6.9.0 이상 (패키지 별칭을 지 원하는 데 필요 함)npm version 6.9.0 or later (needed to support package aliasing).

  • 10.14.1 이상 버전을 Node.js 합니다.Node.js version 10.14.1 or later.

    터미널에서 컴퓨터에 설치된 버전을 확인하려면 다음 명령을 실행합니다.To check the version installed on your computer, in a terminal, execute the following command:

    # determine node version
    node --version
    

설치 프로그램Setup

  1. 리포지토리 복제Clone the repository

    git clone https://github.com/microsoft/botbuilder-samples.git
    
  2. 터미널에서 BotBuilder-Samples/Migration/MigrationV3V4/Node/V4V3-user-state-adapter-sample-bot으로 이동합니다.In 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. 다음 위치에서 npm install을 실행합니다.Run npm install in the following locations:

    root
    /V4V3StorageMapper
    /V4V3UserState
    
  4. npm run build 또는 tsc를 실행하여 StorageMapperUserState 모듈을 다음 위치에 빌드합니다.Execute npm run build or tsc to build the StorageMapper and UserState modules in the following locations:

    /V4V3StorageMapper
    /V4V3UserState
    
  5. 데이터 베이스 구성Configure the data base

    1. .env.example 파일의 콘텐츠를 복사합니다.Copy the content od the .env.example file.
    2. .env라는 새 파일을 만들고 이전 콘텐츠를 붙여넣습니다.Create a new file called .env and past the previous content into it.
    3. 스토리지 공급자에 대한 값을 입력합니다.Fill in the values for your storage provider(s). 사용자 이름, 암호호스트 정보 는 Azure Portal의 Cosmos DB, Table Storage 또는 SQL 데이터베이스 와 같은 특정 스토리지 공급자 섹션 아래에서 확인할 수 있습니다.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. 테이블 및 컬렉션 이름은 사용자가 정의합니다.Table and collection names are user-defined.
  6. 봇의 스토리지 공급자 설정Set the bot's storage provider

    1. 프로젝트 루트에서 index.js 파일을 엽니다.Open the index.js file in the project root. 파일의 시작 부분(~ 38-98줄)에서 주석에 설명된 대로 각 스토리지 공급자에 대한 구성이 표시됩니다.Towards the beginning of the file (lines ~38-98) you will see configurations for each storage provider, as noted in the comments. process.env 노드를 통해 .env 파일에서 구성 값을 읽습니다.They read in the configuration values from the .env file via Node process.env. 다음 코드 조각에서는 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. 선택한 스토리지 클라이언트 인스턴스를 StorageMapper 어댑터(~ 107줄)에 전달하여 봇에서 사용할 스토리지 공급자를 지정합니다.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);
      

      기본 설정은 Cosmos DB 입니다.The default setting is Cosmos DB. 사용 가능한 값은The possible values are:

          cosmosStorageClient
          tableStorage
          sqlStorage
      
  7. 애플리케이션을 시작합니다.Start the application. 프로젝트 루트에서 다음 명령을 실행합니다.From the project root, execute the following command:

    npm run start
    

어댑터 클래스Adapter Classes

V4V3StorageMapperV4V3StorageMapper

StorageMapper 클래스에는 주 어댑터 기능이 포함되어 있습니다.The StorageMapper class contains the main adapter functionality. v4 스토리지 인터페이스를 구현하고, v3 형식 사용자 상태를 v4 봇에서 사용할 수 있도록 스토리지 공급자 메서드(읽기, 쓰기 및 삭제)를 v3 스토리지 공급자 클래스로 매핑합니다.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

이 클래스는 v3 스타일 키를 사용하여 v3 스토리지에 대한 읽기, 쓰기 및 삭제를 허용하도록 v4 BotState 클래스(botbuilder-core)를 확장합니다.This class extends the v4 BotState class (botbuilder-core) so that it uses a v3-style key, allowing read, write & delete to v3 storage.

Bot Framework Emulator를 사용하여 봇 테스트Testing the bot using Bot Framework Emulator

Bot Framework Emulator는 localhost를 사용하거나 터널을 통해 원격으로 실행하여 봇을 테스트 및 디버그할 수 있는 데스크톱 애플리케이션입니다.Bot Framework Emulator is a desktop application that allows to test and debug a bot on localhost or running remotely through a tunnel.

Bot Framework Emulator를 사용하여 봇에 연결Connect to the bot using Bot Framework Emulator

  1. Bot Framework Emulator를 시작합니다.Launch Bot Framework Emulator.
  2. 다음 URL(엔드포인트)을 입력합니다. http://localhost:3978/api/messagesEnter the following URL (end point): http://localhost:3978/api/messages.

테스트 단계Testing steps

  1. 에뮬레이터에서 봇을 열고 메시지를 보냅니다.Open bot in Emulator and send a message. 메시지가 표시되면 사용자 이름을 입력합니다.Provide your name when prompted.
  2. 턴이 끝난 후에는 다른 메시지를 봇에 보냅니다.After the turn is over, send another message to the bot.
  3. 사용자의 이름에 대한 메시지가 다시 표시되지 않도록 합니다.Assure that you are not prompted again for your name. 봇은 스토리지에서 이를 읽고 이미 메시지를 표시했다는 것을 인식해야 합니다.The bot should be reading it from the storage and recognize that it already prompted you.
  4. 봇이 사용자 메시지를 다시 표시합니다.The bot should echo back your message.
  5. Azure에서 스토리지 공급자로 이동하여 사용자 이름이 데이터베이스의 사용자 데이터로 저장되어 있는지 확인합니다.Go to your storage provider in Azure and verify that your name is stored as user data in the database.

Azure에 봇 배포Deploy the bot to Azure

Azure에 봇을 배포하는 방법에 대한 자세한 내용은 Azure에 봇 배포에서 배포 지침의 전체 목록을 확인하세요.To learn more about deploying a bot to Azure, see Deploy your bot to Azure for a complete list of deployment instructions.

추가 정보Further reading