Alexa技能自定义插槽的日期时间

时间:2016-07-13 12:50:22

标签: date alexa-skills-kit

所以,我正在使用Amazon Echo开展一个项目。我的目标是记录我何时执行特定操作并将其记录到数据库中。我的问题是时区,我通过使用纪元时间来避免这种情况。但是,从我能说出的意图的自定义插槽,我的选择是没有时间的格式化日期字符串,或没有日期的格式化时间字符串,除此之外,我没有办法抓住客户端的时区而没有根据我在google fu中找到的一些论坛帖子特别要求它。

回声是否只是讨厌日期?这似乎应该是非常容易的事情,但我很难弄清楚如何去做而不是真的很尴尬,并询问他们住在哪里,所以我可以查找他们的时区。我已经不得不通过告诉他们他们在多长时间之前做了一些事情的具体时间,因为我无法将日期传回Echo并期望它翻译它。这是我必须做的另一个愚蠢的支点吗?

3 个答案:

答案 0 :(得分:1)

正确,您无法从Alexa获取客户的TZ或位置。这是一个隐私问题。唯一的办法就是自己提出要求。

有一个自定义插槽,用于"五位数"这是邮政编码的完美之选。这是获取用户大致位置的最简单方法。

如果你想获得更多的创造力,因为Echo(几乎)只在美国使用,你只需将它缩小到四个时区中的一个。 (以阿拉斯加,夏威夷和亚利桑那州为代价半年。)你可以问一下他们所处的时区,这种侵扰性较小。

或者,如果你想要有创意,可以开玩笑吧。

  • A:"流行测验:您是否在东部标准时间?"
  • U:" No"
  • A:" Drat。让我再猜一次。你好像是山地人。"

...

是。这是一个恼人的限制。但如果你能找到一种新颖的方法来解决它,你的技能会更加可爱。

答案 1 :(得分:1)

看起来你还不能(还)检测用户的时区,但你仍然应该能够实现目标。一些想法:

  • 你可以让系统完全不知道时区。每个用户可能有不同的时区,但特定用户的所有时间都在同一时区,因此任何持续时间计算都可以正常工作。
  • 没有DATETIME插槽类型,因此您需要单独处理每个插槽,如AMAZON.DATE和AMAZON.TIME。例如“在{DATE} {TIME}”
  • 标记完成
  • 此外,如果您是真实世界的标记完成日期时间,您是否可以在代码中生成时间戳,而不是让它们说出来?
  • 如果需要,请求Zip可以是设置时区的快捷方式。
  • Hacky:如果您使用帐户关联,您可以在登录页面上从客户端检测他们的时区。

在用户的时区内转换服务器时间戳和语音时间会有问题,但也许您可以解决它,直到亚马逊包含时区数据。

答案 2 :(得分:0)

有一种方法可以从Amazon提供的国家代码和邮政编码中找到用户的时区。您只需要在开发者控制台中启用权限即可。

此后,每当您收到Alexa语音服务的请求时,您都会得到consent token。表示用户已授予权限。

然后您可以通过查询 Google API 来获取用户的时区。相同的python代码在下面提到。

# to get the country code and postal code of user
res = requests.get('{0}/v1/devices/{1}/settings/address/countryAndPostalCode'.format(context.System.apiEndpoint, context.System.device.deviceId),
                   headers = {'Authorization':'Bearer {}'.format(context.System.apiAccessToken)}).json()
postCode = res['postalCode']
countryCode = res['countryCode']

# key specific to the user
apiAccessKey = 'your-api-key'
# Google Geocoding API: provides latitude and longitude from country code and postal code
res = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address={0},{1}&key={2}'
                   .format(countryCode, postCode, apiAccessKey)).json()

lat = res['results'][0]['geometry']['location']['lat']
lng = res['results'][0]['geometry']['location']['lng']

# Google's Time Zone API: provides timezone from latitude and longitude.
res = requests.get('https://maps.googleapis.com/maps/api/timezone/json?location={0},{1}&timestamp={2}&key={3}'
                   .format(lat, lng, datetime.datetime.timestamp(datetime.datetime.now()),apiAccessKey)).json()

timezone = res['timeZoneId']