正在使用PromptDialog传递参数。确认:恢复Bot框架(C#)

正在使用PromptDialog传递参数。确认:恢复Bot框架(C#),c#,bots,botframework,C#,Bots,Botframework,在显示提示确认对话框之前,我从用户那里得到一些输入。根据这些输入和PromptDialog(是/否)选择,我必须执行一些功能逻辑。 提示对话框 PromptDialog.Confirm( context: context, resume: ServiceDetails, prompt: "Shall I continue with " + facility, retry: "Please,Confirm?."

在显示提示确认对话框之前,我从用户那里得到一些输入。根据这些输入和PromptDialog(是/否)选择,我必须执行一些功能逻辑。
提示对话框

PromptDialog.Confirm(
           context: context,
           resume: ServiceDetails,
           prompt: "Shall I continue with " + facility,
           retry: "Please,Confirm?.");
恢复功能:ServiceDetails

 private async Task ServiceDetails(IDialogContext context, IAwaitable<bool> result)
    {
        var confirm = await result;
        if (confirm && facility=="xxx") // They said yes
        {
专用异步任务服务详细信息(IDialogContext上下文,IAwaitable结果)
{
var确认=等待结果;
如果(确认和设施==“xxx”)//他们说是
{

在ServiceDetails方法中,我必须传递“facility”值。有可能吗?或者我应该使用会话(context.userdata.SetValue)来获取这个特定对话的“facility”值?

正如您所说,一种选择是使用Bot数据包并将值存储在那里。我认为使用PrivateConversationData包而不是UserData包可能更有意义,因为后者将在所有频道和对话中都可用。您可以在

根据您的工作流程,另一种更合适的选择是使用FormFlow。使用FormFlow,您可以定义一个模型,稍后将其转换为问题。表单完成后,您将获得表单的“状态”,以及用户提供的所有答案


您可以找到有关FormFlow的文档,以及一些如何使用的示例。

您可以使用类级变量,
facility
,然后在功能逻辑提示对话框中执行此操作。facility=facility


然后,您可以在ServiceDetails中简单地将该值读取为
this.facility==“xxx”

回调只会有额外的
bool
参数,其他任何东西都必须进入上下文数据。@jackarms是的,只有通过上下文数据我才能获得值,即context.userdata.SetValue。但是在bot框架中,它类似于会话。从查询实体获取两个输入。根据实体问题,我应该问使用single formflow
IForm BuildFacilityForm()
如何检查这些输入的设置值和
字段。active
。虽然没有完全了解您,但这似乎与此线程中的问题不同。我建议通过此查询打开一个新问题