如何解决如何在 Dialogflow CX 的逻辑条件中使用日期
我是 Dialogflow CX 的新手,无法弄清楚如何在条件中使用日期。我想要求输入出生日期并且大于 2000-01-01。我试过了
$intent.params.dob.resolved > 2005-01-01
带和不带引号,但它不起作用(总是错误的)。我发现 $intent.params.dob.original > "1/1/01"
对于所有日期都被解析为 True,因此没有帮助。
有没有有效的方法?
解决方法
要实现您描述的用例,您可以使用 condition route 或 conditional response 根据条件返回响应。这是您可以使用的条件:
$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 格式。如需了解详情,请参阅 System Entities 文档。
以下是使用条件响应中定义的条件的以下结果:
,我猜 $intent.params.dob.resolved
返回一个字符串,所以你需要先构建一个日期对象,然后将它与你的日期进行比较。
几周前我遇到了类似的问题。问题是,Dialogflow 实际上默认为字符串参数:这意味着作为参数输入的每个值(默认情况下)都是一个字符串,由“引号”包围。 要在您想要比较整数/数字的日期之间进行比较,我认为最好的方法是利用日期系统实体。
例如系统实体
@sys.date
允许您匹配用户插入的日期。那么最好的部分是,在您的情况下,您甚至可以通过引用子部分来管理日期。下面是一个例子:
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(并且会话参数没有“解析值”,它们默认解析)。
所以,回顾一下。确保您使用的是系统日期实体。为您需要验证的日期的所有部分(年、月、日)设置条件,并尝试将您的参数用作会话参数。
我希望至少我写的一些内容可以帮助你,快乐的机器人构建!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。