将LUIS与FormFlow集成

时间:2016-11-15 13:11:10

标签: c# botframework luis formflow

我创建了一个机器人,里面有一个FormFlow。现在,如果您键入我想要启动产品,LUIS将告诉它必须转到哪个对话框:

    internal static IDialog<AssesmentHelper> CreateProduct()
            {
                return Chain.From(() => FormDialog.FromForm(AssesmentHelper.BuildForm))
                    .Do(async (context, profileForm) =>
                    {
                        try
                        {
                            var completed = await profileForm;

                        }
                        catch (FormCanceledException<AssesmentHelper> e)
                        {
                            string reply;
                            if (e.InnerException == null)
                            {
                                reply = $"You quit on {e.Last}--maybe you can finish next time!";
                            }
                            else
                            {
                                reply = Responses.ShortCircuit;
                            }
                            await context.PostAsync(reply);
                        }
                    });
            }

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        { 
stLuis = await LuisHelper.ParseUserInput(activity.Text);
    switch (stLuis.topScoringIntent.intent)
    {

         case "CreateProduct":
              await Conversation.SendAsync(activity, CreateProduct);
              break;

         case "EditProduct":
               await Conversation.SendAsync(activity, EditProduct);
               break;

           case "None":

               break;

            default:
               break;
    }
}

现在,一旦进入对话框,它会要求用户选择数字:

请选择数字:

  1. 天青
  2. 现在如果我回复1,2。 Luis将其作为无意图返回,因此我的消息不会转到相应的对话框。总是去无案例。

    对话框的代码是:

     public static IForm<AssesmentHelper> BuildForm()
            {
                return new FormBuilder<AssesmentHelper>()
                        .Message(Responses.NumberSelection)
                        .Field(nameof(Program))
                        .Field(nameof(Product))
                        .Build();
            }
    

    程序和产品的枚举:

    [Serializable]
        public enum Program
        {
            None = 0,
            A = 1,
         };
    
            [Serializable]
            public enum Product
            {
                None = 0,
                Azure = 1,
                Windows = 2
            };
    

    一进入此对话框,它就会要求我选择编号来选择程序。现在,如果我选择1,2。 Luis将其作为无意图返回。因此,案例“无”,被执行。

    我想要的是,将控件重定向到同一个对话框。我也有类似的编辑产品对话框。这就是为什么我不能训练我的luis应用程序来理解数字作为产品意图。否则,每当我为编辑产品选择编号时,它将转到不同的情况。

    之前它以某种方式确定了正确的意图,但今天我重新发布了我的luis应用程序并且它停止了识别。

0 个答案:

没有答案