Je cherche un moyen d'obtenir l'emplacement de l'utilisateur, idéalement longitude/latitude, mais l'adresse fonctionnerait également, à partir de la demande de kit de compétences Alexa jusqu'à ma compétence personnalisée. De plus, je ne souhaite pas que l'utilisateur soit associé à un compte du côté de mon application.
Est-ce possible? Si c'est le cas, comment?
Conformément à ce fil sur les forums de développement Amazon , il n'existe actuellement (à compter de mai 2016) aucun moyen d'obtenir l'emplacement de l'utilisateur via les API disponibles au public. Les seules compétences capables de le faire, telles que Uber ou Domino, utilisent des API qui ne sont pas disponibles dans le Alexa Skills Kit. Cependant, il est à espérer que cela pourra être ajouté, car "Jamie @ Amazon" a laissé cette réponse dans cette discussion:
Héy,
Merci d'avoir posté.
Cela a maintenant été ajouté à la feuille de route. Merci pour les commentaires.
Jamie
Cependant, au moment de la rédaction de ce document, aucune autre mise à jour n'a été fournie concernant la mise en œuvre d'une telle fonctionnalité.
Amazon a maintenant (2017-04-05) ajouté cette capacité. Voir leur article de blog à propos de leur nouvelle Device Address API .
En utilisant cette nouvelle API, vous pouvez obtenir l’adresse (code postal ou adresse complète) de l’appareil, telle que spécifiée dans les paramètres de l’appareil du client.
À partir de là, vous pouvez utiliser une API de géocodage (faisant partie de l'API Google Maps) pour traduire l'adresse en coordonnées de localisation.
Il est maintenant possible d'obtenir la géolocalisation en temps réel de l'utilisateur (longitude/latitude) à l'aide de Alexa Location Services , ce qui évite de devoir intégrer une API de géocodage séparée, comme le suggèrent d'autres réponses. Voir la rubrique blogpost pour obtenir des informations officielles sur la sortie de cette fonctionnalité.
Si le périphérique est compatible (context.System.device.supportedInterfaces.Geolocation
existe), que les services de localisation sont en cours d'exécution et que l'autorisation Alexa::devices:all:geolocation:read
a été accordée à votre compétence, vous pouvez récupérer un objet Geolocation
via le contexte de la demande, qui équivaut à la charge JSON suivante:
"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
}
}
Comme @Tom l'a fait remarquer, il est maintenant possible d'obtenir l'adresse de l'appareil dans votre compétence personnalisée. Si vous utilisez Python pour créer vos compétences, il est assez facile d'implémenter la nouvelle API. J'ai écrit un article de blog détaillé à ce sujet ici . Il explique également comment obtenir les coordonnées correspondantes pour l'adresse extraite, ce qui peut vous être utile. En bref, voici une fonction Python pour vous aider à démarrer. J'utilise la bibliothèque très pratique Flask-Ask pour améliorer mes compétences. Ainsi, il est facile d’obtenir la valeur des objets deviceId et consentToken. Ceux-ci sont inclus par Alexa dans la demande JSON envoyée à votre compétence. Ils sont nécessaires pour construire la demande sur le point de terminaison de l'API d'adresse Amazon:
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())
La fonction retournera quelque chose comme ceci lors d’un appel réussi:
{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}
Vous pouvez utiliser geopy pour convertir cette adresse en coordonnées.
Veuillez suivre l'URL ci-dessous pour obtenir l'emplacement de Alexa Skills Kit (ASK).
URL: https://api.eu.amazonalexa.com/v1/devices/{devicesId}/settings/address/countryAndPostalCode
Votre en-tête serait quelque chose comme ci-dessous:
Hôte: api.eu.amazonalexa.com [gardez votre hôte que vous pouvez obtenir depuis le compte de développeur lors des tests de json] Acceptez: application/json Autorisation: Bearer [GARDEZ VOTRE apiAccessToken ici] .
si la demande a abouti, votre réponse sera comme ci-dessous:
{ "countryCode": "IN", "code postal": "560102" }
Assurez-vous que vous avez activé l'autorisation dans l'application Alexa et que vous accordez l'autorisation de la compétence respective, veuillez vous reporter à l'URL ci-dessous pour plus d'informations sur la configuration de l'autorisation.