Получить местоположение от Alexa Skills Kit (ASK)
Я ищу способ получить местоположение пользователя, в идеале долготу/широту, но адрес тоже будет работать, от запроса Alexa Skill Kit до моего пользовательского навыка. Кроме того, я не хочу иметь ссылку пользователя на учетную запись на стороне моего приложения.
Возможно ли это? Если да, то как?
Ответы
Ответ 1
В соответствии с этот поток на форумах разработчиков Amazon, в настоящее время (по состоянию на май 2016 года) нет способа получить местоположение пользователя через общедоступных API. Единственные умения, которые могут это сделать, такие как Uber или Domino, используют API, которые недоступны через Alexa Skills Kit. Однако есть надежда, что его можно добавить, поскольку "Jamie @Amazon" оставил этот ответ в этом обсуждении:
Привет,
Спасибо за публикацию.
Это добавлено в дорожную карту. Спасибо за отзывы.
Джейми
Однако на момент написания статьи не было дано никакого дополнительного обновления относительно реализации такой функции.
Ответ 2
Амазонка теперь (2017-04-05) добавила эту возможность. См. их сообщение в блоге об их новом API-адресах устройств.
Используя этот новый API, вы можете получить адрес (почтовый или полный адрес) устройства, как указано в настройках устройства клиента.
Из этого вы можете использовать API геокодирования (например, являющийся частью API Карт Google) для перевода адреса в координаты местоположения.
Ответ 3
Как отметил @Tom, теперь можно получить адрес устройства в своем обычном режиме. Если вы используете Python для создания своего навыка, довольно легко реализовать новый API. Я написал подробное сообщение в блоге об этом здесь. Он также описывает, как получить соответствующие координаты для извлеченного адреса, поэтому он может быть вам полезен. Короче говоря, вот функция Python, чтобы вы начали. Я использую очень удобную библиотеку Flask-Ask для своих навыков. Таким образом, легко получить значение объектов deviceId и agreeToken. Они включены Alexa в запрос JSON, посланный на ваше умение. Они необходимы для построения запроса к конечной точке 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 для преобразования этого адреса в координаты.
Ответ 4
Пожалуйста, следуйте ниже URL, чтобы получить местоположение из набора навыков Алекса (ASK)
URL: https://api.eu.amazonalexa.com/v1/devices/ enjdevicesIdcasts/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
Ответ 5
Теперь можно получить геолокацию пользователя в реальном времени (долгота/широта) с помощью сервисов определения местоположения Alexa, что позволяет избежать необходимости интеграции с отдельным 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
}
}