日期时间总是给 1200HRS

Date-time always giving 1200HRS

我正在开发聊天机器人并使用 Dialogflow 的 sys.date-time 实体。因此,当我向机器人显示一些日期时,例如 "Today" 或 "Feb 14",我总是得到

"parameters": {
  "date-time": "2021-02-14T12:00:00Z"
}

而我想要

"parameters": {
  "date-time": "2021-02-14T00:00:00Z"
}

现在我正在使用我的应用程序将 datetime 替换为 hours=0,但是,我也希望机器人提供

"parameters": {
  "date-time": "2021-02-14T08:00:00Z"
}

当我说 "feb 14 8AM"(明确提到小时)时,应用程序将替换小时。所以必须从 Dialogflow 方面修复它。请问有什么解决办法吗?

对于 Dialogflow 系统实体 @sys.date-time,这是按照 ISO-8601 格式的默认行为,您可以做的是解决这个问题,而不是使用 @sys.date-time,请按照以下步骤操作:

  1. 对日期和时间使用两个单独的参数 @sys.date@sys.time
  2. @sys.date设为必需,将@sys.time设为可选。
  3. @sys.time 设置一些适当的默认值作为 00:00:00 这样当没有像 FEB 14 那样给出时间时它将把时间作为默认值。
  4. 在您的应用中,您可以使用这两个值。

示例意图

希望对您有所帮助!

我能够通过正确分析 value 收到的 @sys.date-time 内置多个短语的 Dialogflow 实体来解决这个语义错误。

当只提到 day/date 时(比如 Feb 14 2020),这是我收到的数据:

"parameters": {
  "date-time": "2020-02-14T12:00:00Z"
}

当我明确提到时间和日期(比如Feb 14 3pm)时,这是收到的数据:

"parameters": {
  "date-time": {
    "date_time": "2021-02-14T15:00:00Z"
  }
}

这里的区别在于,在第二种情况下,嵌套字典呈现在date-time

为了区分它们,我能够在我的应用程序上分割 ISO-8601 格式并将 12:00:00 替换为 00:00:00,但是如果我收到的是字典,我没有 slice/replace它。