Bot Framework v3.0부터 시작하는 BOT 개발: 커뮤니케이션의 기본 클래스 - Dialog(1)
Microsoft Bot Framework v3.0부터 시작하는 BOT 개발: 첫 번째 단계
다음은 커뮤니케이션 프로세스를 다루는 Dialog에 대해 자세히 설명합니다.
Dialog를 사용한 기본 BOT 동작 개발
BOT 로서의 기본 조작, 메세지를 수신하면 내용을 취득해 응답을 돌려주는 프로세스를 작성해 갑니다.
 Visual Studio 템플릿에서 새 BOT 응용 프로그램 만들기 - 아래 준비
 Bot Framework를 사용하기 위한 개발 환경 을 참고로 개발 환경을 작성해, Visual Studio 템플릿에서 Bot 응용 프로그램 만들기 와 같은 프로세스로 신규 어플리케이션을 작성합니다. 이번에는 EchoBot이라는 이름으로 작성하고 있습니다.
 
템플릿에서 만든 MessageController.cs(Controller 폴더 아래에 있음)를 편집합니다.
 
먼저 Bot.Builder.Dialogs에 대한 참조를 추가합니다.
MessageController.csusing Microsoft.Bot.Builder.Dialogs;
템플릿에서는 Post 클래스에서 수신 메시지를 바탕으로 응답을 돌려주는 코드가 작성되고 있습니다만, 일단 이 부분을 삭제 or 코멘트 아웃 합니다.
MessageController.cspublic class MessagesController : ApiController
    {
        : 
/// <summary>
     /// POST: api/Messages
     /// Receive a message from a user and reply to it
     /// </summary>
     //public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
     //    {
     //    if (activity.Type == ActivityTypes.Message)
               :
     //    }
     //    var response = Request.CreateResponse(HttpStatusCode.OK);
     //    return response;
     //}
 Dialog를 사용하여 간단한 메시지 수신 및 회신
사용자로부터 메시지를 받았는지 여부는 Microsoft.Bot.Connector.Activity.GetActivityType으로 진단합니다.
ActivityType.Message 에서는 응답을 작성해 송신하는 Post 클래스를 MessagesController 클래스내에 아래와 같이 작성합니다. Microsoft.Bot.Builder.Dialogs.Conversations.SendAsync에서 받은 메시지에 응답할 수 있습니다. 응답을 작성하는 클래스는 EchoDialog입니다 (→ 다음 항목으로 작성합니다).
ActivityType.Message 이외의 Activity 의 경우는, 템플릿의 HandleSystemMessage 를 그대로 이용합니다.
두 경우 모두 HttpStatusCode.Accepted(=202)를 반환합니다.
MessageController.cspublic class MessagesController : ApiController
    {
        :
        [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());
                }
                else
                {
                    HandleSystemMessage(activity);
                }
            }
            return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
        }
템플릿에서는 activity.Type == ActivityTypes.Message 로 직접 Activity 를 판정하고 있습니다만, 상기에서는 먼저 activity != null 로 Activity 의 유무를 판정하는 코드가 되어 있습니다.
그런 다음 Post 클래스 아래에 응답을 만드는 EcoDialog 클래스를 만듭니다. 사용자의 메시지는 Microsoft.Bot.Connector.IMessageActivity에서 검색할 수 있으며 아래 코드에서는 이를 단순히 반환하는 응답을 생성합니다.
MessageController.cspublic class MessagesController : ApiController
    {
        :
        [Serializable]
        public class EchoDialog : IDialog<object>
        {
            public async Task StartAsync(IDialogContext context)
            {
                context.Wait(MessageReceivedAsync);
            }
            public async Task MessageReceivedAsync(IDialogContext context,
                IAwaitable<IMessageActivity> argument)
            {
                var message = await argument;
                await context.PostAsync($"「{message.Text}」って言ったよね。");
                context.Wait(MessageReceivedAsync);
            }
        }
이 간단한 응답 작성으로는 별로 문제 없습니다만, 대화수를 카운트하는 경우 등 Serializable 를 잊지 않고.
 Emulator에서 동작 확인
지금까지의 내용으로 동작을 확인합니다. Bot 애플리케이션의 로컬 실행 및 에뮬레이터 액세스 마찬가지로 Visual Studio에서 F5에서 빌드 및 디버그 실행을 시작하고 Bot Framework Channel Emulator에서 메시지를 보냅니다. 입력한 메시지와 같은 문장이 대답되면 OK입니다.
  
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Bot Framework v3.0부터 시작하는 BOT 개발: 커뮤니케이션의 기본 클래스 - Dialog(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/annie/items/bd4248bb07eafcf83a3a
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
using Microsoft.Bot.Builder.Dialogs;
public class MessagesController : ApiController
    {
        : 
/// <summary>
     /// POST: api/Messages
     /// Receive a message from a user and reply to it
     /// </summary>
     //public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
     //    {
     //    if (activity.Type == ActivityTypes.Message)
               :
     //    }
     //    var response = Request.CreateResponse(HttpStatusCode.OK);
     //    return response;
     //}
public class MessagesController : ApiController
    {
        :
        [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());
                }
                else
                {
                    HandleSystemMessage(activity);
                }
            }
            return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
        }
public class MessagesController : ApiController
    {
        :
        [Serializable]
        public class EchoDialog : IDialog<object>
        {
            public async Task StartAsync(IDialogContext context)
            {
                context.Wait(MessageReceivedAsync);
            }
            public async Task MessageReceivedAsync(IDialogContext context,
                IAwaitable<IMessageActivity> argument)
            {
                var message = await argument;
                await context.PostAsync($"「{message.Text}」って言ったよね。");
                context.Wait(MessageReceivedAsync);
            }
        }
Reference
이 문제에 관하여(Bot Framework v3.0부터 시작하는 BOT 개발: 커뮤니케이션의 기본 클래스 - Dialog(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/annie/items/bd4248bb07eafcf83a3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)