我已将CalendarSkill与我的虚拟助手连接起来,并且工作正常。我没有在虚拟助手中生成图形令牌,而是希望将其传递给技能,而不是使用身份验证提示。我如何将数据传递到skillContext或使用插槽(不确定如何使用这些插槽检索或发送数据)。
我尝试使用DialogOptions传递数据,但是如何通过技巧来检索数据。
答案 0 :(得分:0)
假设您要在其中检索选项的对话框是WaterfallDialog
,则可以使用Options
属性来检索选项,就像您已经提到的那样,您可以在使用{{ 3}}参数。
外观如何:
// 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
}