【问题标题】:Change Amazon Lex Chat bot Time zone更改 Amazon Lex 聊天机器人时区
【发布时间】:2018-11-01 06:03:22
【问题描述】:

现在,我正在将我的亚马逊 Lex 聊天机器人集成到我的网络中。我遇到了时区问题。时区位于美国东部(弗吉尼亚北部)。所以如果我今天说,那是基于弗吉尼亚时间。所以我找到了如何更改时区,建议将 x-amz-lex:time-zone 请求属性设置为我的区域。但我不知道该怎么做以及在哪里做。请帮助我!!谢谢。 我使用了简单的模板"https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml"。 我从 SnippetUrl 复制代码并粘贴到我的网页。聊天机器人出现。那么我应该如何传递这些请求属性。

this this my chat bot in amazon lex

this is my cloud formation

These codes are from SnippetUrl in CodeBuildDeploy

【问题讨论】:

  • 为此,您需要使用 PostContent 或 PostText API。您的 Lex 机器人的当前设置是什么? (用户到哪个频道,该频道如何连接到 Lex?)如果您已经在使用 PostContent 或 PostText,那么您正在使用什么编程语言?
  • 我已经将我的聊天机器人集成到了我的网站中。除时区外,一切正常。现在,我在新加坡。如果我今天说,聊天机器人是返回弗吉尼亚美国时间。我使用简单的模板来构建我的聊天机器人。在此之后,我复制脚本代码并粘贴到我的网页。我将 ASP.net 用于 API 和 lambda 函数。谢谢。
  • 解决方案取决于您如何将聊天机器人与您的网站集成,因此请显示代码或说明您如何将用户输入发送到 Lex。(我可以输入给出一个一般性的答案,但您必须填补空白以使其适用于您的设置,所以我只是想了解您的设置,以便为您的案例提供明确的答案。)
  • 是的,我创建了带有 2 个插槽(亚马逊日期和亚马逊时间)的 amazon lex 机器人。对于 Fulfillment,我使用了“将参数返回给客户端”。我测试并返回基于美国(virigina)的日期和时间。在此之后,我使用了云的形成。我使用的模板在我的帖子中更新,然后我从 SnippetUrl 复制代码并粘贴到我的网页。在此之后,聊天机器人出现在我的网页中,我可以使用它,但日期时区基于美国。所以我想换新加坡。所以请帮助我先生!
  • 这是我的测试项目,我的主要项目结构也一样,只是实现方式不同。在我的主要项目中,我使用 lambda 函数来实现。该 lambda 函数是用 asp.net 编写的。 lambda 函数称为 rest api 也使用 asp.net mvc。这是我项目的整体流程。谢谢!我还在我的帖子中更新了一些照片和过程。谢谢!

标签: timezone chatbot amazon-lex


【解决方案1】:

您正在使用的模板中可能有一个选项,但我找不到它,所以这里是您需要了解的有关在 Lex 中设置时区的信息。

首先,从默认的美国东部更改时区的唯一方法是使用PostContent APIPostText API。他们确实应该在 Lex 控制台中有一个时区设置,因此您至少可以设置默认时区,但他们没有。


正确方法:

需要AWS SDK 才能使用PostContent APIPostText API 将用户的输入传递给您的Lex 聊天机器人。当以这种方式向 Lex 传递数据时,您可以在用户输入、唯一 ID 和会话属性(可选)中包含 requestAttributes。下面是如何将requestAttributes 中的timezone 设置为新加坡时间的示例:

{
   "inputText": "What the user said.",
   "requestAttributes": { 
      "x-amz-lex:time-zone" : "Singapore" 
   },
   "sessionAttributes": null
}

解决方法:

如果您不能使用或无法访问 PostContent 或 PostText 的使用,那么您需要使用您所拥有的。现在,看起来您只是在使用 Lambda 函数来实现,但实际上您也应该将它用于“初始化和验证”。

这将在每次 Lex 处理输入时向您的 Lambda 函数传递一个请求,并且您可以指示 Lex 确切的回复方式。这使您可以更好地控制您的聊天机器人。

