1

我是 Dialogflow CX 的新手,无法弄清楚如何在某个条件下使用日期。我想要求输入生日并且大于 2000-01-01。我努力了

$intent.params.dob.resolved > 2005-01-01

带引号和不带引号,但它不起作用(总是错误的)。我发现$intent.params.dob.original > "1/1/01"所有日期都被解析为 True,所以这没有帮助。

有没有可行的方法?

4

3 回答 3

1

为了实现您描述的用例,您可以利用条件路由条件响应根据条件返回响应。这是您可以使用的条件:

$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)

以下是供您参考的示例:

A. 使用条件响应中的条件 条件响应

B. 使用条件作为条件路径: 条件路线

请注意,birthdate 参数不是字符串参数。它由年、月和日子参数组成,因此适合将它们用于您的用例。另请注意,日期采用 ISO-8601 格式。有关更多信息,您可以参考系统实体文档。

以下是使用条件响应中定义的条件的以下结果:

  1. 当用户输入同一年但不是 1 月 1 日时 1
  2. 当用户输入无效日期时 2
  3. 当用户输入 2000-01-01 的上一个日期时 3
  4. 当用户输入有效日期并且最晚从 2000-01-01 4
于 2021-04-07T21:41:00.860 回答
0

几周前我遇到了类似的问题。问题是,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 访问(并且会话参数没有“解析值”,默认情况下它们是解析的)。

所以,回顾一下。确保您使用的是系统日期实体。为您需要验证的日期的所有部分(年、月、日)设置条件,并尝试将您的参数用作会话参数

我希望至少我写的一些内容可以帮助你,快乐的机器人构建!

于 2021-04-06T08:23:04.983 回答
0

我猜$intent.params.dob.resolved返回一个字符串,所以你需要先构建一个日期对象,然后将它与你的日期进行比较。

于 2021-03-24T09:03:44.777 回答