21

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

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

4

5 回答 5

15

亚马逊现已 (2017-04-05) 添加了此功能。请参阅他们关于新设备地址 API的博客文章

使用此新 API,您可以获得设备的地址(邮政编码或完整地址),如客户的设备设置中指定的那样。

从那里您可以使用地理编码 API(例如 Google Maps API 的一部分)将地址转换为位置坐标。

于 2017-04-05T14:22:18.793 回答
6

根据亚马逊开发者论坛上的这个帖子,目前(截至 2016 年 5 月)没有办法通过公开可用的 API 获取用户位置。能够做到这一点的唯一技能,例如 Uber 或 Domino,是利用 Alexa Skills Kit 无法提供的 API。但是,希望可以添加它,因为“Jamie@Amazon”在讨论中留下了这个回复:

嘿,

感谢您发布。

现在已将其添加到路线图中。感谢您的反馈。

杰米

但是,在撰写本文时,尚未就此类功能的实现提供进一步的更新。

于 2016-05-02T23:46:35.410 回答
2

现在可以使用Alexa Location Services获取用户的实时地理位置(经度/纬度),这避免了必须与其他答案所建议的单独的地理编码 API 集成。有关此功能发布的官方信息,请参阅相关博文。

假设设备兼容(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
    }       
}
于 2019-01-10T18:54:53.023 回答
2

正如@Tom 所指出的,现在可以在您的自定义技能中获取设备地址。如果您使用 Python 来创建自己的技能,那么实现新 API 非常容易。我在这里写了一篇关于它的详细博客文章。它还描述了如何获取检索到的地址的相应坐标,因此它可能对您有用。简而言之,这里有一个 Python 函数可以帮助您入门。我使用非常方便的 Flask-Ask 库来提高我的技能。因此,很容易获得 deviceId 和许可令牌对象的值。这些由 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将此地址转换为坐标。

于 2017-04-15T21:39:59.467 回答
0

请按照以下 URL 从 Alexa Skills Kit (ASK) 获取位置

网址: https ://api.eu.amazonalexa.com/v1/devices/{devicesId}/settings/address/countryAndPostalCode

您的标题将如下所示:

主机:api.eu.amazonalexa.com [保持你的主机,你可以从 json 测试期间从开发者帐户获得]
接受:应用程序/json
授权:Bearer [KEEP YOUR apiAccessToken here]

如果请求成功,您将得到如下响应:

{
    "countryCode": "IN",
    “邮编”:“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

于 2018-08-23T09:44:57.860 回答