C# 如何将数据从一个Waterwall对话框传输到另一个对话框?

C# 如何将数据从一个Waterwall对话框传输到另一个对话框?,c#,botframework,C#,Botframework,我正在从事一个bot框架项目(C#-botframeworkv4),其中至少包含两个对话框。我想将我创建的信息(不是来自用户)从第一个对话框传输到另一个对话框。我怎么做 我试图设置BeginDialogAsync函数的第二个参数,但到达时它是空的 编辑: 我有第一个对话框(SignInDialog),用于将用户与OAuthPrompt连接起来。当用户在同一个类中连接时,我将与Dispatcher(Microsoft)和LuisRecogniter处理他的意图,以确定我是否必须使用QnA或LUIS

我正在从事一个bot框架项目(C#-botframeworkv4),其中至少包含两个对话框。我想将我创建的信息(不是来自用户)从第一个对话框传输到另一个对话框。我怎么做

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

编辑:

我有第一个对话框(SignInDialog),用于将用户与OAuthPrompt连接起来。当用户在同一个类中连接时,我将与Dispatcher(Microsoft)和LuisRecogniter处理他的意图,以确定我是否必须使用QnA或LUIS

我试图做的是根据用户的意图调用另一个对话框类(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);
        }
专用异步任务PromptStepAsync(WaterAllStepContext stepContext,CancellationToken CancellationToken)
{
返回wait-stepContext.BeginDialogAsync(nameof(OAuthPrompt),null,cancellationToken);
}
专用异步任务DispatchStepAsync(WaterCallStepContext stepContext,CancellationToken CancellationToken)
{
var tokenResponse=(tokenResponse)stepContext.Result;
if(令牌响应!=null)
{
var recognizerResult=await-BotServices.Dispatch.RecognizeAsync(stepContext.Context,cancellationToken);
var topIntent=recognizerResult.getTopScoringContent();
var intent=topIntent.intent;
开关(意图)
{
案例“案例1”:
return wait stepContext.BeginDialogAsync(名称(PersonalInfoDialog)、识别器结果、取消令牌);
案例“案例2”:
...
违约:
Logger.LogInformation($“分派未识别的意图:{intent}.”);
打破
}
}
返回Wait-stepContext.EndDialogAsync(null,cancellationToken);
}
个性化信息对话框类

        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);
        }
这里,在调试模式下,test为null

    private async Task<DialogTurnResult> PromptStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var test = stepContext.Options as LuisResult;
        return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);
    }
专用异步任务PromptStepAsync(WaterAllStepContext stepContext,CancellationToken CancellationToken)
{
var test=stepContext.Options作为LuisResult;
返回wait-stepContext.BeginDialogAsync(nameof(OAuthPrompt),null,cancellationToken);
}

谢谢您的帮助。

如果我正确理解了您,并且您确实没有其他选项可以在一个瀑布式对话框中传输数据:

您可以使用状态属性访问器来存储/加载数据。 在文档中,您可以找到一个示例。查看
用户配置文件


关于更多信息,我推荐Doc关于states的文章:

为什么要在对话框之间传输它?为什么不继续当前对话框中的信息,直到不再需要它,然后交换对话框呢?我们谈论的是什么样的信息?我在我原来的帖子中添加了更多的信息。我的目标是为对话分配责任。例如,我想要PersonalInfoDialog来处理关于个人信息的对话框,等等。。。但是来自SignInDialog的数据-与调度员。我希望我足够清楚。谢谢你,我想这会有用的。