我有一个LuisDialog,如果找到意图,它会调用特定的对话框。在那里,在提取的实体的基础上,我正在调用另一个对话框,它似乎抛出了一些未处理的异常。这是我的根LuiDialog调用BuyDialog的意图(我正在保存LuisResult以供以后使用)-
[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),如果实体包含"book"字符串-
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
}
这是我的书对话——
[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);
}
我知道问题出在第二个上下文.call(对bookDialog的调用)中,因为如果我删除它,代码可以正常工作。现在,当它到达那里时,我得到"对不起,我的机器人代码有问题"。知道出了什么问题吗?
第二个对话框中执行的context.Done(true)
必须在BookDialog
ResumeAfter<T>
方法中 ( BookFormComplete
)
"是书"路径应如下所示:
else if(is_book)
{
await context.PostAsync("You selected book category");
context.Call(new BookDialog(),BookFormComplete);
}