다음을 통해 공유


구성 요소 및 폭포 대화 정보

적용 대상: SDK v4

대화 상자는 몇 가지 다른 형식으로 제공됩니다. 이 문서에서는 구성 요소, 폭포 및 프롬프트 대화 상자에 대해 설명합니다. 일반적으로 대화 상자에 대한 자세한 내용은 대화 상자 라이브러리 문서를 참조하세요. 적응형 대화에 대한 자세한 내용은 적응형 대화 소개를 참조하세요.

폭포 대화 상자(또는 폭포)는 봇이 선형 프로세스를 통해 사용자를 안내할 수 있도록 단계 시퀀스를 정의합니다. 이러한 대화 상자는 구성 요소 대화 상자의 컨텍스트 내에서 작동하도록 설계되었습니다.

구성 요소 대화 상자는 집합의 대화 상자에서 폭포 대화 상자 호출 프롬프트 대화 상자 또는 다른 폭포 대화 상자와 같은 집합의 다른 대화 상자를 호출할 수 있도록 하는 컨테이너 대화의 한 유형입니다. 구성 요소 대화 상자는 폭포 대화 상자, 프롬프트 등과 같은 자식 대화 집합을 관리합니다. 구성 요소 대화 상자를 디자인하여 특정 작업을 처리하고 동일한 봇 또는 여러 봇에서 다시 사용할 수 있습니다.

프롬프트 대화 상자 (프롬프트)는 숫자, 날짜 또는 이름 등과 같은 특정 유형의 정보를 사용자에게 요청하도록 설계된 대화 상자입니다. 프롬프트는 구성 요소 대화 상자에서 폭포 대화와 함께 작동하도록 설계되었습니다.

구성 요소 대화

사용자에게 거리, 도시 및 우편 번호에 대한 값을 제공하도록 요청하는 주소 대화와 같이 다른 시나리오에서 사용할 재사용 가능한 대화를 작성하려는 경우가 있습니다.

구성 요소 대화는 큰 대화 세트를 관리가 용이한 더 작은 구성 요소로 분할하여 특정 시나리오를 처리하는 독립적인 대화를 만드는 전략을 제공합니다. 이러한 각 구성 요소에는 자체의 고유한 대화 세트가 있으며, 이 대화 세트가 포함된 대화 세트를 사용하여 이름 충돌을 방지할 수 있습니다. 자세한 내용은 구성 요소 대화 상자를 참조하세요.

폭포 대화

폭포 대화는 사용자로부터 정보를 수집하거나 일련의 작업을 통해 사용자를 안내하는 데 일반적으로 사용되는 대화의 특정 구현입니다. 대화의 각 단계는 폭포 단계 컨텍스트(step) 매개 변수를 사용하는 비동기 함수로 구현됩니다. 각 단계에서 봇은 사용자에게 입력을 요청 하거나 자식 대화 상자를 시작할 수 있지만 프롬프트인 경우가 많습니다. 응답을 기다린 다음 결과를 다음 단계로 전달합니다. 첫 번째 함수의 결과는 그 다음 함수에 인수로 전달됩니다.

다음 다이어그램에는 폭포 단계의 시퀀스와 수행되는 스택 작업을 보여줍니다. 대화 스택을 사용하는 방법에 대한 자세한 내용은 대화 사용 섹션을 참조하세요.

메시지가 폭포 단계에 매핑되는 방식을 나타냅니다.

폭포 단계 내에서 폭포 대화 상자의 컨텍스트는 해당 폭포 단계 컨텍스트에 저장됩니다. 단계 컨텍스트는 대화 상자 컨텍스트와 유사하며 현재 턴 컨텍스트 및 상태에 대한 액세스를 제공합니다. 폭포 단계 컨텍스트 개체를 사용하여 폭포 단계 내에 설정된 대화 상자와 상호 작용합니다.

일반적으로 봇의 턴 논리에서 대화 턴 결과의 상태만 확인하면 되지만, 대화의 폭포 단계 내 또는 봇의 OnTurn 처리기에서 대화의 반환 값을 처리할 수 있습니다. 폭포 단계 내에서 대화 상자는 폭포 단계 컨텍스트의 result 속성에 반환 값을 제공합니다.

폭포 단계 컨텍스트 속성

폭포 단계 컨텍스트에는 다음 속성이 포함됩니다.

  • 옵션: 대화에 대한 입력 정보가 포함되어 있습니다.
  • : 컨텍스트에 추가할 수 있는 정보가 포함되어 있으며 후속 단계로 전달됩니다.
  • 결과: 이전 단계의 결과가 포함되어 있습니다.

