티스토리 뷰
봇 프레임웍의 문서 페이지에 Dialogs라는 페이지에 대해 알아보고 전에 만들었던 kakiBot 페이지를 업데이트 해보도록 하겠습니다.
Part2 : Azure에 배포하고, Bot Framework에 등록하기
Dialog
http://docs.botframework.com/sdkreference/csharp/dialogs.html
1. 개요
다이얼로그 모델은 봇과 사용자간에 가장 대표적인 인터렉션 채널 입니다. 각각의 다이얼로그 모델은 IDialog를 C#클래스에 구현해서 사용 할 수 있습니다. 또한 재사용을 극대화하기 위해 다른 다이얼로그와 함께 사용할 수도 있으며, 다이얼로그 스택을 유지 합니다. 대화 상태는 Bot Connector의 메시지 형태로 저장되어 상태를 관리하지 않는 곳에서도 사용이 가능합니다.
머 이래저래 이야기를 마니 해봐도 이해가 앙가기 때문에 셈플을 바로 보도록 하겠습니다.
2. Echo Bot
기본 에코 봇을 만들어 보죠..지난번 소스를 먼저 살펴 보겠습니다.
public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
// fetch our state associated with a user in a conversation. If we don't have state, we get default(T)
var counter = message.GetBotPerUserInConversationData<int>("counter");
// create a reply message
Message replyMessage = message.CreateReplyMessage($"[{++counter}] {message.Text}라고 했지 말입니다");
// save our new counter by adding it to the outgoing message
replyMessage.SetBotPerUserInConversationData("counter", counter);
// return our reply to the user
return replyMessage;
}
else
{
return HandleSystemMessage(message);
}
}
완전 초간단 Echo Bot소스였습니다.
여기서 대화 부분을 IDialog라는 인터페이스를 상속 받는 클래스로 만들어서 사용하도록 합니다.
일단, bot builder로 검색한 후 설치 합니다.
EchoDialog.cs
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> argument)
{
var message = await argument;
await context.PostAsync($"{message.Text}라고 했지 말입니다.{message.From.Name}");
context.Wait(MessageReceivedAsync);
}
}
MessagesController.cs
public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, () => new EchoDialog());
}
else
{
return HandleSystemMessage(message);
}
}
이렇게 만든 EchoDialog의 동작 방식은 아래와 같습니다.
1) 필요한 구성요소를 인스턴스
2) Bot Connector 메시지로 부터 다이얼로그 상태를 deserialize (다이얼로그 스택 및 상태)
3) Bot이 결정하는 동안 잠시 대기를 한 후 계속 대화
4) 대기열 메시지를 사용자에게 전송
5) 사용자에게 보낸 메시지를 포함한 데이터를 serializes
처음 대화가 시작할 때 Conversation.SendAsync에 전달된 대리자가 EchoDialog를 구성합니다. 이 때 대화 상태는 없고 StartAsync 메소드가 호출 됩니다. 그리고, 새 메시지가 발생하면 MessageReceivedAsync 메소드를 통해서 지속 적으로 메시지가 처리됩니다.
기본적으로는 Bot 템플릿과 동일한 동작을 하지만, 약간더 복잡한 방법으로 동작하나 개발자가 명시적으로 상태를 관리할 필요가 없이 복잡한 대화 상자를 구성할 수 있게 됩니다.
3. Echo Bot with State
이제 상태를 제어하는 몇 가지 대화 상태와 몇 가지 명령을 추가 하는 예제를 만들어 보겠습니다. 여기서는 응답 카운트를 명령에 의해서 재설정 할 것입니다.
{
protected int count = 1;
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> argument)
{
var message = await argument;
if (message.Text == "reset" || message.Text == "재설정")
{
PromptDialog.Confirm(
context,
AfterResetAsync,
"대화 카운트를 재설정 하시겠습니까? (yes/no)",
"yes 혹은 no로 대답해주시기 바랍니다.",
promptStyle: PromptStyle.None);
}
else
{
await context.PostAsync($"{message.From.Name}님의 {this.count++}번째 대화: {message.Text}라고 했지 말입니다.");
context.Wait(MessageReceivedAsync);
}
}
public async Task AfterResetAsync(IDialogContext context, IAwaitable<bool> argument)
{
var confirm = await argument;
if (confirm)
{
count = 1;
await context.PostAsync("카운트를 재설정했습니다.");
}
else
{
await context.PostAsync("카운트를 재설정하지 않았습니다.");
}
context.Wait(MessageReceivedAsync);
}
}
대화중 reset이나 재설정이라고 입력하면, 대화 카운트를 재설정 하겠냐고 물어볼 수 있습니다. 현재는 영어로 yes/no를 입력해야만 하는데.. 음..언젠가 예/아니오가 되겠죠?
페이스북~
그런데 궁금한게..저만 되는 것 맞죠?
'Bot Framework' 카테고리의 다른 글
Bot Framework 시작하기 Part6 - 향상된 카키 샌드위치 주문하기 (2) | 2016.06.07 |
---|---|
Bot Framework 시작하기 Part5 - 카키 샌드위치 주문하기 (2) | 2016.05.31 |
Bot Framework 시작하기 Part3 - Facebook 메신저와 연동하기 (3) | 2016.05.08 |
Bot Framework 시작하기 Part2 - Azure에 배포하고, Bot Framework에 등록하기 (0) | 2016.05.07 |
Bot Framework 시작하기 Part1 (0) | 2016.05.03 |
- Total
- Today
- Yesterday
- LINQ
- uno platform
- ComboBox
- IOT
- kiosk
- Cross-platform
- Behavior
- #prism
- .net 5.0
- visual studio 2019
- Always Encrypted
- Visual Studio 2022
- PRISM
- #uwp
- UWP
- uno-platform
- #Windows Template Studio
- XAML
- Bot Framework
- Windows 10
- ef core
- MVVM
- #MVVM
- WPF
- dotNETconf
- Build 2016
- C#
- windows 11
- Microsoft
- .net
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |