首页 > 解决方案 > 如何将数据从瀑布对话框传输到另一个?

问题描述

我正在开发一个包含至少 2 个对话框的机器人框架项目(C# - Bot Framework v4)。我想将我创建的信息(不是来自用户)从第一个对话框传输到另一个对话框。我该怎么做 ?

我试图设置 BeginDialogAsync 函数的第二个参数,但到达时它是空的。

编辑 :

我有一个第一个对话框(SignInDialog),用于将用户与 OAuthPrompt 连接起来。当用户连接到同一个班级时,我将使用 Dispatcher (Microsoft) 和 LuisRecognizer 处理他的意图,以判断我是否必须使用 QnA 或 LUIS。

我要做的是根据用户的意图调用位于另一个 Dialog 类(PersonalInfoDialog)中的特定对话框。但是,每当我将一些参数传递给该BeginDialogAsync方法时,我都找不到从目标对话框中获取它的方法。

登录对话框类

        private async Task<DialogTurnResult> PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);
        }

        private async Task<DialogTurnResult> DispatchStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {

            var tokenResponse = (TokenResponse)stepContext.Result;
            if (tokenResponse != null)
            {

                var recognizerResult = await BotServices.Dispatch.RecognizeAsync(stepContext.Context, cancellationToken);

                var topIntent = recognizerResult.GetTopScoringIntent();

                var intent = topIntent.intent;

                switch (intent)
                {

                    case "CASE_1":
                        return await stepContext.BeginDialogAsync(nameof(PersonalInfoDialog), recognizerResult, cancellationToken);

                    case "CASE_2":
                        ...
                    default:
                        Logger.LogInformation($"Dispatch unrecognized intent: {intent}.");
                        break;
                }


            }

            return await stepContext.EndDialogAsync(null, cancellationToken);
        }

PersonalInfoDialog 类

在这里,在调试模式下,测试为空。

    private async Task<DialogTurnResult> PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var test = stepContext.Options as LuisResult;
        return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);
    }

谢谢您的帮助。

标签: c#botframework

解决方案


如果我理解正确并且您真的没有其他选择可以在一个瀑布对话框中传输数据:

您可以使用状态属性访问器来存储/加载数据。在文档中,您可以找到一个示例。看看UserProfilehttps ://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-state?view=azure-bot-service-4.0&tabs=csharp

有关更多信息,我推荐关于状态的文档文章:https ://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-state?view=azure-bot-service-4.0


推荐阅读