또한 다음 메서드(C#의 NextAsync , JavaScript 및 Python의 다음)는 동일한 턴 내에서 폭포 대화 상자의 다음 단계를 계속 진행하여 필요한 경우 봇이 특정 단계를 건너뛸 수 있도록 합니다.

프롬프트

대화 라이브러리 내의 프롬프트는 사용자에게 정보를 요청하고 해당 응답을 평가하는 쉬운 방법을 제공합니다. 예를 들어 숫자 프롬프트의 경우 요청하는 질문 또는 정보를 지정하고 프롬프트가 유효한 숫자 응답을 받았는지 자동으로 확인합니다. 이 경우 대화를 계속할 수 있습니다. 그렇지 않으면 유효한 대답을 위해 사용자에게 다시 표시됩니다.

프롬프트는 내부적으로 두 가지 단계로 수행되는 대화입니다. 먼저 프롬프트에서 입력을 요청하며, 다음으로 유효한 값을 반환하거나 다시 프롬프트를 사용하여 처음부터 시작합니다.

프롬프트에는 프롬프트가 호출될 때 제공되는 프롬프트 옵션이 있습니다. 여기서는 프롬프트에 표시할 텍스트, 유효성 검사가 실패하는 경우의 재시도 프롬프트 및 프롬프트에 응답하기 위한 선택 항목을 지정할 수 있습니다. 일반적으로 프롬프트 및 재시도 프롬프트 속성은 활동이지만, 다양한 프로그래밍 언어로 처리되는 방식에 약간의 차이가 있습니다.

또한 프롬프트를 만들 때 이에 대한 몇 가지 사용자 지정 유효성 검사를 추가하도록 선택할 수 있습니다. 예를 들어 숫자 프롬프트를 사용하여 파티 크기를 가져오려고 했지만 파티 크기는 2보다 크고 12보다 작아야 합니다. 프롬프트는 먼저 유효한 숫자를 받았는지 확인한 다음, 제공된 경우 사용자 지정 유효성 검사를 실행합니다. 사용자 지정 유효성 검사에 실패하면 위와 같이 사용자를 다시 표시합니다.

프롬프트가 완료되면 요청된 결과 값을 명시적으로 반환합니다. 해당 값이 반환되면 기본 제공 프롬프트 유효성 검사와 제공된 추가 사용자 지정 유효성 검사를 모두 통과했는지 확인할 수 있습니다.

다양한 프롬프트를 사용하는 방법에 대한 예제는 대화 라이브러리를 사용하여 사용자 입력을 수집하는 방법을 참조하세요.

프롬프트 형식

프롬프트는 내부적으로 두 가지 단계로 수행되는 대화입니다. 먼저 프롬프트에서 입력을 요청합니다. 둘째, 유효한 값을 반환하거나, 다시 프롬프트를 사용하여 맨 위에서 다시 시작합니다. 대화 라이브러리는 각각 다른 유형의 응답을 수집하는 데 사용되는 다양한 기본 프롬프트를 제공합니다. 기본 프롬프트는 "열" 또는 "열둘"과 같은 자연어 입력을 숫자로 해석하거나 "내일" 또는 "금요일 10시"를 날짜-시간으로 해석할 수 있습니다.

prompt Description 반환
첨부 파일 프롬프트 문서 또는 이미지와 같은 하나 이상의 첨부 파일을 요청합니다. 첨부 파일 개체의 컬렉션
선택 항목 프롬프트 일단의 옵션에서 선택하도록 요청합니다. 찾은 선택 항목 개체
확인 프롬프트 확인을 요청합니다. 부울 값입니다.
날짜-시간 프롬프트 날짜-시간을 요청합니다. 날짜-시간 확인 개체의 컬렉션
숫자 프롬프트 숫자를 요청합니다. 숫자 값
텍스트 프롬프트 일반 텍스트 입력을 요청합니다. 문자열입니다.

사용자에게 입력을 요청하려면 텍스트 프롬프트와 같은 기본 제공 클래스 중 하나를 사용하여 프롬프트를 정의하고 대화 집합에 이를 추가합니다. 프롬프트에는 대화 세트 내에서 고유해야 하는 고정 ID가 있습니다. 각 프롬프트에 대해 사용자 지정 유효성 검사기를 사용할 수 있으며, 일부 프롬프트의 경우 기본 로캘을 지정할 수 있습니다.

프롬프트 로캘

로캘은 선택 항목, 확인, 날짜-시간숫자 프롬프트의 언어별 동작을 결정하는 데 사용됩니다. 임의의 지정된 사용자 입력에 대해 채널이 사용자의 메시지에서 로캘 속성을 제공한 경우 해당 로캘이 사용됩니다. 그렇지 않으면 프롬프트의 생성자를 호출하거나 나중에 설정하여 프롬프트의 기본 로캘이 설정되면 해당 로캘이 사용됩니다. 두 로캘이 모두 제공되지 않으면 영어("en-us")가 로캘로 사용됩니다.

로캘은 언어 또는 언어 패밀리를 나타내는 2자, 3자 또는 4자 ISO 639 코드입니다.

프롬프트 옵션

단계 컨텍스트 ‘prompt’ 메서드의 두 번째 매개 변수는 다음과 같은 속성이 있는 ‘프롬프트 옵션’ 개체를 사용합니다.

속성 Description
Prompt 사용자 입력을 요청하기 위해 사용자에게 보내는 초기 활동입니다.
Retry prompt 첫 번째 입력의 유효성이 검사되지 않은 경우 사용자를 보내는 활동입니다.
Choices 선택 항목 프롬프트에서 사용하기 위해 사용자가 선택할 수 있는 선택 항목 목록입니다.
Validations 사용자 지정 유효성 검사기에 사용할 추가 매개 변수입니다.
Style 선택 프롬프트 또는 확인 프롬프트의 선택 항목을 사용자에게 표시하는 방법을 정의합니다.

사용자에게 보낼 초기 프롬프트 작업을 항상 지정하고, 사용자의 입력이 유효성을 검사하지 않는 경우 인스턴스에 대한 재시도 프롬프트를 지정해야 합니다.

사용자의 입력이 유효하지 않으면 재시도 프롬프트가 사용자에게 전송됩니다. 지정한 재시도가 없으면 초기 프롬프트가 사용됩니다. 그러나 유효성 검사기 내에서 활동을 사용자에게 다시 보내는 경우에는 다시 시도 프롬프트가 전송되지 않습니다.

프롬프트 유효성 검사

값을 폭포의 다음 단계로 반환하기 전에 프롬프트 응답의 유효성을 검사할 수 있습니다. 유효성 검사기 함수는 프롬프트 유효성 검사기 컨텍스트 매개 변수를 사용하며, 입력이 유효성 검사를 통과하는지 여부를 나타내는 부울을 반환합니다. 프롬프트 유효성 검사기 컨텍스트에 포함되는 속성은 다음과 같습니다.

속성 Description
컨텍스트 봇에 대한 현재 턴 컨텍스트입니다.
Recognized 인식기에서 처리한 사용자 입력에 대한 정보가 포함된 프롬프트 인식기 결과입니다.
옵션 프롬프트를 시작하는 호출에 제공된 프롬프트 옵션을 포함합니다.

프롬프트 인식기 결과에 포함되는 속성은 다음과 같습니다.

속성 Description
성공함 인식기에서 입력을 구문 분석할 수 있는지 여부를 나타냅니다.
인식기에서 반환하는 값입니다. 필요한 경우 유효성 검사 코드에서 이 값을 수정할 수 있습니다.

대화 사용

대화는 대화 스택이라고 하는 프로그래밍 방식의 스택으로 간주할 수 있으며, 한 스택에서 전달하고 비어 있는 경우 대체 역할을 수행하는 턴 처리기를 사용합니다. 해당 스택의 최상위 항목은 활성 대화 상자로 간주되며 대화 컨텍스트는 모든 입력을 활성 대화 상자로 전달합니다.

대화 상자가 시작되면 스택으로 푸시되고 현재 대화 상자가 됩니다. 이 대화는 종료될 때까지 활성 대화 상자로 유지되고, 대화 바꾸기 메서드에 의해 제거되거나, 다른 대화 상자가 스택에 푸시되고(턴 처리기 또는 활성 대화 자체에 의해) 활성 대화 상자가 됩니다. 새 대화 상자가 종료되면 스택에서 팝되고 다음 대화 상자가 다시 활성 대화 상자가 됩니다. 이렇게 하면 아래에 설명된 대화 상자 반복 또는 대화 분기가 허용됩니다.

실행 대화 확장 메서드를 사용하여 루트 대화 상자를 시작하거나 계속할 수 있습니다. 봇 코드에서 대화 상자 실행 확장 메서드를 호출하면 기존 대화 상자가 계속 진행되거나 스택이 현재 비어 있는 경우 대화 상자의 새 인스턴스가 시작됩니다. 컨트롤 및 사용자 입력은 스택의 활성 대화 상자로 이동합니다.

실행 메서드를 사용하려면 대화 상태에 액세스하기 위해 상태 속성 접근 자가 필요합니다. 접근자는 다른 상태 접근자와 동일한 방식으로 만들어지고 사용되지만, 대화 상태에 기반한 자체 속성으로 만들어집니다. 관리 상태에 대한 자세한 내용은 상태 관리 항목에서 확인할 수 있으며, 대화 상태를 사용하는 방법은 순차적 대화 흐름 방법에 나와 있습니다.

대화 상자 내에서 대화 컨텍스트에 액세스할 수 있으며 이를 사용하여 다른 대화 상자를 시작하고, 현재 대화 상자를 종료하고, 다른 작업을 수행할 수 있습니다.

대화 상자를 시작하려면

폭포 대화 상자 내에서 시작 대화 상자, 프롬프트 또는 바꾸기 대화 메서드를 사용하여 폭포 대화 상자의 컨텍스트로 시작하려는 대화 상자의 대화 ID를 전달합니다.

  • 프롬프트 및 시작 대화 상자 메서드는 참조된 대화 상자의 새 인스턴스를 스택의 맨 위로 푸시합니다.
  • 대체 대화 상자 메서드는 현재 대화 상자를 스택에서 삭제하고 대체 대화 상자를 스택 위로 푸시합니다. 대체된 대화 상자는 취소되고 인스턴스에 포함된 모든 정보는 삭제됩니다.

options 매개 변수를 사용하여 대화 상자의 새 인스턴스로 정보를 전달합니다. 새 대화 상자에 전달된 옵션은 대화 상자의 어느 단계에서든 단계 컨텍스트의 options 속성을 통해 액세스할 수 있습니다. 자세한 내용은 분기 및 루프를 사용하여 고급 대화 흐름을 만드는 방법을 참조하세요.

대화를 계속하려면

폭포 대화 상자 내에서 단계 컨텍스트의 속성을 사용하여 턴 간에 상태를 유지합니다. 이전 턴에서 이 컬렉션에 추가된 모든 값을 후속 턴에서 사용할 수 있습니다. 자세한 내용은 분기 및 루프를 사용하여 고급 대화 흐름을 만드는 방법을 참조하세요.

대화 상자를 종료하려면

폭포 대화 상자 내에서 끝 대화 메서드 를 사용하여 스택에서 대화 상자를 터뜨려 종료합니다. 종료 대화 메서드는 선택적 결과를 부모 컨텍스트(예: 호출한 대화 상자 또는 봇의 순서 처리기)로 반환할 수 있습니다. 이 메서드는 현재 인스턴스를 종료하기 위해 대화 내에서 가장 자주 호출됩니다.

대화 종료 메서드는 대화 컨텍스트가 있는 모든 위치에서 호출할 수 있지만, 현재 활성 대화에서 호출된 봇에 표시됩니다.

대화 상자의 끝에서 종료 대화 메서드를 명시적으로 호출하는 것이 가장 좋습니다.

모든 대화를 지우려면

모든 대화 상자를 스택에서 삭제하려면 대화 상자 컨텍스트의 cancel all dialogs 메서드를 호출하여 대화 상자 스택을 지울 수 있습니다.

대화 상자 반복

대화 바꾸기 메서드를 사용하여 대화를 자체적으로 바꿔 루프를 만들 수 있습니다. 이는 복잡한 상호 작용을 처리하는 좋은 방법이며 메뉴를 관리하는 한 가지 기술입니다.

참고

현재 대화에 대한 내부 상태를 유지해야 하는 경우 대체 대화 메서드 호출에서 대화 상자의 새 인스턴스에 정보를 전달한 다음 대화 상자를 적절하게 초기화해야 합니다.

대화 분기

대화 컨텍스트는 대화 스택을 유지하고 스택의 각 대화에 대한 다음 단계를 추적합니다. 대화의 대화 시작 메서드는 자식 대화를 만들어 해당 대화를 스택의 맨 위로 푸시하고, 대화 종료 메서드는 스택에서 맨 위의 대화를 꺼냅니다. 대화 종료는 일반적으로 종료되는 대화 내에서 호출됩니다.

대화 상자는 대화 상자 컨텍스트의 begin dialog 메서드를 호출하고, 새 대화 상자가 현재 활성 대화 상자가 되도록 새 대화 상자의 ID를 제공하여 동일한 대화 상자 집합 내에서 새 대화 상자를 시작할 수 있습니다. 원래 대화 상자는 여전히 스택에 있지만, 대화 상자 컨텍스트의 continue dialog 메서드에 대한 호출은 스택 맨 위에 있는 대화 상자인 활성 대화 상자에만 전송됩니다. 대화 상자가 스택에서 사라지면 대화 상자 컨텍스트가 원래 대화 상자에서 사라졌던 스택에서 폭포의 다음 단계로 다시 시작됩니다.

따라서 사용 가능한 대화 상자 집합에서 시작할 대화 상자를 조건부로 선택할 수 있는 단계를 하나의 대화 상자에 포함하여 대화 흐름 내에 분기를 만들 수 있습니다.

추가 정보