다음을 통해 공유


구성 요소 및 워터폴 대화창 정보

적용 대상: SDK v4

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

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

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

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

구성 요소 대화 상자

경우에 따라 사용자에게 거리, 도시 및 우편 번호에 대한 값을 제공하도록 요청하는 주소 대화 상자와 같은 다양한 시나리오에서 사용하려는 재사용 가능한 대화 상자를 작성하려고 합니다.

구성 요소 대화 상자는 특정 시나리오를 처리하는 독립적인 대화 상자를 만들고 큰 대화 집합을 보다 관리하기 쉬운 조각으로 나누는 전략을 제공합니다. ** 각 항목은 자체 대화 집합을 가지고 있으며, 포함된 대화 집합과 이름이 충돌하지 않도록 합니다. 자세한 내용은 구성 요소 대화 상자를 참조하세요.

폭포 대화 상자

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

다음 도표는 폭포 단계의 순서와 스택 작업을 보여줍니다. 대화 스택 사용에 대한 세부 정보는 대화 상자 사용 섹션에 있습니다.

메시지가 폭포 단계에 매핑되는 방식의 표현입니다.

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

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

폭포 단계 컨텍스트 속성

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

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

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

프롬프트

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

백그라운드에서 프롬프트는 2단계 대화 상자입니다. 먼저 프롬프트에서 입력을 요청합니다. 두 번째, 유효한 값을 반환하거나, 맨 위에서 다시 프롬프트를 사용하여 시작합니다.

프롬프트에는 프롬프트를 호출할 때 표시되는 프롬프트 옵션이 있습니다. 여기서 프롬프트할 텍스트를 지정할 수 있고, 유효성 검사가 실패하면 다시 시도 프롬프트를 지정하고, 프롬프트에 응답할 수 있는 옵션을 선택할 수 있습니다. 일반적으로 프롬프트 및 재시도 프롬프트 속성은 활동이지만 다양한 프로그래밍 언어로 처리되는 방법에 대한 몇 가지 변형이 있습니다.

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

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

다양한 프롬프트를 사용하는 예제를 보려면 대화 상자 라이브러리를 사용하여 사용자 입력을 수집하는 방법을 살펴보세요.

프롬프트 형식

백그라운드에서 프롬프트는 2단계 대화 상자입니다. 먼저 프롬프트에서 입력을 요청합니다. 둘째, 유효한 값을 반환하거나 맨 위에서 다시 시작하여 다시 시작합니다. 대화 상자 라이브러리는 다양한 유형의 응답을 수집하는 데 각각 사용되는 다양한 기본 프롬프트를 제공합니다. 기본 프롬프트는 숫자의 경우 "10" 또는 "12"와 같은 자연어 입력을 해석하거나 날짜-시간에 대해 "내일" 또는 "금요일 오전 10시"를 해석할 수 있습니다.

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

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

프롬프트 지역 설정

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

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

프롬프트 옵션

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

재산 설명
프롬프트 입력을 요청하는 사용자를 보낼 초기 활동입니다.
다시 시도 프롬프트 첫 번째 입력이 유효성을 검사하지 않은 경우 사용자를 보내는 활동입니다.
선택 선택 프롬프트와 함께 사용할 사용자가 선택할 수 있는 선택 목록입니다.
유효성 검사 사용자 지정 유효성 검사기와 함께 사용할 추가 매개 변수입니다.
스타일 선택 프롬프트 또는 확인 프롬프트에 대한 선택 항목이 사용자에게 표시되는 방법을 정의합니다.

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

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

프롬프트 유효성 검사

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

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

프롬프트 인식기 결과에는 다음과 같은 속성이 있습니다.

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

대화 상자 사용

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

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

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

Run 메서드를 사용하려면 상태 속성 접근자가 대화의 상태에 접근해야 합니다. 접근자가 만들어지고 다른 상태 접근자와 동일한 방식으로 사용되지만 대화 상태를 기반으로 자체 속성으로 만들어집니다. 상태 관리에 대한 세부 정보는 관리 상태 항목에서 찾을 수 있으며 대화 상태 사용은 순차적 대화 흐름 방법에 표시됩니다.

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

대화를 시작하려면

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

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

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

대화를 계속하려면

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

대화 상자를 종료하려면

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

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

팁 (조언)

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

모든 대화 상자를 지우려면

스택에서 모든 대화 상자를 표시하려면 대화 컨텍스트의 모든 대화 취소 메서드를 호출하여 대화 상자 스택을 지울 수 있습니다.

대화 상자 반복

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

비고

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

대화를 분기하다

대화 컨텍스트는 대화 스택을 유지하고 스택의 각 대화 상자에 대해 다음 단계를 추적합니다. 시작 대화 상자 메소드는 자식을 생성하여 해당 대화 상자를 스택의 맨 위에 푸시하며, 끝 대화 상자 메소드는 스택에서 최상위 대화 상자를 팝합니다. 종료 대화 는 일반적으로 종료되는 대화 상자 내에서 호출됩니다.

대화 상자 컨텍스트의 시작 대화 메서드를 호출하고 새 대화 상자의 ID를 제공하여 동일한 대화 집합 내에서 새 대화 상자를 시작할 수 있습니다. 그러면 새 대화 상자가 현재 활성 대화 상자가 됩니다. 원래 대화 상자는 스택에 있지만 대화 컨텍스트의 계속 대화 메서드에 대한 호출은 스택 맨 위에 있는 대화 상자인 활성 대화 상자로만 전송됩니다. 스택에서 대화 상자가 제거되면 대화 컨텍스트는 원래 대화 상자의 중지된 부분에서 스택의 폭포 다음 단계로 계속 진행됩니다.

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

추가 정보