2016-05-13 42 views
2

我已更新我的NuGet包以使用Microsoft Bot Framework的1.2.0.1版。更新至1.2.0.1后,LuisDialog无法工作

一些突破变化是reported here,我设法解决构建错误。但是,应用程序不工作了..

我有两个问题:

  1. 代码抛出InvalidIntentHandlerException当我发送消息的话语给控制器。
  2. 在我的'intent'方法(用LuisIntent属性装饰)中,可以读取实体的值。像这样:

    [Serializable] 
    [LuisModel("xxxxx", "xxxx")] 
    public class BookFlightDialog : LuisDialog<BookFlightForm> 
    { 
        private readonly BuildFormDelegate<BookFlightForm> BuildForm; 
    
        internal BookFlightDialog(BuildFormDelegate<BookFlightForm> buildForm) 
        { 
         BuildForm = buildForm; 
        } 
    
        [LuisIntent("")] 
        [LuisIntent("None")] 
        public async Task None(IDialogContext context, LuisResult result) 
        { 
         await context.PostAsync("I'm sorry. I didn't understand you."); 
    
         context.Wait(MessageReceived); 
        } 
    
        [LuisIntent("BookAFlight")] 
        public async Task BookAFlight(IDialogContext context, LuisResult result) 
        { 
         var form = new BookFlightForm(); 
         // var entities = new List<EntityRecommendation>(result.Entities); 
    
         var locations = result.Entities.Where(e => e.Type.Equals("builtin.geography") || e.Type.Equals("builtin.geography.city")).OrderBy(e => e.StartIndex); 
    
         if (locations.Any()) 
         { 
          form.LocationFrom = locations.First().Name; 
    
          if (locations.Count() == 2) 
          { 
           form.LocationTo = locations.Skip(1).First().Name; 
          } 
         } 
    
         var date = result.Entities.FirstOrDefault(e => e.Type == "builtin.datetime.date"); 
         if (date != null) form.DepartureDate = DateTime.Parse(date.Name); 
    
         var formDialog = new FormDialog<BookFlightForm>(form, BuildForm, FormOptions.PromptInStart); 
    
         context.Call(formDialog, OnComplete); 
        } 
    
        private async Task OnComplete(IDialogContext context, IAwaitable<BookFlightForm> result) 
        { 
         BookFlightForm booking; 
         try 
         { 
          booking = await result; 
         } 
         catch (OperationCanceledException) 
         { 
          await context.PostAsync("Ok, see you later."); 
          return; 
         } 
    
         if (booking != null) 
         { 
          var service = new SkyScannerService(); 
          var possibilities = await service.Search(booking); 
    
          await context.PostAsync(possibilities); 
         } 
         else 
         { 
          await context.PostAsync("Form returned empty response!"); 
         } 
    
         context.Wait(MessageReceived); 
        } 
    } 
    

如何解决的例外,我怎么看实体的价值?

再次感谢!

+1

如果你的LuisDialog能分享代码吗? InvalidIntentHandlerException仅在Builder无法在类中找到任何意图时才会抛出。 关于阅读实体,我不确定你在那里遇到了什么问题。结果。实体仍然可用。 –

+0

@ejadib:我用LuisDialog更新了我的帖子。 – Aldentev

+0

你在使用Bot Framework模拟器吗?我也遇到了一个问题,然后我更新了模拟器,并且一切正常。 – freethinker6

回答

2

这是因为您没有使用内置的LuisResult类,具有using LuisResult = Bots.Results.LuisResult;。将其替换为using Microsoft.Bot.Builder.Luis.Models;

+0

谢谢!也许resharper在那里做了些什么:S – Aldentev

相关问题