2017-01-16 29 views
0

我有一個LuisDialog,它在調用一個特定的對話框時發現了一個intent。在那裏,在提取實體的基礎上,我打電話給另一個對話框,這似乎在拋出一些未處理的異常。 這裏是我的根LuiDialog調用BuyDialog的意圖(我保存以備後用LuisResult) -使用context.call/done鏈接多個對話

[LuisIntent("Buy")] 
public async Task Buy(IDialogContext context, LuisResult result) 
{ 
    var cts = new CancellationTokenSource(); 
    await context.PostAsync("you want to buy"); 
    context.PrivateConversationData.SetValue<LuisResult>("luis", result); 
    context.Call(new BuyDialog(), ResumeAfterBuyDialog); 
} 
private async Task ResumeAfterBuyDialog(IDialogContext context, IAwaitable<bool> result) 
    { 
     var success = await result; 
     if (success) 
     { 
      await context.PostAsync("How else can I help you?"); 
      context.Wait(MessageReceived); 
      } 
    } 

這裏是我的BuyDialog調用另一個對話框(BookDialog)如果實體包含「書」與字符串

else if(is_book) 
       { 
        await context.PostAsync("You selected book category"); 
        context.Call(new BookDialog(),BookFormComplete); 
        context.Done(true); 
       } 
private async Task BookFormComplete(IDialogContext context, IAwaitable<bool> result) 
    { 
     var BookResult = await result; 
     //do something if result is true 
    } 

這裏是我的BookDialog-

[Serializable] 
public class BookDialog : IDialog<object> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     context.Wait(MessageReceivedAsync); 
    } 
    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) 
    { 
     var message = await argument; 
     if (message.Text == "mtl100") 
     { 
      await context.PostAsync("Correct"); 
      context.Done(true); 
     } 
     else 
     { 
      await context.PostAsync("Please enter valid course code"); 
      context.Wait(MessageReceivedAsync); 
     } 

我知道問題出在第二context.call(調用bookDialog),因爲如果我刪除它的代碼工作得很好。現在,當它到達那裏時,我很抱歉,我的機器人代碼有問題。任何想法有什麼不對?

回答

3

context.Done(true),你是第二個對話框中做的事情必須在BookDialog​​方法(BookFormComplete

的「是書」的路徑應是這樣的:!

else if(is_book) 
{ 
    await context.PostAsync("You selected book category"); 
    context.Call(new BookDialog(),BookFormComplete); 
} 
+0

謝謝...通過方式,有沒有辦法知道錯誤源自模擬器本身?我讀了一些關於Chain.DefaultIfException方法來做到這一點,但我不知道如何實現它。 –

+1

看看這是否有用https://docs.botframework.com/en-us/technical-faq/#look-for-exceptions。如果它有用,請提出答案 –