활동 처리기를 사용하는 이벤트 기반 대화

적용 대상: SDK v4

활동 처리기는 봇에 대한 대화형 논리를 구성하는 이벤트 기반 방법입니다. 활동의 각 다른 형식 또는 하위 형식은 서로 다른 유형의 대화형 이벤트를 나타냅니다. 봇의 턴 처리기는 수신된 모든 유형의 활동에 대해 개별 활동 처리기를 호출합니다.

예를 들어 봇이 메시지 활동을 수신하는 경우 턴 처리기는 들어오는 활동을 확인하고 메시지 작업 처리기로 보냅니다. 봇을 빌드할 때 메시지 처리 및 응답에 대한 봇 논리는 메시지 활동 처리기에서 이 작업을 수행합니다. 마찬가지로, 대화에 추가되는 멤버를 처리하는 논리는 멤버가 대화에 추가될 때마다 호출되는 멤버 추가 처리기로 이동합니다.

봇 논리를 구성하는 다른 방법은 봇 작동 방식의 봇 논리 섹션을 참조하세요.

참고 항목

Bot Framework JavaScript, C#및 Python SDK는 계속 지원되지만 Java SDK는 2023년 11월에 종료되는 최종 장기 지원으로 사용 중지됩니다.

Java SDK를 사용하여 빌드된 기존 봇은 계속 작동합니다.

새 봇 빌드의 경우 Power Virtual Agents 사용을 고려하고 올바른 챗봇 솔루션을 선택하는 방법을 읽어 보세요.

자세한 내용은 봇 빌드의 미래를 참조 하세요.

이러한 처리기에 대한 논리를 구현하려면 아래의 샘플 작업 처리기 섹션과 같이 봇에서 이러한 메서드를 재정의합니다. 이러한 각 처리기에는 기본 구현이 없으므로 재정의에 원하는 논리를 추가하기만 하면 됩니다.

순서가 끝날 때 상태를 저장하는 것과 같이 기본 턴 처리기를 재정의하려는 특정 상황이 있습니다. 이 경우에는 먼저 await base.OnTurnAsync(turnContext, cancellationToken);를 호출하여 OnTurnAsync의 기본 구현이 추가 코드 전에 실행되도록 하세요. 이러한 기본 구현은 무엇보다도 다음과 같은 OnMessageActivityAsync나머지 활동 처리기를 호출하는 역할을 합니다.

활동 처리

봇 논리는 하나 이상의 채널에서 들어오는 활동을 처리하고 응답에서 나가는 활동을 생성합니다.

기본 봇 논리는 봇 코드에 정의됩니다. 봇을 작업 처리기로 구현하려면 인터페이스를 구현하는 봇 클래스를 ActivityHandler파생합니다 IBot . ActivityHandler 는 다음과 같은 OnMessageActivityAsync다양한 유형의 활동에 대한 다양한 처리기를 정의합니다 OnMembersAddedAsync. 이러한 메서드는 보호되지만 파생되므로 재정의 ActivityHandler할 수 있습니다.

정의된 처리기는 다음과 같습니다.ActivityHandler

