У меня есть LuisDialog, который вызывает конкретный диалог, если намерение найдено. Там, на основе выделенного объекта, я вызываю еще один диалог, который, кажется, бросает какое-то необработанное исключение. Вот цель в моей корневой 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), если объект содержит «книгу» string-
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. Пожалуйста, поддержите ответ, если он был полезен –