c# - 如何将数据从瀑布对话框传输到另一个?
问题描述
我正在开发一个包含至少 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);
}
谢谢您的帮助。
解决方案
如果我理解正确并且您真的没有其他选择可以在一个瀑布对话框中传输数据:
您可以使用状态属性访问器来存储/加载数据。在文档中,您可以找到一个示例。看看UserProfile
:https ://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
推荐阅读
- django - 如何优化查询 django rest-framework
- python - 从 pandas 数据框中为列中的不同值创建列表
- python - 我不能在 pygame 中使用一种以上的字体
- google-sheets - 保护细胞免受公众阅读
- javascript - 是否可以仅使用 html、css 和 javascript 动态创建 div?
- python - 如何根据环境变量使python函数使用字典中的值?
- spring-boot - 在 Spring Boot 2 上实现基于过滤器的 JWT 身份验证与 OAuth2 JWT 身份验证
- c++ - GetModuleHandle(nullptr) 上的 GetProcAddress() 在 MinGW 下失败
- android - ArrayList 显示它的大小为 0 即使在向其添加元素后也是如此
- sql-server-2012 - SQL Server 将左连接结果集显示为附加列而不是行