사용자 입력을 수집하도록 고유한 메시지 만들기Create your own prompts to gather user input

적용 대상: SDK v4APPLIES TO: SDK v4

봇과 사용자 간의 대화에는 종종 사용자에게 정보를 요청하고(프롬프트), 사용자의 응답을 구문 분석한 다음, 해당 정보에 대한 작업을 수행하는 것이 포함됩니다.A conversation between a bot and a user often involves asking (prompting) the user for information, parsing the user's response, and then acting on that information. 봇은 대화의 컨텍스트를 추적하여 해당 동작을 관리하고 이전의 질문에 대한 답변을 기억할 수 있어야 합니다.Your bot should track the context of a conversation, so that it can manage its behavior and remember answers to previous questions. 봇의 상태 는 들어오는 메시지에 적절하게 응답하기 위해 추적하는 정보입니다.A bot's state is information it tracks to respond appropriately to incoming messages.

대화 라이브러리는 사용자가 사용할 수 있는 더 많은 기능을 제공하는 기본 제공 프롬프트를 제공합니다.The dialogs library provides built-in prompts that provide more functionality that users can use. 이러한 프롬프트의 예는 순차적 대화 흐름 구현 문서에서 확인할 수 있습니다.Examples of those prompts can be found in the Implement sequential conversation flow article.

필수 구성 요소Prerequisites

샘플 코드 정보About the sample code

샘플 봇은 사용자에게 일련의 질문을 하고, 몇 가지 답변의 유효성을 검사하며, 입력을 저장합니다.The sample bot asks the user a series of questions, validates some of their answers, and saves their input. 다음 다이어그램은 봇, 사용자 프로필 및 대화 흐름 클래스 간의 관계를 보여줍니다.The following diagram shows the relationship between the bot, user profile, and conversation flow classes.

C의 사용자 지정 프롬프트 #

  • 봇에서 수집할 사용자 정보에 대한 UserProfile 클래스입니다.A UserProfile class for the user information that the bot will collect.
  • 사용자 정보를 수집하는 동안 이 대화 상태를 제어하는 ConversationFlow 클래스입니다.A ConversationFlow class to control our conversation state while gathering user information.
  • 대화 ConversationFlow.Question 중인 위치를 추적하기 위한 내부 열거형입니다.An inner ConversationFlow.Question enumeration for tracking where you are in the conversation.

사용자 상태는 사용자의 이름, 나이 및 선택한 날짜를 추적하고 대화 상태는 사용자에게 방금 요청한 내용을 추적합니다.The user state will track the user's name, age, and chosen date, and conversation state will track what you've just asked the user. 이 봇을 배포할 계획이 없으므로 메모리 스토리지 를 사용하도록 사용자 및 대화 상태를 모두 구성합니다.Since you don't plan to deploy this bot, you'll configure both user and conversation state to use memory storage.

봇의 메시지 턴 처리기와 사용자 및 대화 상태 속성을 사용하여 대화 흐름 및 입력 컬렉션을 관리합니다.You use the bot's message turn handler plus user and conversation state properties to manage the flow of the conversation and the collection of input. 봇에서 메시지 턴 처리기를 반복할 때마다 받은 상태 속성 정보를 기록합니다.In your bot, you'll record the state property information received during each iteration of the message turn handler.

대화 및 사용자 개체 만들기Create conversation and user objects

시작 시 사용자 및 대화 상태 개체를 만들고 봇 생성자에서 종속성 주입을 통해 해당 개체를 사용합니다.Create the user and conversation state objects at startup and consume them via dependency injection in the bot constructor.

Startup.cs [!code-csharpStartup.cs]Startup.cs [!code-csharpStartup.cs]

Bots/CustomPromptBot.cs [!code-csharpconstructor]Bots/CustomPromptBot.cs [!code-csharpconstructor]

속성 접근자 만들기Create property accessors

사용자 프로필 및 대화 흐름 속성에 대한 속성 접근자를 만든 다음, GetAsync을 호출하여 상태에서 속성 값을 검색합니다.Create property accessors for the user profile and conversation flow properties and then call GetAsync to retrieve the property value from state.

Bots/CustomPromptBot.cs [!code-csharpOnMessageActivityAsync]Bots/CustomPromptBot.cs [!code-csharpOnMessageActivityAsync]

턴이 끝나기 전에 SaveChangesAsync를 호출하여 스토리지에 상태 변경 내용을 작성합니다.Before the turn ends, call SaveChangesAsync to write any state changes to storage.

    // Save changes.
    await _conversationState.SaveChangesAsync(turnContext, false, cancellationToken);
    await _userState.SaveChangesAsync(turnContext, false, cancellationToken);
}