要了解请求(有时称为“事件”)的格式以及如何在该 Lambda 函数中格式化响应,您需要read these docs

现在,Lex 处理来自用户输入的日期和时间...(在您的示例中,用户说“今天”)...并且 Lex 将使用(日期)@987654333 之类的内容填充日期或时间段@(时间)13:00 适用于东部标准时间 (UTC -5)。但是新加坡是UTC +8。因此,您需要在 Lambda 函数中转换该日期和时间,并将时隙覆盖为等效的新加坡时间,然后在 Lambda 对 Lex 的响应中将这些时隙传递回。

根据您的 Lambda 是使用 Node.js 还是 Python 以及大量关于时区转换的答案和指南,有多种方法可以进行这种转换。


示例:

用户输入:“我想预订今天下午 1 点到 2 点的会议室”

要捕获此输入的值,您的 Intent 应设置为:

3 个时段:{date} {time_start} {time_end}
Intent Utterance:“我想在 {date} 预订从 {time_start} 到 {time_end} 的会议室”

然后 Lex 将解析输入并填充槽(使用默认时区:美国东部)。然后 Lex 会将请求传递给您的“初始化和验证”Lambda 函数。请求(或“事件”)将包括:

{
  "currentIntent": {
    "name": "BookRoom",
    "slots": {
      "date": "2018-11-05",
      "time_start": "13:00",
      "time_end": "14:00",
    },
  },
  ...
}

然后您可以在 Lambda 函数中获取这些值 (Node.js):

var date = event['currentIntent']['slots']['date'];
var time_start = event['currentIntent']['slots']['time_start'];
var time_end = event['currentIntent']['slots']['time_end'];

现在是您的转换逻辑:
由于新加坡比美国东部时间早 13 小时,因此只需将这些时间加上 13 小时即可。如果这样做时过了午夜,那么也将日期增加 1 天。

这适用于 "today""tomorrow""next tuesday" 甚至 "25 的输入2035 年 1 月",因为 Lex 以相同的方式解析所有这些,并以默认的美国东部时间将它们传送到您的 Lambda,格式为(日期)yyyy-mm-dd 和(时间)hh:mm

转换它们后,只需将这些槽设置为新的日期和时间,然后在您的响应中将这些槽传递回 Lex。然后 Lex 将保留新加坡时间的槽值。

【讨论】:

  • 首先,我真的很感谢你。谢谢杰。
  • 我的 lambda 函数是使用 Asp.net 的。我认为我不能像 UTC +8 那样进行硬编码,因为有很多情况,比如用户可以说今天下午 1 点或 11 月 5 日下午 1 点。所以如果我进行硬编码,今天可以,但是 11 月 5 日下午 1 点会错的。顺便说一句,您知道哪个模板可以选择更改时区吗?谢谢
  • 我认为没有任何模板可以更改时区,因为他们希望您以“正确”的方式进行操作。但是对于我解释的解决方法,您不必担心转换“today”或“5 nov”,因为 Lex 会在发送到您的 Lambda 之前执行此操作。您的 Lambda 将已经收到正确的日期和时间,格式如我所示。然后,您必须弄清楚在时区中将 -5 转换为 +8 的数学运算,并在时间更改超过午夜时更改日期。
  • 我的意思是,假设我想预订今天下午 1 点到 2 点的会议室。我只会说“我想预订今天下午 1 点到 2 点的会议室”。这样数据将到达我的 lambda,我将更改为新加坡时间。所以它会变成明天凌晨 1 点到 2 点。你知道我的意思吗?用户可以说今天或明天或特定日期。因此,您的建议仅适用于今天和明天,而不适用于特定日期。
  • 我已经接受了您描述的案例,并扩展了我的答案以浏览该示例,以及它将如何适用于 任何 日期/时间输入。因为 Lex 会为您解析这些输入,甚至是特定日期。
【解决方案2】:

This is the solution image

终于,我得到了解决方案。如果有人想知道解决方案,请查看照片。我只是尝试修复来自 aws github 的代码。谢谢。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 2018-06-04
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多