대화 흐름 디자인 및 제어Design and control conversation flow

적용 대상: SDK v4APPLIES TO: SDK v4

기존 애플리케이션에서 UI(사용자 인터페이스)는 일련의 화면으로 구성되고, 단일 앱 또는 웹 사이트는 필요에 따라 하나 이상의 화면을 사용하여 사용자와 정보를 교환할 수 있습니다.In a traditional application, the user interface (UI) consists of a series of screens, and a single app or website can use one or more screens as needed to exchange information with the user. 대부분의 애플리케이션은 사용자가 처음에 방문하는 기본 화면으로 시작되고 해당 화면은 새 주문 시작, 제품 찾아보기 또는 도움말 검색 등의 다양한 기능에 대한 다른 화면으로 이동되는 탐색 기능을 제공합니다.Most applications start with a main screen where users initially land, and that screen provides navigation that leads to other screens for various functions like starting a new order, browsing products, or looking for help.

앱 및 웹 사이트처럼 봇은 UI를 포함하지만 화면 대신에 메시지 로 구성됩니다.Like apps and websites, bots have a UI, but it is made up of messages rather than screens. 메시지에 단추, 텍스트 및 기타 요소가 포함되거나 완전히 음성 기반 메시지일 수 있습니다.Messages may contain buttons, text, and other elements, or be entirely speech-based.

기존 애플리케이션 또는 웹 사이트는 동시에 한 화면에서 여러 조각의 정보를 요청할 수 있지만, 봇은 여러 메시지를 사용하여 동일한 양의 정보를 수집합니다.While a traditional application or website can request multiple pieces of information on a screen all at once, a bot will gather the same amount of information using multiple messages. 이 방법으로 사용자로부터 정보를 수집하는 프로세스는 활성 환경이며, 이 환경에서 사용자는 봇과 활성 대화를 진행합니다.In this way, the process of gathering information from the user is an active experience; one where the user is having an active conversation with the bot.

잘 설계 된 봇은 자연 스러운 대화형 흐름을 갖게 됩니다.A well-designed bot will have a conversational flow that feels natural. 봇은 코어 대화를 원활 하 게 처리할 수 있어야 하며 중단을 처리 하거나 토픽을 정상적으로 전환할 수 있어야 합니다.The bot should be able to handle the core conversation seamlessly and be able to handle interruptions or switching topics gracefully.

절차 대화 흐름Procedural conversation flow

Bot을 사용 하는 대화는 일반적으로 봇에서 달성할 수 있는 작업 (절차적 흐름 이라고 함)에 초점을 맞추고 있습니다.Conversations with a bot are generally focused on the task a bot is trying to achieve, which is called a procedural flow. 여기서 봇은 사용자에게 일련의 질문을 하여 작업을 처리하기 전에 필요한 모든 정보를 수집합니다.This is where the bot asks the user a series of questions to gather all the information it needs before processing the task.

절차 대화 흐름에서 사용자가 질문 순서를 정의하고 봇이 정의된 순서대로 질문을 합니다.In a procedural conversation flow, you define the order of the questions and the bot will ask the questions in the order you defined. 대화를 안내 하는 데 집중 하면서 코드를 중앙 집중화 된 상태로 유지 하기 위해 질문을 논리적 그룹으로 구성할 수 있습니다.You can organize the questions into logical groups to keep the code centralized while staying focused on guiding the conversation. 예를 들어, 하나의 모듈에는 사용자가 제품을 찾아보도록 도와주는 논리를 포함하고 별도의 모듈에 사용자가 새 주문을 만들도록 도와주는 논리를 포함하도록 디자인할 수 있습니다.For example, you may design one module to contain the logic that helps the user browse for products and a separate module to contain the logic that helps the user create a new order.

자유 형식에서 순차에 이르는 범위에서 원하는 방식으로 흐르도록 모듈을 구성할 수 있습니다.You can structure these modules to flow in any way you like, ranging from free form to sequential. Bot Framework SDK는 bot 요구 사항에 대 한 모든 대화형 흐름을 구성할 수 있는 대화 상자 라이브러리를 제공 합니다.The Bot Framework SDK provides a dialogs library that allows you to construct any conversational flow your bot needs. 라이브러리에는 일련의 단계를 만들고 사용자 질문을 묻는 메시지를 표시 하는 폭포 대화 상자가 포함 되어 있습니다.The library includes waterfall dialogs for creating a sequence of steps and prompts for asking users questions. 자세한 내용은 대화 상자 라이브러리를 참조 하십시오.For more information, see Dialogs library.

Bot 대화 흐름과 비교한 Application GUI 흐름

기존 응용 프로그램에서 모든 항목은 화면으로 시작 합니다.In a traditional application, everything begins with the main screen. 주 화면이 새 주문 화면을 호출 합니다.The main screen invokes the new order screen. 새 주문 화면은 제품 검색 화면과 같은 다른 화면을 닫거나 호출할 때까지 제어 됩니다.The new order screen remains in control until it either closes or invokes other screens, such as the product search screen. 새 주문 화면이 닫히면 사용자는 기본 화면으로 돌아갑니다.If the new order screen closes, the user is returned to the main screen.

대화 상자를 사용 하는 bot 모든 항목은 루트 대화 상자 에서 시작 합니다.In a bot that uses dialogs, everything begins with the root dialog. 루트 대화 상자는 새 주문 대화 상자 를 호출합니다.The root dialog invokes the new order dialog. 이때 새 주문 대화 상자는 대화를 제어 하 고 제품 검색 대화 상자 와 같은 다른 대화 상자를 닫거나 호출할 때까지 제어를 유지 합니다.At that point, the new order dialog takes control of the conversation and remains in control until it either closes or invokes another dialog, such as the product search dialog. 새 주문 대화 상자를 닫으면 대화의 제어가 루트 대화 상자로 돌아갑니다.If the new order dialog closes, control of the conversation returns back to the root dialog.

