我使用的是Microsoft Bot框架(4.x),我们已经设置了虚拟助手以及一些技能。当前,我们正在尝试让用户以一种特定的技能打断他们当前的对话,并跳到新的对话。我们想要添加一些功能,然后使我们能够跳回到用户放弃先前已退出的技能的位置。

我的问题是,是否有可能将信息从技能传递给在整个对话过程中始终存在的虚拟助手?该信息将是字符串列表或类似性质的列表

最佳答案

如果您尝试在其中检索选项的对话框是WaterfallDialog,则可以使用Options属性检索选项,并使用options参数传递这些选项。

如下所示:

// Call the dialog and pass through options
await dc.BeginDialogAsync(nameof(MyDialog), new { MyProperty1 = "MyProperty1Value", MyProperty2 = "MyProperty2Value" });

// Retrieve the options
public async Task<DialogTurnResult> MyWaterfallStepAsync(WaterfallStepContext waterfallStepContext, CancellationToken cancellationToken)
{
    var passedInOptions = waterfallStepContext.Options;

    ...
}

使用强类型的类来传入和检索选项,因此您可以创建类似于以下内容的东西:
// Concrete class definition
public class MyOptions
{
    public string OptionA{ get; set; }
    public string OptionB{ get; set; }
}

// Passing options to Dialog
await dc.BeginDialogAsync(nameof(MyDialog), new MyOptions{ OptionA= "MyOptionOneValue", OptionB= "MyOptionTwo" });

// Retrieving options in child Dialog
using Newtonsoft.Json;

public async Task<DialogTurnResult> MyWaterfallStepAsync(WaterfallStepContext waterfallStepContext, CancellationToken cancellationToken)
{
    var passedInOptions = waterfallStepContext.Options;
    // Get passed in options, need to serialise the object before we deserialise because calling .ToString on the object is unreliable
    MyOptions passedInMyOptions = JsonConvert.DeserializeObject<MyOptions>(JsonConvert.SerializeObject(waterfallStepContext.Options));
    ...

    // Use retrieved options like passedInOptions.OptionA etc
}

阅读有关EndDialogAsync的更多信息

https://docs.microsoft.com/en-us/dotnet/api/microsoft.bot.builder.dialogs.dialogcontext.enddialogasync?view=botbuilder-dotnet-stable#Microsoft_Bot_Builder_Dialogs_DialogContext_EndDialogAsync_System_Object_System_Threading_CancellationToken_

看看是否有帮助。

关于c# - 将信息从技能存储/发送到Microsoft虚拟助手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57332596/

10-14 16:57