从Alexa Skills Kit(ASK)获取位置

时间:2016-05-02 15:30:19

标签: alexa-skills-kit

我正在寻找一种方法来获取用户的位置,理想情况是经度/纬度,但地址也可以使用,从Alexa Skill Kit请求到我的自定义技能。此外,我不想让用户链接到我应用程序的帐户。

这可能吗?如果是这样,怎么样?

5 个答案:

答案 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以获取权限配置的更多详细信息

https://developer.amazon.com/blogs/alexa/post/0c975fc7-17dd-4f5c-8343-a37024b66c99/alexa-skill-recipe-using-the-device-address-api-to-request-information