대화 상자 라이브러리를 사용 하 여 대화형 흐름을 구현 하는 방법에 대 한 예는 순차 대화 흐름 구현을 참조 하세요.For an example of how to implement a conversational flow using the dialog libraries, see Implement sequential conversation flow.

중단 처리Handle interruptions

사용자가 절차 작업을 하나씩 깔끔하고 정돈된 방식으로 수행한다고 가정해 볼 수 있습니다.It may be tempting to assume that users will perform procedural tasks one by one in a neat and orderly way. 예를 들어 대화 상자를 사용 하는 절차적 대화 흐름에서는 사용자가 루트 대화 상자에서 시작 하 여 새 주문 대화 상자를 호출 합니다.For example, in a procedural conversation flow using dialogs, the user will start at the root dialog and invoke the new order dialog. 새 주문 대화 상자에서 제품 검색 대화 상자를 호출 합니다.From the new order dialog, they invoke the product search dialog. 그런 다음 제품 검색 대화 상자에 나열 된 결과 중 하나를 선택 하면 새 주문 대화 상자가 호출 됩니다.Then when selecting one of the results listed in product search dialog, they invoke the new order dialog. 주문을 완료 하면 루트 대화 상자에 다시 도착 합니다.After completing the order, they arrive back at the root dialog.

사용자가 항상 이런 선형 논리적 경로로 이동한다면 좋겠지만 이런 경우는 거의 없습니다.Although it would be great if users always traveled such a linear, logical path, it seldom occurs. 사용자는 항상 순차적인 순서로 통신 하지 않습니다.People do not always communicate in sequential order. 마음이 자주 바뀌는 경향이 있습니다.They tend to frequently change their minds. 다음과 같은 예제를 참조하세요.Consider the following example:

사용자가 봇의 질문에 대 한 응답으로 질문을 묻습니다.

봇은 절차 중심일 수 있지만, 사용자는 완전히 다른 어떤 작업을 수행하거나 현재 항목과 관련이 없을 수 있는 질문을 하려고 할 수 있습니다.While your bot may be procedural centric, the user may decide to do something entirely different or ask a question that may be unrelated to the current topic. 위의 예제에서 사용자는 봇이 예상하는 예/아니요 응답을 제공하는 대신 질문을 합니다.In the example above, the user asks a question rather than providing the yes/no response that the bot expects. 봇은 어떻게 응답해야 할까요?How should your bot respond?

  • 사용자가 먼저 질문에 답변할 것을 요구합니다.Insist that the user answer the question first.
  • 사용자가 이전에 수행한 모든 작업을 무시하고, 전체 대화 상자 스택을 다시 설정하고, 사용자의 질문에 답변함으로써 처음부터 시작합니다.Disregard everything that the user had done previously, reset the whole dialog stack, and start from the beginning by attempting to answer the user's question.
  • 사용자의 질문에 답변한 다음, 해당 예/아니요 질문으로 돌아가서 다시 시작해 봅니다.Attempt to answer the user's question and then return to that yes/no question and try to resume from there.

최상의 솔루션은 시나리오의 세부 정보와 사용자가 봇의 응답을 합리적으로 예상하는 방법에 따라 결정되므로 이 질문에 대한 ‘올바른’ 답변은 없습니다. There is no right answer to this question, as the best solution will depend upon the specifics of your scenario and how the user would reasonably expect the bot to respond. 일부 중단 유형을 처리 하도록 설계 된 봇의 사용자 중단을 처리 하는 방법을 참조 하세요.See how to Handle user interruptions for a bot that is designed to handle some types of interruptions.

대화 만료Expire a conversation

처음부터 대화를 다시 시작 하는 데 도움이 되는 경우가 있습니다.There are times when it is useful to restart a conversation from the beginning. 예를 들어 사용자가 일정 시간 후에 응답 하지 않는 경우입니다.For instance, if a user does not respond after a certain period of time. 대화를 종료 하는 다양 한 방법은 다음과 같습니다.Different methods for ending a conversation include:

  • 사용자 로부터 메시지를 마지막으로 받은 시간을 추적 하 고, 사용자 로부터 다음 메시지를 받을 때 시간이 미리 구성 된 길이 보다 긴 경우 상태를 지웁니다.Track the last time a message was received from a user, and clear state if the time is greater than a preconfigured length upon receiving the next message from the user.
  • Cosmos DB의 ttl (time to live) 기능과 같은 저장소 계층 기능을 사용 하 여 미리 구성 된 시간 이후에 상태를 지울 수 있습니다.Use a storage layer feature, such as Cosmos DB's time-to-live feature, to clear state after a preconfigured length of time.

자세한 내용은 대화를 만료하는 방법을 참조 하세요.For more information see how to Expire a conversation.

다음 단계Next steps

사용자가 목표를 달성할 수 있도록 하는 방식으로 대화를 통해 사용자 탐색을 관리 하 고 대화형 흐름을 디자인 하는 것은 봇 디자인의 기본적인 과제입니다.Managing the user's navigation across dialogs and designing a conversational flow in a manner that enables users to achieve their goals (even in a non-linear fashion) is a fundamental challenge of bot design. 디자인 봇 탐색 문서는 잘못 설계 된 탐색의 몇 가지 일반적인 문제를 검토 하 고 이러한 트랩을 방지 하기 위한 전략을 설명 합니다.The Design bot navigation article reviews some common pitfalls of poorly designed navigation and discusses strategies for avoiding those traps.