이벤트 처리기 설명
받은 모든 활동 유형 OnTurnAsync 수신된 작업의 유형에 따라 다른 처리기 중 하나를 호출합니다.
받은 메시지 활동 OnMessageActivityAsync 작업을 처리하도록 재정의 message 합니다.
받은 대화 업데이트 활동 OnConversationUpdateActivityAsync 활동에서 conversationUpdate 봇 이외의 멤버가 대화에 참가하거나 떠난 경우 처리기를 호출합니다.
비봇 멤버가 대화에 참가했습니다. OnMembersAddedAsync 대화에 참가하는 멤버를 처리하도록 재정의합니다.
비봇 멤버가 대화를 떠났습니다. OnMembersRemovedAsync 대화를 종료하는 멤버를 처리하도록 재정의합니다.
받은 이벤트 활동 OnEventActivityAsync 활동에서 event 이벤트 유형과 관련된 처리기를 호출합니다.
받은 토큰 응답 이벤트 활동 OnTokenResponseEventAsync 토큰 응답 이벤트를 처리하도록 재정의합니다.
토큰-응답 이외 이벤트 작업이 수신됨 OnEventAsync 다른 유형의 이벤트를 처리하도록 재정의합니다.
받은 메시지 반응 활동 OnMessageReactionActivityAsync 활동에서 messageReaction 메시지에서 하나 이상의 반응이 추가되거나 제거된 경우 처리기를 호출합니다.
메시지에 추가된 메시지 반응 OnReactionsAddedAsync 메시지에 추가된 반응을 처리하도록 이를 재정의합니다.
메시지에서 제거된 메시지 반응 OnReactionsRemovedAsync 메시지에서 제거된 반응을 처리하도록 재정의합니다.
수신된 설치 업데이트 작업 OnInstallationUpdateActivityAsync 활동에서 installationUpdate 봇이 설치 또는 제거되었는지 여부에 따라 처리기를 호출합니다.
봇 설치되어 있음 OnInstallationUpdateAddAsync 이를 재정의하여 봇이 조직 구성 단위 내에 설치된 경우에 대한 논리를 추가합니다.
봇 제거 OnInstallationUpdateRemoveAsync 이를 재정의하여 조직 구성 단위 내에서 봇을 제거할 때의 논리를 추가합니다.
수신된 기타 활동 유형 OnUnrecognizedActivityTypeAsync 달리 처리되지 않은 작업 유형을 처리하도록 재정의합니다.

이러한 처리기에는 turnContext 인바운드 HTTP 요청에 해당하는 들어오는 활동에 대한 정보를 제공하는 처리기가 있습니다. 다양한 작업 유형이 있을 수 있으므로 각 처리기는 순서 컨텍스트 매개 변수에 강력한 형식의 작업을 제공합니다. 대부분의 경우 OnMessageActivityAsync는 항상 처리되고, 일반적으로 가장 많이 사용됩니다.

이 프레임워크의 이전 4.x 버전과 마찬가지로 공용 메서드 OnTurnAsync를 구현하는 옵션도 있습니다. 현재 이 메서드의 기본 구현은 오류 검사 처리한 다음 들어오는 작업의 유형에 따라 각 특정 처리기(예: 이 샘플에서 정의한 두 처리기)를 호출합니다. 대부분의 경우 해당 메서드를 그대로 두고 개별 처리기를 사용할 수 있지만 상황에 따라 사용자 지정 구현 OnTurnAsync이 필요한 경우 여전히 옵션입니다.

Important

메서드를 OnTurnAsync 재정의하는 경우 다른 On<activity>Async 모든 처리기를 호출하거나 해당 처리기를 직접 호출하는 기본 구현을 가져오기 위해 호출 base.OnTurnAsync 해야 합니다. 그렇지 않으면 해당 처리기가 호출되지 않으며 해당 코드가 실행되지 않습니다.

샘플 작업 처리기

예를 들어 대화에 사용자를 환영하기 위해 추가된 멤버를 처리하고 메시지를 처리하여 봇에 보내는 메시지를 에코할 수 있습니다.

public class EchoBot : ActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var welcomeText = "Hello and welcome!";
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
            }
        }
    }
}

다음 단계

  • Microsoft Teams 채널에서는 Teams와 제대로 작동하기 위해 봇이 지원해야 하는 일부 Teams 관련 활동을 소개합니다. Microsoft Teams용 봇 개발의 주요 개념을 이해하려면 Microsoft Teams 봇의 작동 방식을 참조 하세요.
  • 활동 처리기는 턴 간에 대화형 상태를 추적할 필요가 없는 봇을 디자인하는 좋은 방법입니다. 대화 상자 라이브러리사용자와 장기 실행 대화를 관리하는 방법을 제공합니다.