Device Address API를 사용하여 주소 얻기
7417 단어 달콤한AlexaSkillsKit알렉사
Device Address API
가 추가되었습니다.이를 통해 사용자는 Skill을 실행한 장치에 연결된 위치 정보(주소, 우편 번호, 국가)를 Skill 측에서 검색할 수 있습니다.
지금까지는 우편번호밖에 없었기 때문에 세세한 위치를 알 수 있는 방법은 없었습니다만, 이것으로 개별 Skill로 주소를 질문하는 것 같은 Intent를 준비할 필요가 없어졌을까 생각합니다.
Echo에 주소를 연결
주소 정보를 얻으려면 사전에 사용자가 Alexa App에서 장치에 주소 정보를 등록해야 합니다.
Alexa App을 열고
Settings
의 Devices
에서 등록할 장치를 선택합니다.h tp : /// 아. 아마존. 이 m/s파/그리고 x. HTML# 또는 rds
기본 상태라면 우편번호만 등록되어 있는 상태이므로 오른쪽의
Edit
를 클릭하여 입력합니다.입력한 주소에 맞는 후보가 있으면 선택할 수 있습니다.
시험에 엠파이어 스테이트 빌딩의 주소를 넣어 보았습니다.
기기의 위치 정보를 검색하는 Skill 만들기
Amazon 개발자 콘솔에서 Skill 목록을 보고
Add a New Skill
를 클릭하여 새로 추가합니다.htps : //에서 ゔぇぺぺr. 아마존. 이 m/에 dw/ 칭찬. HTML#/s
사용자 정의 Skill을 선택하고 적절한 이름을 지정합니다.
이 예에서는 Invocation Name을
address demo
로 등록했습니다.Configuration 위치에 이번 시도하는 Permissions가 추가되어 있으므로
Device Address
를 체크하고 Full Address
를 선택합니다.주의)
여기에서 허가한 정보를 돌려주는 엔드포인트 밖에 이용할 수 없습니다.
FullAddress를 허용하더라도 국가, 우편 번호의 끝점을 두드리면 403 Forbidden이됩니다.
Skill 구현
기기에 연결된 주소는 Skill로 보내지는 않지만 전송된 정보를 바탕으로 다른 API를 두드려 얻어야 합니다.
Alexa에서 보낸 JSON은 다음과 같습니다.
{
"session": {
"new": true,
"sessionId": "some session id",
"user": {
"userId": "amzn1.ask.account.some_user_id",
"permissions": {
"consentToken": "some_token"
}
},
"application": {
"applicationId": "amzn1.ask.skill.some_app_id"
}
},
"version": "1.0",
"request": {
"locale": "en-US",
"timestamp": "2017-04-08T05:52:11Z",
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.some_request_id"
},
"context": {
"AudioPlayer": {
"playerActivity": "IDLE"
},
"System": {
"device": {
"deviceId": "amzn1.ask.device.some_device_id",
"supportedInterfaces": {
"AudioPlayer": {}
}
},
"application": {
"applicationId": "amzn1.ask.skill.some_app_id"
},
"user": {
"userId": "amzn1.ask.account.some_user_id",
"permissions": {
"consentToken": "some_token"
}
},
"apiEndpoint": "https://api.amazonalexa.com"
}
}
}
이 JSON의 다음 항목을 사용합니다.
JSON 키
의미
context.System.device.deviceId
device id
context.System.user.permissions.consentToken
token
context.System.apiEndpoint
api endpoint
주소 전부 취득
이 정보를 취득하는 경우의 엔드 포인트는 다음과 같습니다.
/v1/devices/{deviceId}/settings/address
이제 echosim에서
Open address demo
라고 말하면 검색한 주소에 응답합니다.API를 두드려 얻은 JSON은 이런 정보
{
"addressLine1": "5th Ave",
"addressLine2": null,
"addressLine3": null,
"districtOrCounty": "New York",
"stateOrRegion": "NY",
"city": "New York",
"countryCode": "US",
"postalCode": "10016"
}
카드 표시
사용자가 주소 제공을 허용하지 않는 경우 Alexa의 요청에
consentToken
가 포함되지 않습니다.그러한 경우는 허가를 허가하여 카드가 새롭게 준비되었으므로, Alexa에 돌려주는 JSON에 그 카드를 지정해 줍니다.
'card': {
'type': 'AskForPermissionsConsent',
'permissions': [
'read::alexa:device:all:address'
]
}
국가와 우편 번호만 사용하는 경우
read::alexa:device:all:address:country_and_postal_code
를 permissions로 지정합니다.이런 식으로 Alexa App에 카드가 표시됩니다.
샘플 소스
# -*- coding: utf-8 -*-
from __future__ import print_function
import os
import json
import urllib2
def describe_device_address(api_host, device_id, access_token):
req = urllib2.Request("{}/v1/devices/{}/settings/address".format(api_host, device_id))
req.add_header("Authorization", "Bearer {}".format(access_token))
response = urllib2.urlopen(req)
if response.getcode() == 200:
return json.loads(response.read())
else:
print(response.getcode())
raise Exception(response.msg)
def lambda_handler(event, context):
print(event)
api_host = event["context"]["System"]["apiEndpoint"]
device_id = event["context"]["System"]["device"]["deviceId"]
token = event["context"]["System"]["user"]["permissions"]["consentToken"]
address = describe_device_address(api_host, device_id, token)
print(address)
speech_output = "country is {0}. zipcode is {1}. Address is {2} {3} {4} ".format(
address["countryCode"],
address["postalCode"],
address["addressLine1"],
address["city"],
address["stateOrRegion"]
)
response = build_response(build_speechlet_response(speech_output))
return response
def build_speechlet_response(output):
title = 'Address Demo'
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'AskForPermissionsConsent',
'permissions': [
'read::alexa:device:all:address'
]
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': title
}
},
'shouldEndSession': True
}
def build_response(speechlet_response):
return {
'version': '1.0',
'response': speechlet_response
}
Reference
이 문제에 관하여(Device Address API를 사용하여 주소 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sparkgene/items/7320aa5b48b76818e84a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)