C# 如何将数据从一个Waterwall对话框传输到另一个对话框?
我正在从事一个bot框架项目(C#-botframeworkv4),其中至少包含两个对话框。我想将我创建的信息(不是来自用户)从第一个对话框传输到另一个对话框。我怎么做 我试图设置BeginDialogAsync函数的第二个参数,但到达时它是空的 编辑: 我有第一个对话框(SignInDialog),用于将用户与OAuthPrompt连接起来。当用户在同一个类中连接时,我将与Dispatcher(Microsoft)和LuisRecogniter处理他的意图,以确定我是否必须使用QnA或LUIS 我试图做的是根据用户的意图调用另一个对话框类(PersonalInfoDialog)中的特定对话框。但是每当我将一些参数传递给C# 如何将数据从一个Waterwall对话框传输到另一个对话框?,c#,botframework,C#,Botframework,我正在从事一个bot框架项目(C#-botframeworkv4),其中至少包含两个对话框。我想将我创建的信息(不是来自用户)从第一个对话框传输到另一个对话框。我怎么做 我试图设置BeginDialogAsync函数的第二个参数,但到达时它是空的 编辑: 我有第一个对话框(SignInDialog),用于将用户与OAuthPrompt连接起来。当用户在同一个类中连接时,我将与Dispatcher(Microsoft)和LuisRecogniter处理他的意图,以确定我是否必须使用QnA或LUIS
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的数据-与调度员。我希望我足够清楚。谢谢你,我想这会有用的。