Bot Framework v3.0부터 시작하는 BOT 개발: 예/아니오 대화 상자 표시 - Dialog(2)
기본 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에서는 [예][아니오])로 표시됩니다.
Locale:en-us 등 영어로 설정하면 확인 대화 상자는 [Yes][No]가 됩니다.
Reference
이 문제에 관하여(Bot Framework v3.0부터 시작하는 BOT 개발: 예/아니오 대화 상자 표시 - Dialog(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/annie/items/d5a3bde93944cedb268c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
메시지 수 계산
응답을 만드는 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에서는 [예][아니오])로 표시됩니다.
Locale:en-us 등 영어로 설정하면 확인 대화 상자는 [Yes][No]가 됩니다.
Reference
이 문제에 관하여(Bot Framework v3.0부터 시작하는 BOT 개발: 예/아니오 대화 상자 표시 - Dialog(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/annie/items/d5a3bde93944cedb268c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[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);
}
}
[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);
}
Reference
이 문제에 관하여(Bot Framework v3.0부터 시작하는 BOT 개발: 예/아니오 대화 상자 표시 - Dialog(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/annie/items/d5a3bde93944cedb268c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)