![](/img/trans.png)
[英]How to set field value based on the value of other fields in FormFlow in botframework?
[英]Validating a field in a FormFlow
码
[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创建一个简单的查询机器人。 我正在通过LUIS验证“ Inquiry
字段,并返回处理意图。 我得到正确的意图,在这种情况下是EXC01
。 之后,我想知道为什么我仍然得到Inquiry
提示。
问题:
1.确认查询意图后如何完成FormFlow
?
2.我想处理返回的Intent,但不显示给用户。 我将使用Intent字符串查询数据库。 我可以在BuildForm()
执行此操作吗?
确认查询意图后如何完成FormFlow?
在验证函数AnswerInquiry
,我们可以发现ValidateResult的 IsValid属性始终为false
,这会导致问题。 在将返回的意图分配为反馈后,可以将IsValid属性设置为true
。 以下代码段对我有用,您可以参考它。
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()中执行此操作吗?
获得返回的意图后,如果您想基于返回的意图从数据库中查询记录,则可以在验证函数中进行操作。
测试结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.