首页 > 解决方案 > 在 .lg 文件中指定时无法读取 Bot 用户状态属性(使用 Bot Framework Composer 生成)

问题描述

我使用以下代码片段在代码中创建了一个用户状态属性:

userProfileProperty = UserState.CreateProperty<UserProfile>(nameof(UserProfile));

如上所示,我使用自定义类对象作为 preoprty 值,即 UserProfile 类,并且该类包含各种类属性,如下所示:

public class UserProfile
    {
        public string UserEmail { get; set; }

        public string UserAlias { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

现在,当我尝试通过在 .lg 文件中提及它来访问 AdaptiveDialog 流中的相同属性时,如下所示:

# bfdprompt-254582()
- what is your name

# bfdactivity-998627()
- Your name is @{user.name}

# bfdactivity-709726()
- Starting the First Dialog

# bfdactivity-496995()
- Test custom value is @{user.userprofile.useremail}

我收到以下异常:

在此处输入图像描述

请协助。

标签: botframework

解决方案


只要您将模型UserProfile发送到模板引擎,请尝试直接使用属性名称,如下所示

# bfdactivity-496995()
- Test custom value is @{useremail}

查看此工作示例以获取更多详细信息:

  private class UserLanguagePreference
        {
            public string OldLanguage { get; set; }
            public string NewLanguage { get; set; }
        }

我们使用如下模板引擎从 .lg 文件中获取响应:

 UserLanguagePreference userLanguagePreference = new UserLanguagePreference
                    {
                        OldLanguage = _state.UserInfoState.LanguagePreference,
                        NewLanguage = PayloadsLanguageEnum.GetValueFromCode(payload).Name
                    };

 await sc.Context.SendActivityAsync(_templateEngine.GenerateActivityForLocale("UpdateLanguagePreference", userLanguagePreference));

.lg 文件具有以下内容:

# UpdateLanguagePreference
- Language preference changed from : @{OldLanguage} to @{NewLanguage}

推荐阅读