首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证FormFlow中的字段

验证FormFlow中的字段
EN

Stack Overflow用户
提问于 2018-08-14 05:35:03
回答 1查看 186关注 0票数 0

代码语言:javascript
复制
 [Serializable]
    public class FAQConversation
    {
        [Prompt("What product is your concern? {||}")]
        public VASetting.SupportedProducts Products { get; set; }
        [Prompt("Okay, tell me what is your question. Enter \"back\" to go back to Products Selection.")]
        public string Inquiry { get; set; }
        public static IForm<FAQConversation> BuildForm()
        {
            return new FormBuilder<FAQConversation>()
                .AddRemainingFields()
                .Field(new FieldReflector<FAQConversation>(nameof(Inquiry)).SetValidate(AnswerInquiry))
                .Message("Hi this is Test Virtual Assistant")
                .Build();
        }

        private static async Task<ValidateResult> AnswerInquiry(FAQConversation state, object value)
        {
            var asString = value as String;
            var vaConfig = new SmartCareSetting(state.Products);
            var result = new ValidateResult() { IsValid = false, Value = value };
            if (!string.IsNullOrEmpty(asString))
            {
                var luisService = new LuisService(new LuisModelAttribute(vaConfig.AppID, vaConfig.SubscriptionKey, domain: vaConfig.HostName));
                var luisResult = await luisService.QueryAsync(asString, CancellationToken.None);
                result.Feedback = luisResult.TopScoringIntent.Intent.ToString();
            }
            return result;
        }
    }

我的机器人代码上面显示了下面的对话.

我正在使用FormFlow和bot框架创建一个简单的查询机器人。我正在通过LUIS验证Inquiry字段,并返回处理的意图。我得到的是正确的意图,在这种情况下是EXC01。之后,我想知道为什么我还会收到提示Inquiry的提示。

问题:

  1. 在验证了查询的意图之后,我如何完成FormFlow
  2. 我想要处理返回的意图,但不显示给用户。我将使用意图字符串来查询数据库。我可以在BuildForm()里面做这个吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 06:02:09

在验证了查询的意图之后,我如何完成FormFlow?

在验证函数AnswerInquiry中,我们可以发现ValidateResultIsValid属性总是false,这导致了问题的发生。在将返回的意图指定为反馈后,可以将IsValid属性设置为true。下面的代码片段适用于我,您可以参考它。

代码语言:javascript
复制
private static async Task<ValidateResult> AnswerInquiry(FAQConversation state, object value)
{
    var asString = value as String;
    var vaConfig = new SmartCareSetting(state.Products);

    var result = new ValidateResult() { IsValid = false, Value = value };

    if (!string.IsNullOrEmpty(asString))
    {
        var luisService = new LuisService(new LuisModelAttribute(vaConfig.AppID, vaConfig.SubscriptionKey, domain: vaConfig.HostName));
        var luisResult = await luisService.QueryAsync(asString, CancellationToken.None);
        result.Feedback = luisResult.TopScoringIntent.Intent.ToString();

        //set IsValid to true
        result.IsValid = true;
    }
    return result;
}

我想要处理返回的意图,但不显示给用户。我将使用意图字符串来查询数据库。我可以在BuildForm()中这样做吗?

在获得返回意图之后,如果希望根据返回的意图从数据库中查询记录,则可以在验证函数中这样做。

测试结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51834325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档