2017-11-21 7 views
-1

사용자로부터받은 간단한 작업 수행 방법에 대한 쿼리입니다. 예 : 합계, 나누기, 곱하기.Bot Framework에서 사용자가 입력 한 변수를 처리하는 방법

저는 초보자입니다. 질문의 단순함으로 인해 미안합니다.

미리 감사드립니다.

+0

I 좋겠 간단 작업하고보다 약간 쉽게로서, 첫 번째 작업에 "Hello World"를 얻을 구축 할 실례가 있습니다. http://aihelpwebsite.com/Blog/EntryId/6/Creating-a-Hello-World-Bot-Using-The-Microsoft-Bot-Framework –

+0

이 테스트는 이미 끝났지 만 2 데이터 처리를 그것이 어떻게 작동하는지보십시오. 이 작업을 수행하는 방법을 알고 계십니까? 미리 감사드립니다. –

답변

2

여기에 수학 연산자를 수행 할 수있는 봇의 예가 나와 있습니다. 이 예제에서는 컨텍스트 개체에서 멀티 턴 봇, 제안 된 동작 및 데이터베이스 ConversationData을 사용하는 방법을 보여줍니다. 솔직히 질문은 매우 형편 없었기 때문에 찾고자하는 바를 정확하게 말하기가 어려웠습니다. 이 GitHub Repo

에서 전체 프로젝트를 찾을 수 있습니다 MessagesController.cs

[BotAuthentication] 
public class MessagesController : ApiController 
{ 
    public async Task<HttpResponseMessage> Post([FromBody]Activity activity) 
    { 
     if (activity.Type == ActivityTypes.Message) 
     { 
      await Conversation.SendAsync(activity,() => new Dialogs.RootDialog()); 
     } 
     else 
     { 
      HandleSystemMessage(activity); 
     } 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     return response; 
    } 

    private Activity HandleSystemMessage(Activity message) 
    { 
     if (message.Type == ActivityTypes.DeleteUserData) 
     { 
     } 
     else if (message.Type == ActivityTypes.ConversationUpdate) 
     { 
      IConversationUpdateActivity update = message; 
      var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials()); 
      if (update.MembersAdded != null && update.MembersAdded.Any()) 
      { 
       foreach (var newMember in update.MembersAdded) 
       { 
        if (newMember.Id != message.Recipient.Id) 
        { 
         var reply = message.CreateReply(); 
         reply.Text = "Please enter 2 numbers seperated by a space"; ; 
         client.Conversations.ReplyToActivityAsync(reply); 
        } 
       } 
      } 
     } 
     return null; 
    } 
} 

RootDialog.cs

[Serializable] 
public class RootDialog : IDialog<object> 
{ 
    public Task StartAsync(IDialogContext context) 
    { 
     context.Wait(MessageReceivedAsync); 

     return Task.CompletedTask; 
    } 

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result) 
    { 
     var activity = await result as Activity; 
     var reply = activity.CreateReply(); 
     int a; 
     int b; 
     int[] numbers = new int[2]; 
     bool success = false; 

     if (!activity.Text.Contains("Add") && 
      !activity.Text.Contains("Subtract") && 
      !activity.Text.Contains("Multiply") && 
      !activity.Text.Contains("Divide")) 
     { 
      try 
      { 
       string[] strNumbers = activity.Text.Split(' '); 
       numbers[0] = Convert.ToInt32(strNumbers[0]); 
       numbers[1] = Convert.ToInt32(strNumbers[1]); 
       context.ConversationData.SetValue("numbers", numbers); 
       reply.Text = "please select an operation"; 
      } 
      catch (Exception e) 
      { 
       reply.Text = "Try again, Please enter 2 numbers seperated by a space"; 
       await context.PostAsync(reply); 
       return; 
      } 
      reply.SuggestedActions = new SuggestedActions() 
      { 
       Actions = new List<CardAction>() 
       { 
        new CardAction() {Title = "Add", Type = ActionTypes.PostBack, Value = "Add"}, 
        new CardAction() {Title = "Subtract", Type = ActionTypes.PostBack, Value = "Subtract"}, 
        new CardAction() {Title = "Multiply", Type = ActionTypes.PostBack, Value = "Multiply"}, 
        new CardAction() {Title = "Divide", Type = ActionTypes.PostBack, Value = "Divide"} 
       } 
      }; 

     } 
     else if (activity.Text.Contains("Add") || 
       activity.Text.Contains("Subtract") || 
       activity.Text.Contains("Multiply") || 
       activity.Text.Contains("Divide")) 
     { 

      numbers =context.ConversationData.GetValue<int[]>("numbers"); 
      a = numbers[0]; 
      b = numbers[1]; 

      switch (activity.Text) 
      { 
       case "Add": 
        reply.Text = Sum(a, b).ToString(); 
        success = true; 
        break; 
       case "Subtract": 
        reply.Text = Difference(a, b).ToString(); 
        success = true; 
        break; 
       case "Multiply": 
        reply.Text = Product(a, b).ToString(); 
        success = true; 
        break; 
       case "Divide": 
        reply.Text = Quotient(a, b).ToString(); 
        success = true; 
        break; 
      } 
     } 
     await context.PostAsync(reply); 
     if (success) 
     { 
      await context.PostAsync("To try it again please enter 2 numbers separated by a space"); 
     } 
     context.Wait(MessageReceivedAsync); 
    } 

    private int Sum(int a, int b) 
    { 
     return a + b; 
    } 
    private int Difference(int a, int b) 
    { 
     return a - b; 
    } 
    private int Product(int a, int b) 
    { 
     return a * b; 
    } 
    private double Quotient(int a, int b) 
    { 
     return (double)a/(double)b; 
    } 

}