2016-05-13 131 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

相關問題