2017-01-30 64 views
0

我們正在開發一個使用Microsoft bot框架的圖書館機器人。微軟Bot-使用相同的答案甚至輸入循環不同

我們有

Intent : BookSearch 
Entiry : BookName, BookAuthor 

當我搜索「我需要一個Java書」,它知道的Java「是一個實體,並提供其他詳細信息java的書。

我的問題是,一旦我收到了java書的詳細信息,我想再次發出這本書,當我們問「發佈給我書Java」時,它會發生衝突並再次顯示java書的詳細信息,進入循環。

請幫助我們在這種情況下,我們如何確定在我們的問題不同的上下文?

代碼:

[LuisIntent("BookSearch")] 
    public async Task BookSearch(IDialogContext context, LuisResult result) 
    { 
     if (result.Entities.Any()) 
     { 
      DBConnect dbConnect = new DBConnect(); 
      string combindedString = string.Empty; 
      string mysqlQuery = string.Empty; 

      foreach (var item in result.Entities) 
      { 
       switch (item.Type.ToString()) 
       { 
        case "BookAuthor": 

         break; 
        case "BookName": 

         break; 
        case "BookIssue": 

         break; 
        default:       

         break; 
       } 
      } 

     } 
     else 
     { 
      await context.PostAsync("Which book are you searching."); 
      context.Wait(MessageReceived); 
     } 

    } 

這裏BOOKNAME和BookIssue是實體, 所以,當我們問「我需要的Java書」 =>應該進入BOOKNAME實體提供書的詳細信息。 當我們問「發給我java書」=>它應該進入BookIssue實體來處理簽發手續。

在此先感謝

+0

代碼示例可能對我們有所幫助。 – Svekke

+0

@Svekke,我已編輯的問題添加代碼 –

+0

@PareshBijarane你可以將代碼發佈到應該發生圖書發行的意圖? – artie

回答

0

BookIssue應該是自己的意圖&方法。在您的代碼中,您似乎將BookIssue視爲一個實體。

做你所做的爲BookSearch,但與你想在你的BookIssue方法中的話語和邏輯。

現在你被「卡住」在你的BookSearch意圖中,因爲你還沒有定義另一個意思,而LUIS是匹配這些話語進行搜索。

順便說一句,對於這個應用程序,你可能要考慮使用FormFlow

+0

謝謝安娜Zietlow 如果我們與FormFlow一起,如果書籍數量超過50或100,我們如何顯示沒有書籍。當我們從實時系統獲取數據時,可能會有很多匹配的書籍用於我們的搜索。 –

+0

對不起,我猜FormFlow可能更適合您的BookIssue意圖。你的搜索聽起來太複雜了 –

相關問題