Невозможно вызвать поддиалог из основного диалога в BotFramework 4 - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь изучить 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.

Что я делаю не так?

1 Ответ

2 голосов
/ 16 января 2020

Вам необходимо добавить MyDialog в список диалогов в MainDialog. В вашем MainDialog вам нужно внедрить экземпляр MyDialog и добавить его в список диалогов, используя AddDialog(mydialoginstance);

Аналогично тому, как вы добавили bookingDialog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...