我是 Dialogflow CX 的新手,无法弄清楚如何在某个条件下使用日期。我想要求输入生日并且大于 2000-01-01。我努力了
$intent.params.dob.resolved > 2005-01-01
带引号和不带引号,但它不起作用(总是错误的)。我发现$intent.params.dob.original > "1/1/01"
所有日期都被解析为 True,所以这没有帮助。
有没有可行的方法?
我是 Dialogflow CX 的新手,无法弄清楚如何在某个条件下使用日期。我想要求输入生日并且大于 2000-01-01。我努力了
$intent.params.dob.resolved > 2005-01-01
带引号和不带引号,但它不起作用(总是错误的)。我发现$intent.params.dob.original > "1/1/01"
所有日期都被解析为 True,所以这没有帮助。
有没有可行的方法?
为了实现您描述的用例,您可以利用条件路由或条件响应根据条件返回响应。这是您可以使用的条件:
$intent.params.birthdate.resolved.year > 2000 OR
($intent.params.birthdate.resolved.year = 2000 AND
$intent.params.birthdate.resolved.month > 1) OR
($intent.params.birthdate.resolved.year = 2000 AND
$intent.params.birthdate.resolved.month = 1 AND
$intent.params.birthdate.resolved.day > 1)
以下是供您参考的示例:
请注意,birthdate 参数不是字符串参数。它由年、月和日子参数组成,因此适合将它们用于您的用例。另请注意,日期采用 ISO-8601 格式。有关更多信息,您可以参考系统实体文档。
以下是使用条件响应中定义的条件的以下结果:
几周前我遇到了类似的问题。问题是,Dialogflow 实际上默认为字符串参数:这意味着作为参数输入的每个值(默认情况下)都是一个字符串,被“引号”包围。要在日期之间进行比较,您需要比较整数/数字,我认为最好的方法是利用日期系统实体。
例如,系统实体
@sys.date
允许您匹配用户插入的日期。那么最好的部分是,在您的情况下,您甚至可以通过引用 sub-parts来管理日期。这是一个例子:
if $intent.params.dob.year <= 2005 AND $intent.params.dob.month <= 04:
I'm sorry, you're too young to use this service!
endif
此外,在旁注中,一旦 Dialogflow 从参数设置状态迈出一步,“意图参数”实际上就变成了“会话参数”。这意味着,如果您在用户说“我出生于 2004 年 7 月 13 日”时设置参数dob,然后进入新页面,则该参数只能作为 $session.params.dob 访问(并且会话参数没有“解析值”,默认情况下它们是解析的)。
所以,回顾一下。确保您使用的是系统日期实体。为您需要验证的日期的所有部分(年、月、日)设置条件,并尝试将您的参数用作会话参数。
我希望至少我写的一些内容可以帮助你,快乐的机器人构建!
我猜$intent.params.dob.resolved
返回一个字符串,所以你需要先构建一个日期对象,然后将它与你的日期进行比较。