Я пытаюсь изучить Bot Framework 4, я использую встроенный шаблон CoreBot, определенный здесь: https://github.com/microsoft/BotBuilder-Samples/blob/master/generators/dotnet-templates/README.md
Я изменил MainDialog.cs, чтобы он вызывал мой пользовательский диалог вместо включенного диалога:
До:
return await stepContext.BeginDialogAsync(nameof(BookingDialog), bookingDetails, cancellationToken);
После:
private async Task<DialogTurnResult> GetIntentStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
return await stepContext.BeginDialogAsync(nameof(MyDialog), digitalWorker, cancellationToken);
}
Диалоги вводятся здесь в MainDialog.cs
// Dependency injection uses this constructor to instantiate MainDialog
public MainDialog(FlightBookingRecognizer luisRecognizer, BookingDialog bookingDialog, ILogger<MainDialog> logger)
: base(nameof(MainDialog))
{
_luisRecognizer = luisRecognizer;
Logger = logger;
AddDialog(new TextPrompt(nameof(TextPrompt)));
AddDialog(bookingDialog);
AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
{
GetIntentStep,
//IntroStepAsync,
//ActStepAsync,
//FinalStepAsync,
}));
// The initial child Dialog to run.
InitialDialogId = nameof(WaterfallDialog);
}
Внутри моего диалогового окна:
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Schema;
using Microsoft.Recognizers.Text.DataTypes.TimexExpression;
namespace CoreBot1.Dialogs
{
public class MyDialog: CancelAndHelpDialog
{
public MyDialog()
: base(nameof(MyDialog))
{
AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
{
SayIntentStepAysnc
}));
// The initial child Dialog to run.
InitialDialogId = nameof(WaterfallDialog);
}
private async Task<DialogTurnResult> SayIntentStepAysnc(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var bookingDetails = (Models.MyDialog)stepContext.Options;
var messageText = $"Your intent is: {bookingDetails.Intent}";
var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
if ((bool)stepContext.Result)
{;
return await stepContext.EndDialogAsync(bookingDetails, cancellationToken);
}
return await stepContext.EndDialogAsync(null, cancellationToken);
}
}
}
Так что я установил точку останова в своем диалоге, и она никогда не срабатывает, однако она попадает в вызов MainDialog.cs BeginDialogAysn c просто отлично. Я получаю сообщение об ошибке:
The bot encounted an error or bug.
To continue to run this bot, please fix the bot source code.
Что я делаю не так?