ユーザーの場所、理想的には経度/緯度を取得する方法を探していますが、住所はAlexaスキルキットのリクエストからカスタムスキルまで機能します。また、ユーザーが自分のアプリ側のアカウントにリンクする必要はありません。
これは可能ですか?もしそうなら、どのように?
Amazon開発者フォーラムのこのスレッド のように、現在(2016年5月現在)公開されているAPIを介してユーザーの場所を取得する方法はありません。 UberやDominoのように、そうできる唯一のスキルは、Alexaスキルキットでは利用できないAPIを利用しています。ただし、「Jamie @ Amazon」がこのディスカッションにこの返信を残したため、追加される可能性があります。
ちょっと、そこ、
投稿いただきありがとうございます。
これはロードマップに追加されました。フィードバックをお寄せいただきありがとうございます。
ジェイミー
ただし、執筆時点では、このような機能の実装に関する更新は提供されていません。
Amazonは現在(2017-04-05)この機能を追加しています。新しい Device Address API については 彼らのブログ投稿 を参照してください。
この新しいAPIを使用すると、顧客のデバイス設定で指定されたデバイスのアドレス(郵便番号または完全なアドレス)を取得できます。
それから、ジオコーディングAPI(Google Maps APIの一部など)を使用して、住所を位置座標に変換できます。
@Tomが指摘したように、カスタムスキルでデバイスアドレスを取得できるようになりました。 Pythonを使用してスキルを作成する場合、新しいAPIを実装するのは非常に簡単です。それについての詳細なブログ投稿を作成しました here 。また、取得した住所に対応する座標を取得する方法。これが役立つ場合があります。簡単に説明すると、Python関数を使用して開始できます。非常に便利なFlask-Askライブラリを使用しますしたがって、deviceIdオブジェクトと承諾トークンオブジェクトの値を簡単に取得できます。これらは、スキルに送信されるJSONリクエストにAlexaによって含まれます。これらは、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 を使用して、この住所を座標に変換できます。
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
}
}
Alexaスキルキット(ASK)から場所を取得するには、以下のURLに従ってください
URL: https://api.eu.amazonalexa.com/v1/devices/ {devicesId}/settings/address/countryAndPostalCode
ヘッダーは次のようになります。
Host:api.eu.amazonalexa.com [jsonからのテスト中に取得できるホストを開発者アカウントから保持] Accept:application/json Authorization:Bearer [KEEPあなたのapiAccessTokenはこちら]
リクエストが成功した場合、次のように応答します。
{ "countryCode": "IN"、 "postalCode": "560102" }
Alexaアプリで権限を有効にし、それぞれのスキルの権限を付与していることを確認してください。権限構成の詳細については、次のURLを参照してください