我在C#中有一个聊天机器人,它接收用户消息,并使用LUIS决定用户的意图。找到特定意图后,它将启动FormFlow。我已经能够使用LUIS实体从用户初始消息中成功填写表单中的字段。但是我被困在日期和时间实体上。当LUIS提供实体时,它将它们作为2个独立的实体(builtin.datetime.time& builtin.datetime.time)发送,但我需要将它们保存在一个Form Field(DateTime)下。 如何将实体时间和日期保存到DateTime字段?
我目前只知道如何只保存一个字段(将时间和默认值保存到今天的日期,或将日期和默认值保存到12AM)。
以下是我目前如何将日期实体保存到我的表单字段
EntityRecommendation entityDateTime;
result.TryFindEntity("builtin.datetime.date", out entityDateTime);
if (entityDateTime != null)
entities.Add(new EntityRecommendation(type: "DateTime") { Entity = entityDateTime.Entity });
答案 0 :(得分:0)
您可以使用 Chronic Parser (它在官方botbuilder github源代码中的一些示例中使用)
网址:https://github.com/robertwilczynski/nChronic
将合并日期和时间整合到一个日期时间实体中,请参阅下面的示例代码
EntityRecommendation time;
EntityRecommendation date;
var timeFound = result.TryFindEntity(EntityConstant.EntityBuiltInTime, out time);
if (result.TryFindEntity(EntityConstant.EntityBuiltInDate, out date))
{
return timeFound ? (date.Entity + " " + time.Entity).Parse() : date.Entity.Parse();
}
<强> ChronicParserExtension.cs 强>
public static Tuple<DateTime, DateTime> Parse(this string input)
{
var parser = new Parser(new Options
{
FirstDayOfWeek = DayOfWeek.Monday
});
var span = parser.Parse(input);
if (span.Start != null && span.End != null)
{
return Tuple.Create(span.Start.Value, span.End.Value);
}
return null;
}
希望它有所帮助。
答案 1 :(得分:0)
非常感谢@ kienct89,因为他帮我解决了问题,但是我不需要使用Chronic。 我用下面的代码得到了我想要的结果,如果有更好的方法来写这个
,我很乐意提出意见<input type="text" name="Name" size="25"
title="Hier nur Vor- und Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)."
value="Eva Gebhard geb. Zander"
onchange="if (Name.value.toUpperCase().search(' GEB[. ]') > -1) {alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!'); setFocus(this); return false};" />