0

我正在构建 Alexa 技能并使用 AMAZON.DATE 插槽类型来获取日期。

我的问题是,当用户说出没有年份的日期时,Alexa 会处理它并返回带有未来日期的日期字符串。

示例 - 今天是2017-09-20,用户向 Alexa 询问日期'Sixth June',Alexa 返回2018-06-06

对于用户未在话语中指定年份的情况,我想使用最近的过去日期而不是最近的未来日期。如果用户指定年份,我不想更改日期年份。

我无法使用 Python 在 AWS Lambda 上处理此问题,因为 Alexa 在 JSON 正文中发送完整的日期字符串,无论用户是否提供年份。

我不知道是否可以使用 Alexa 处理此类用户输入。我可以对 AMAZON.DATE 插槽或其他处理此类用户话语的方式做些什么吗?

4

2 回答 2

1

你不能用内置的日期槽做到这一点,

映射到特定日期(例如“今天”或“11 月 25 日”)的话语转换为完整的日期:2015-11-25。请注意,这默认为当前日期或之后的日期。

来源:- https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference#date

您可以尝试的一种逻辑是执行自定义逻辑。取用户输入的今天日期和明年相同日期之间的差异。如果它们之间的月差大于 6 个月,则最近的日期将是未来日期。如果差异小于 6 个月,则为过去日期。假设用户在 2017 年 7 月 25 日(在 2017 年)输入,今天的日期是 2017 年 8 月 25 日。现在您可以将 1 年添加到 7 月 25 日,然后您将得到 2018 年 7 月 25 日。2018 年 7 月 25 日和 2017 年 8 月 25 日之间的差异大于 6 个月所以你想要的日期是过去的日期,即 2017 年 7 月 25 日,反之亦然。为了更准确,您可以按天计算而不是按月计算

于 2017-09-20T15:44:52.023 回答
0

将 Alexa 的插槽输入日期字符串转换为 js 日期对象后,(可能使用amazon-date-parser)下面可以工作

if (dateobj > new Date()) {
      var currentMonth = new Date().getMonth()
      var dateMonth = dateobj.getMonth()
      var offset = dateMonth > currentMonth ? 1 : 0 //  if current month is to be set with past year use >=
      dateobj.setFullYear(new Date().getFullYear() - offset);
 }
于 2022-02-14T05:43:29.400 回答