0

代码

 [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 Framework 创建一个简单的查询机器人。我正在Inquiry通过 LUIS 验证该字段并返回处理意图。我得到了正确的意图,在这种情况下是EXC01. 之后,我想知道为什么我仍然收到提示Inquiry

问题: 1.确认询价意向后
如何完成? 2. 我想处理返回的 Intent 但不显示给用户。我将使用 Intent 字符串查询数据库。我可以在里面做这个吗?FormFlow
BuildForm()

4

1 回答 1

1

验证 Intent 后如何完成 FormFlow?

在验证函数AnswerInquiry中,我们可以发现ValidateResult的IsValid属性将始终为,这导致了问题。在将返回的意图分配为反馈后,您可以将 IsValid属性设置为。以下代码片段适用于我,您可以参考它。falsetrue

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;
}

我想处理返回的 Intent 但不向用户显示。我将使用 Intent 字符串查询数据库。我可以在 BuildForm() 中执行此操作吗?

获得返回的意图后,如果您想根据返回的意图从数据库中查询记录,可以在验证函数中进行。

测试结果:

在此处输入图像描述

于 2018-08-15T06:02:09.433 回答