봇의 메시지 턴 처리기The bot's message turn handler

메시지 작업을 처리할 때 메시지 처리기는 도우미 메서드를 사용하여 대화를 관리하고 사용자에게 메시지를 표시합니다.When handling message activities, the message handler uses a helper method to manage the conversation and prompt the user. 도우미 메서드는 다음 섹션에 설명되어 있습니다.The helper method is described in the following section.

Bots/CustomPromptBot.cs [!code-csharpmessage handler]Bots/CustomPromptBot.cs [!code-csharpmessage handler]

사용자 프로필 작성Filling out the user profile

봇은 이전 턴에서 요청된 봇의 질문에 따라 정보를 묻는 메시지를 사용자에게 표시합니다.The bot prompts the user for information, based on which question, if any, that the bot asked on the previous turn. 유효성 검사 메서드를 사용하여 입력을 구문 분석합니다.Input is parsed using a validation method.

각 유효성 검사 메서드는 비슷한 디자인을 따릅니다.Each validation method follows a similar design:

  • 반환 값은 입력이 이 질문에 대한 유효한 답변인지 여부를 나타냅니다.The return value indicates whether the input is a valid answer for this question.
  • 유효성 검사를 통과하면 구문 분석되고 정규화된 값이 생성되어 저장됩니다.If validation passes, it produces a parsed and normalized value to save.
  • 유효성 검사가 실패하면 봇에서 해당 정보를 다시 요청할 수 있는 메시지를 생성합니다.If validation fails, it produces a message with which the bot can ask for the information again.

유효성 검사 메서드는 다음 섹션에 설명되어 있습니다.The validation methods are described in the following section.

Bots/CustomPromptBot.cs [!code-csharpFillOutUserProfileAsync]Bots/CustomPromptBot.cs [!code-csharpFillOutUserProfileAsync]

입력 구문 분석 및 유효성 검사Parse and validate input

봇은 다음 조건을 사용하여 입력의 유효성을 검사합니다.The bot uses the following criteria to validate input.

  • name(이름)은 비어 있지 않은 문자열이어야 합니다.The name must be a non-empty string. 공백을 잘라서 정규화합니다.It's normalized by trimming white-space.
  • age(나이)는 18~120여야 합니다.The age must be between 18 and 120. 정수를 반환하여 정규화합니다.It's normalized by returning an integer.
  • date(날짜)는 앞으로 한 시간 이내의 날짜 또는 시간이어야 합니다.The date must be any date or time at least an hour in the future. 구문 분석된 입력의 날짜 부분만 반환하여 정규화합니다.It's normalized by returning just the date portion of the parsed input.

참고

보존 기간 및 날짜 입력의 경우 Microsoft/인식자 텍스트 라이브러리를 사용 하 여 초기 구문 분석을 수행 합니다.For the age and date input, you use the Microsoft/Recognizers-Text libraries to perform the initial parsing. 샘플 코드를 제공 하는 동안 텍스트 인식자 라이브러리가 작동 하는 방식을 설명 하지 않으며이는 입력을 구문 분석 하는 한 가지 방법일 뿐입니다.While you provide sample code, you do not explain how the text recognizers libraries work, and this is just one way to parse the input. 이러한 라이브러리에 대 한 자세한 내용은 리포지토리를 참조 하세요 README .For more information about these libraries, see the repository's README.

Bots/CustomPromptBot.cs [!code-csharpvalidation methods]Bots/CustomPromptBot.cs [!code-csharpvalidation methods]

로컬로 봇 테스트Test the bot locally

봇을 로컬로 테스트하기 위해 Bot Framework Emulator를 다운로드하여 설치합니다.Download and install the Bot Framework Emulator to test the bot locally.

  1. 샘플을 머신에서 로컬로 실행합니다.Run the sample locally on your machine. 지침이 필요한 경우 README 에는 c # 샘플, JS 샘플또는 Python 샘플에 대 한 파일을 참조 하세요.If you need instructions, refer to the README file for C# sample, JS sample, or the Python sample.
  2. 아래와 같이 Emulator를 사용 하 여 테스트 합니다.Test it using the Emulator as shown below.

Emulator의 샘플 상호 작용

추가 리소스Additional resources

대화 라이브러리는 대화 관리의 다양한 측면을 자동화하는 클래스를 제공합니다.The Dialogs library provides classes that automate many aspects of managing conversations.

다음 단계Next step