现在,我正在将我的亚马逊Lex聊天机器人集成到我的网络中。我遇到了时区问题。时区位于美国东部(弗吉尼亚北部)。所以,如果我今天说的话,那是基于弗吉尼亚时间。因此,我发现了如何更改时区,建议将x-amz-lex:time-zone request属性设置为我的区域。但我不知道该怎么做以及在哪里做。请帮助我!!谢谢。
我使用了简单的模板"https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml"
。
我从SnippetUrl复制了代码,然后粘贴到我的网页上。出现聊天机器人。那么我应该如何传递这些请求属性。
答案 0 :(得分:1)
您正在使用的模板中可能有一个选项,但我找不到它,所以这是您在Lex中设置时区所需的知识。
首先,更改默认时区为东部时区的唯一方法是使用PostContent API或PostText API。他们应该在Lex Console中确实有一个时区设置,因此您至少可以设置默认时区,但是没有。
正确的方法:
需要AWS SDK才能使用PostContent API或PostText API将用户的输入传递给您的Lex聊天机器人。以这种方式将数据传递给Lex时,您可以在用户的输入,唯一ID和会话属性(可选)中包括requestAttributes
。以下示例说明了如何将timezone
中的requestAttributes
设置为新加坡时间:
{
"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处理来自用户输入的日期和时间...(在您的示例中,用户说“ today”)...并且Lex将使用诸如(date){{ 1}}(时间)2018-11-02
,适合东部标准时间(UTC -5)。但是新加坡是世界标准时间+8。因此,您需要在Lambda函数中转换该日期和时间,并将广告位改写为等效的新加坡时间,然后将这些广告位传回Lambda对Lex的回复中。
根据您的Lambda是使用Node.js还是Python以及多种时区转换的答案和指南,有多种转换方法。
示例:
用户输入:“我想今天从下午1点到下午2点预订会议室”
要捕获此输入的值,您的Intent应该设置为:
3个广告位:{date} {time_start} {time_end}
目的话语:“我想在{date}从{time_start}到{time_end}预定一间会议室”
然后Lex将解析输入并填充插槽(使用时区默认值:美国东部)。然后,Lex将请求传递给您的“初始化和验证” Lambda函数。该请求(或“事件”)将包括:
13:00
然后在Lambda函数中,您可以获取这些值(Node.js):
{
"currentIntent": {
"name": "BookRoom",
"slots": {
"date": "2018-11-05",
"time_start": "13:00",
"time_end": "14:00",
},
},
...
}
现在输入转换逻辑:
由于新加坡比美国东部要早13个小时,因此只需花些时间再加上13个小时即可。如果这样做的时间是午夜,那么还可以将日期增加1天。
这将适用于“今天” ,“明天” ,“下周二” 甚至“ 25 2035年1月” ,因为Lex以相同的方式解析所有这些内容,并以默认的美国东部时间(日期)var date = event['currentIntent']['slots']['date'];
var time_start = event['currentIntent']['slots']['time_start'];
var time_end = event['currentIntent']['slots']['time_end'];
和(时间)yyyy-mm-dd
的形式将它们简单地传递到Lambda。 / p>
转换它们之后,只需将这些广告位设置为新的日期和时间,然后在您的响应中将这些广告位传回Lex。然后,Lex将保留新加坡时间的时段值。
答案 1 :(得分:0)
最后,我找到了解决方案。如果有人想知道解决方案,请检查照片。我只是尝试从AWS github修复代码。谢谢。