2017-11-21 6 views
-1

私は、ユーザーから受信した簡単な操作を行う方法について質問しています。 例:合計、除算、乗算。ボットフレームワークでユーザーが入力した変数を処理する方法

私は初心者ですが、質問の簡略化のために申し訳ありません。

ありがとうございます。

+0

にプロジェクト全体を見つけることができます上に構築するための実例があります。 http://aihelpwebsite.com/Blog/EntryId/6/Creating-a-Hello-World-Bot-Using-The-Microsoft-Bot-Framework –

+0

このテストはすでに行っていますが、私は2つのデータ処理をどのように動作するかを見てください。 これを行う方法が分かりますか? ありがとうございます。 –

答えて

2

ここに、数学演算子を実行できるボットの例を示します。この例では、マルチターンボット、推奨アクション、およびコンテキストオブジェクトのデータバッグConversationDataの使用方法を示します。正直なところ、あなたの質問は非常に貧弱に形成されていたので、あなたが探していたものを正確に伝えるのは難しいです。あなたはそれが少し簡単な操作よりも簡単とあなたであるように私は、最初の作業の「Hello World」を取得したいこの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; 
    } 

} 
関連する問題