我正在寻找一种方法来获取用户的位置,理想情况是经度/纬度,但地址也可以使用,从Alexa Skill Kit请求到我的自定义技能。此外,我不想让用户链接到我应用程序的帐户。
这可能吗?如果是这样,怎么样?
答案 0 :(得分:14)
亚马逊现已(2017-04-05)添加了此功能。有关新their blog post的信息,请参见Device Address API。
使用此新API,您可以获取设备的地址(邮政编码或完整地址),具体取决于客户的设备设置。
由此您可以使用地理编码API(例如Google Maps API的一部分)将地址转换为位置坐标。
答案 1 :(得分:6)
根据this thread on the Amazon Developer forums,目前没有(截至2016年5月)通过公开API获取用户位置的方法。能够这样做的唯一技能,如Uber或Domino,正在使用Alexa Skills Kit无法提供的API。但是,希望它可以添加,因为“Jamie @ Amazon”在讨论中留下了这个回复:
嘿那里,
感谢发帖。
现已添加到路线图中。感谢您的反馈。
杰米
但是,在撰写本文时,没有提供有关此类功能实施的进一步更新。
答案 2 :(得分:2)
正如@Tom指出的那样,现在可以在您的自定义技能中获取设备地址。如果您使用Python来创建技能,那么实现新API非常容易。我写了一篇关于它的详细博客文章here。它还描述了如何获取检索到的地址的相应坐标,因此它可能对您有用。简而言之,这是一个Python函数,可以帮助您入门。我使用非常方便的Flask-Ask库来获得我的技能。因此,很容易获得deviceId和consentToken对象的值。 Alexa在发送给您技能的JSON请求中包含了这些内容。构建对Amazon地址API端点的请求需要它们:
import requests
from flask_ask import Ask, context
def get_alexa_location():
URL = "https://api.amazonalexa.com/v1/devices/{}/settings" \
"/address".format(context.System.device.deviceId)
TOKEN = context.System.user.permissions.consentToken
HEADER = {'Accept': 'application/json',
'Authorization': 'Bearer {}'.format(TOKEN)}
r = requests.get(URL, headers=HEADER)
if r.status_code == 200:
return(r.json())
该功能将在成功通话时返回类似内容:
{u'city': u'Berlin', u'countryCode': u'DE',
u'addressLine1': u'42 Unter den Linden',
u'addressLine2': None, u'stateOrRegion': u'Berlin',
u'districtOrCounty': u'Berlin', u'postalCode': u'10117',
u'addressLine3': None}
您可以使用geopy将此地址转换为坐标。
答案 3 :(得分:2)
现在可以使用Alexa Location Services获取用户的实时地理位置(经度/纬度),这避免了必须与其他答案建议的单独地理编码API集成。有关此功能版本的正式信息,请参阅相关的blogpost。
只要设备兼容(context.System.device.supportedInterfaces.Geolocation
存在),位置服务正在运行,并且您的技能已获得alexa::devices:all:geolocation:read
权限,则可以通过以下方式检索Geolocation
对象:请求的上下文,它等效于以下JSON负载:
"Geolocation":{
"locationServices": {
"access": "ENABLED",
"status": "RUNNING",
},
"timestamp": "2018-03-25T00:00:00Z+00:00",
"coordinate": {
"latitudeInDegrees": 38.2,
"longitudeInDegrees": 28.3,
"accuracyInMeters": 12.1
},
"altitude": {
"altitudeInMeters": 120.1,
"accuracyInMeters": 30.1
},
"heading": {
"directionInDegrees": 180.0,
"accuracyInDegrees": 5.0
},
"speed": {
"speedInMetersPerSecond": 10.0,
"accuracyInMetresPerSecond": 1.1
}
}
答案 4 :(得分:0)
请按照以下URL从Alexa技能套件(ASK)中获取位置
URL: https://api.eu.amazonalexa.com/v1/devices/{devicesId}/settings/address/countryAndPostalCode
您的标题将如下所示:
Host:api.eu.amazonalexa.com[keep your host you can get is from developer account during testing from json] Accept:application/json Authorization:Bearer [KEEP YOUR apiAccessToken here]
如果请求成功,您将收到如下响应:
{ "countryCode": "IN", "postalCode": "560102" }
确保已在Alexa应用程序中启用了权限,并授予了相应技能的权限,请参阅下面的URL以获取权限配置的更多详细信息