The @sys.duration
系统实体 https://cloud.google.com/dialogflow/docs/reference/system-entities将向您发送一个具有两个属性的对象,“金额”包含一个整数,“单位”包含一个字符串。
所以在 Javascript 中,这将表示为:
{
"amount": 20,
"unit": "min"
}
要将其转换为秒,您需要查找提供的“单位”中有多少秒,并将其乘以该数量。
执行此查找的一个好方法是创建一个对象,该对象具有可能的单位名称作为属性和秒数作为值。对于大多数单位来说,这在长达一周的时间里效果很好。然而,当您达到一个月或一年(或更长时间)时,您就会遇到麻烦,因为这些时间段的秒数可能是可变的。为了表示这些,我将它们标记为负数,以便您可以检查转换是否失败。 (我忽略了时钟更改的问题,例如由于夏令时/夏令时。)
我还没有完全测试这段代码,但它似乎是正确的。该函数允许您传递在the_duration
参数并返回秒数:
function durationToSeconds( duration ){
const mult = {
"s": 1,
"min": 60,
"h": 60*60,
"day": 60*60*24,
"wk": 60*60*24*7,
"mo": -1,
"yr": -1,
"decade": -1
};
return duration.amount * mult[duration.unit];
}
从字符串中提取数字当然是可能的,并且您可以调整此函数以这种方式工作,但由于 Dialogflow 已经将其作为具有规范化字符串的对象提供给您,因此这将变得更加困难。