首页 > 解决方案 > 在 Microsoft Virtual Assistant 和 Skills 之间传递数据

问题描述

我已将 CalendarSkill 与我的虚拟助手连接,并且工作正常。我没有使用身份验证提示,而是在我的虚拟助手中生成图形令牌并希望将其传递给技能。如何将数据传递给 SkillContext 或使用插槽(不确定如何使用这些插槽检索或发送数据)。

我曾尝试使用 DialogOptions 传递数据,但如何在技能中检索该数据。

标签: azure.net-corebotframeworkchatbotazure-cognitive-services

解决方案


假设您尝试在其中检索选项的对话框是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 MyOptionOne { get; set; }
    public string MyOptionTwo { get; set; }
}

// Passing options to Dialog
await dc.BeginDialogAsync(nameof(MyDialog), new MyOptions{ MyOptionOne = "MyOptionOneValue", MyOptionTwo = "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.MyOptionOne etc
}

推荐阅读