繁体   English   中英

Bot Framework - 如何访问部分 class 中定义的实体

[英]Bot Framework - how to access entity defined in partial class

我导出了我的 LUIS 应用程序内容 (.json) 并使用bf luis:generate:cs命令从中生成了 a.cs 代码:

public partial class AssistantRootDialog: IRecognizerConvert
{

并编写了另一个部分 class 以更好(命名)方式访问实体

public partial class AssistantRootDialog
{
  public String PhoneUser => Entities?.ContactName?.FirstOrDefault() ?? "<no user>";
   ...
}

在我的自适应对话框中,我将 LUI 识别的意图和实体设置如下:

new OnIntent(nameof(AssistantRootDialog.Intent.LookForMobilePhone)) {
   Actions = new List<Dialog>() {
     new SetProperty() {
       Property = "conversation.find.phone.userName",
       Value = "=turn.recognized.Entities?.ContactName[0]"
     },

我想知道如何使用部分 class 中的PhoneUser属性:

     new SetProperty() {
       Property = "conversation.find.phone.userName",
       Value = "=turn.recognized.PhoneNumber"  // It seems wrong !! ??
     },

任何想法? 提前致谢...

只是为了设置一点上下文,您必须记住,自适应对话和传统对话存在于不同的领域,并且您以不同的方式使用它们。

您可以使用自适应对话框中的传统对话框,但您不能(或者至少我还没有弄清楚如何)以相反的方式进行操作。

自适应对话框是声明性的,由DialogManager管理,而传统对话框是命令式的,主要由您的代码管理。

您可以使用CodeAction对话框在自适应对话框定义中添加自定义代码,并访问在自适应属性分配中定义的任何属性。 因此,您可以在SetProperty()操作之后定义此代码操作:

new CodeAction(async (dialogContext, options) =>
{
    // this is the way to get a value from adaptive dialog's state, you can "deserialize" to whatever type
    var userName = dialogContext.State.GetValue<string>("conversation.find.phone.userName");

    // you can also set any property and use it later from any adaptive expression
    dialogContext.State.SetValue("conversation.find.phone.firstName", userName.Split()[0]);

    return await dialogContext.EndDialogAsync(options);
}),

能够获取和设置属性并在“另一边”使用它们。

无论如何,我不确定这是否能实现您想要实现的目标,但至少是一种在两个“现实”之间传递价值的方式。

更新:几天前我在我的博客上发表了一篇文章,这可能有助于自适应对话,特别是在测试部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM