2016-05-02 2 views
14

Я ищу способ получить местоположение пользователя, в идеале долготу/широту, но адрес тоже будет работать, от запроса Alexa Skill Kit до моего личного навыка. Кроме того, я не хочу иметь ссылку пользователя на учетную запись на стороне моего приложения.Получить местонахождение от Alexa Skills Kit (ASK)

Возможно ли это? Если да, то как?

ответ

5

Согласно this thread on the Amazon Developer forums, в настоящее время (с мая 2016 года) нет способа получить местоположение пользователя через общедоступные API. Единственные умения, которые могут это сделать, такие как Uber или Domino, используют API, которые недоступны через Alexa Skills Kit. Тем не менее, есть надежда, что он может быть добавлен, как «Джейми @ Amazon» покинул этот ответ в этой дискуссии:

Эй,

Спасибо за регистрацию.

Это добавлено к дорожной карте. Спасибо за ответ.

Джейми

Однако, на момент написания, дальнейшее обновление не было предоставлено в связи с осуществлением такой функции.

12

У Amazon теперь (2017-04-05) добавлена ​​эта возможность. См. their blog post об их новых Device Address API.

Используя этот новый API, вы можете получить адрес (почтовый индекс или полный адрес) устройства, как указано в настройках устройства клиента.

Из этого вы можете использовать API геокодирования (например, часть API Карт Google) для перевода адреса в координаты местоположения.

1

Как отметил @Tom, теперь вы можете получить адрес устройства в своем обычном режиме. Если вы используете Python для создания своего навыка, довольно легко реализовать новый API. Я написал подробное сообщение в блоге об этом here. Он также описывает, как получить соответствующие координаты для извлеченного адреса, поэтому он может быть вам полезен. Короче говоря, вот функция Python, чтобы вы начали. Я использую очень удобную библиотеку Flask-Ask для своих навыков. Таким образом, легко получить значение объектов deviceId и agreeToken. Они включены 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 для преобразования этого адреса в координаты ,

+0

как вы добавляете библиотеку flask_ask? Я пробовал приведенный выше код, но теперь он заставляет мою лямбда-функцию сбой при попытке импортировать модули flask_ask в начале – thefragileomen

+0

'pip install flask-ask' должно быть достаточно. Вы должны проверить документацию: https://flask-ask.readthedocs.io – mc51

Смежные вопросы