【问题标题】:Storing/Sending information from a skill to the Microsoft virtual Assistant将技能中的信息存储/发送到 Microsoft 虚拟助手
【发布时间】:2019-12-11 10:37:27
【问题描述】:

我正在使用 Microsoft Bot 框架 (4.x),我们设置了虚拟助手以及一些技能。我们目前正试图让用户以特定技能打断他们当前的对话并跳转到新的对话。我们想添加一些功能,使我们能够跳回到用户上次退出技能的位置。

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

【问题讨论】:

    标签: c# botframework chatbot azure-bot-service


    【解决方案1】:

    如果您尝试在其中检索选项的对话框是 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_

    看看有没有帮助。

    【讨论】:

    • 这是一个路由器对话框(主对话框),我有 DialogContext。我似乎无法在 DialogContext 中找到传递的选项(在 ActiveDialog、Context、Dialogs、Parent、Stack 等内部)
    • 澄清一下,我将从虚拟助手转向专用技能。专用技能有一个主对话框,然后路由到类似于box examples 的瀑布对话框。虚拟助手(MainDialog)->专用技能(MainDialog)->(瀑布对话框)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2023-03-15
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多