Bot Framework v3.0부터 시작하는 BOT 개발: 예/아니오 대화 상자 표시 - Dialog(2)

Microsoft Bot Framework (V3.0)의 템플릿을 그대로 움직여 보면 그 다음에 커뮤니케이션 프로세스를 다루는 Dialog에서 기본적인 메시지 송수신을 코딩했습니다. 이번에는 이를 적용하여 메시지 수를 계산하는 프로세스를 만듭니다.
기본 Dialog를 사용하여 메시지 송수신에 대화 수를 추가합니다. 「X번째로 Y라고 하는 질문을 한다/확인한다」라고 하는 플로우를 넣고 싶은 등, 현재 어떤 메세지 눈인지 카운트하고 싶은 경우에 사용할 수 있습니다. 또한 메시지 다이얼로그(Yes/No)를 표시하고 입력된 조작을 확인합니다.

Microsoft Bot Framework v3.0부터 시작하는 BOT 개발: 첫 번째 단계
Microsoft Bot Framework v3.0부터 시작하는 BOT 개발 : 커뮤니케이션의 기본 클래스 Dialog (1)

Dialog를 사용한 메시지 송수신 (아래 준비)



개발 환경 준비는 Bot Framework를 사용하기 위한 개발 환경 에서.
Visual Studio 템플릿에서 새 BOT 응용 프로그램 만들기 - 아래 준비에서 Bot Framework 템플릿을 사용할 준비를하고 Dialog를 사용하여 간단한 메시지 수신 및 회신과 같이 MessageController.cs를 편집합니다.

메시지 수 계산 (1)



메시지 수 계산



응답을 만드는 EcoDialog 클래스 대신 다음과 같이 EchoCountDialog라는 클래스를 추가합니다. count 로 메시지수를 카운트해 두고, 응답문을 만들 때 카운트를 늘립니다 (this.count++). "reset"이라는 입력을 받으면 카운트를 재설정합니다. 응답 메시지의 시작 부분에 카운트 수를 문장의 머리에 붙입니다.

MessagesController.cs
[Serializable]
public class EchoCountDialog : IDialog<object>
{
    protected int count = 1;
    public async Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);
    }
    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
    {
        var message = await argument;
        if (message.Text == "reset")
        {
            await context.PostAsync($"会話数をリセットします");
            this.count = 1;
        }
        else
        {
            await context.PostAsync(string.Format("{0}:{1}って言ったね。", this.count++, message.Text));
        }
        context.Wait(MessageReceivedAsync);
    }
}

메시지를 보내고 받는 Post에서도 EchoCountDialog를 호출하도록 변경합니다.

MessageController.cs
[ResponseType(typeof(void))]
public virtual async Task<HttpResponseMessage> Post ([FromBody] Activity activity)
{
    if (activity != null)
    {
        if (activity.GetActivityType()==ActivityTypes.Message)
        {
            //await Conversation.SendAsync(activity, () => new EchoDialog());
            await Conversation.SendAsync(activity, () => new EchoCountDialog());
        }
        else
        {
            HandleSystemMessage(activity);
        }
    }
    return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}

Emulator로 동작 확인 (1)



Bot 애플리케이션의 로컬 실행 및 에뮬레이터 액세스을 참조하여 Visual Studio에서 F5에서 빌드 및 디버그 실행을 시작하고 Bot Framework Channel Emulator에서 메시지를 보냅니다.
메시지 수가 응답 머리에 표시되고 "reset"을 보내면 카운트가 재설정되는지 확인하십시오.
メッセージ数のカウント

메시지 수 계산 (2) : 재설정시 확인 메시지 표시



그 1에서는 "reset"를 수신하면 즉시 리셋을 실시합니다만, 그 2에서는 확인 메세지를 표시해 가부를 확인합니다.
Microsoft.Bot.Builder.Dialogs.PromptDialog에서 Yes/No 대화 상자를 표시하고 Yes 또는 No를 선택하여 ResetCountAsync를 실행합니다.

MessagesController.cs
[Serializable]
public class EchoCountDialog2 : IDialog<object>
{
    protected int count = 1;
    public async Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);
    }
    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
    {
        var message = await argument;
        if (message.Text == "reset")
        {
            PromptDialog.Confirm(context, ResetCountAsync, "リセットしますか?");
        }
        else
        {
            await context.PostAsync(string.Format("{0}:{1}って言ったね。", this.count++, message.Text));
            context.Wait(MessageReceivedAsync);
        }
    }
    public async Task ResetCountAsync(IDialogContext context, IAwaitable<bool> argument)
    {
        var confirm = await argument;
        if (confirm)
        {
        this.count = 1;
            await context.PostAsync("会話数をリセットしました。");
        }
        else
        {
            await context.PostAsync("会話数リセットを中止しました。");
        }
            context.Wait(MessageReceivedAsync);
        }
    }

Post로부터의 호출도 EchoCountDialog2로 변경합니다.

MessageController.cs
[ResponseType(typeof(void))]
public virtual async Task<HttpResponseMessage> Post ([FromBody] Activity activity)
{
    if (activity != null)
    {
        if (activity.GetActivityType()==ActivityTypes.Message)
        {
            //await Conversation.SendAsync(activity, () => new EchoDialog());
            //await Conversation.SendAsync(activity, () => new EchoCountDialog());
            await Conversation.SendAsync(activity, () => new EchoCountDialog2());
        }
        else
        {
            HandleSystemMessage(activity);
        }
    }
    return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}

Emulator로 동작 확인 (2)



이번에는 "Reset"을 보내면 확인 대화 상자가 나타납니다. Emulator의 오른쪽 상단에 있는 Locale은 기본적으로 OS 언어로 설정되어 있고(Locale:ko-kr에서는 [예][아니오])로 표시됩니다.
メッセージ数のカウント(Yes/No 確認ダイアログ(日本語))

Locale:en-us 등 영어로 설정하면 확인 대화 상자는 [Yes][No]가 됩니다.
メッセージ数のカウント(Yes/No 確認ダイアログ(英語))

좋은 웹페이지 즐겨찾기