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),因爲如果我刪除它的代碼工作得很好。現在,當它到達那裏時,我很抱歉,我的機器人代碼有問題。任何想法有什麼不對?
謝謝...通過方式,有沒有辦法知道錯誤源自模擬器本身?我讀了一些關於Chain.DefaultIfException方法來做到這一點,但我不知道如何實現它。 –
看看這是否有用https://docs.botframework.com/en-us/technical-faq/#look-for-exceptions。如果它有用,請提出答案 –