Как вызвать диалоговое окно водопада в диалоге - Azure Bot Builder - PullRequest
1 голос
/ 11 января 2020

В моем azure боте у меня установлен бот по умолчанию "DialogBot.cs". В его методе OnMessageActivityAsyn c () я хочу вызвать конкретный c водопад, основанный на пользовательском вводе.

Однако после того, как я проанализировал вход, я не знаю, как вызвать указанный c водопад. Допустим, водопад называется «SpecificDialog». Я попробовал это:

await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(SpecificDialog)), cancellationToken);

, но это не работает. Как бы я совершил sh это?

1 Ответ

0 голосов
/ 13 января 2020

Я предполагаю, что вы работаете с одним из образцов. Я основываю свой ответ на CoreBot .

. Вы должны думать о диалоге, вызываемом Dialog.RunAsync(), как о "root" или "родительском" диалоге, из которого все другие диалоги ветвь и поток от. Чтобы изменить, какой диалог вызывается этим, посмотрите в Startup.cs строку, которая выглядит следующим образом :

// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
services.AddTransient<IBot, DialogAndWelcomeBot<MainDialog>>();

Чтобы изменить это на диалог, отличный от MainDialog, вы просто замените его соответствующим диалогом.

Как только вы войдете в root или родительский диалог, вы вызовете другой диалог с BeginDialogAsync():

stepContext.BeginDialogAsync(nameof(BookingDialog), new BookingDetails(), cancellationToken);

К вашему сведению:

В Node это работает немного по-другому. В CoreBot MainDialog передается боту в index.js:

const dialog = new MainDialog(luisRecognizer, bookingDialog);
const bot = new DialogAndWelcomeBot(conversationState, userState, dialog);

[...]

// Listen for incoming activities and route them to your bot main dialog.
server.post('/api/messages', (req, res) => {
    // Route received a request to adapter for processing
    adapter.processActivity(req, res, async (turnContext) => {
        // route to bot activity handler.
        await bot.run(turnContext);

Вы можете видеть, что он вызывает DialogAndWelcomeBot, что расширяет DialogBot , , который вызывает MainDialog для каждого сообщения :

this.onMessage(async (context, next) => {
    console.log('Running dialog with Message Activity.');

    // Run the Dialog with the new message Activity.
    await this.dialog.run(context, this.dialogState);

    // By calling next() you ensure that the next BotHandler is run.
    await next();
    });

У вас нет для настройки вашего бота таким образом, но это рекомендуемый в настоящее время дизайн, и вам будет проще реализовать наши документы и образцы, если вы будете следовать этому.

...