GitHubのAlexa Skills クックブックでは、短いコードサンプルを使用して、魅力的なAlexaスキルを構築するためのレシピを紹介しています。 Alexaスキル開発トレーニングシリーズでは、このクックブックを参考に、ボイスデザインとスキルエンゲージメントの向上に役立つレシピを紹介いたします。
今回は、公式リポジトリのサンプルコードを参考に、デバイスアドレスAPIの実装方法について解説いたします。
デバイスアドレスAPIを使用することで、デバイスの所在地データを活用したスキルを作成できます。たとえば、近隣レストランのおすすめ情報を提供したり、近くのジムに道順を案内するといったスキルを所在地データを活用して作成することができます。
今回使用するサンプルコードはこちらです。
https://github.com/alexa/alexa-cookbook/tree/master/feature-demos/skill-demo-device-location
サンプルコードでは、デバイスアドレス取得機能を以下の4つのパートに分けて実装しています。
① 所在地を取得するためのパーミッションの設定
② アクセス権が許諾されていない場合に許諾を促すための処理
③ serviceClientFactoryを利用したアドレス取得処理
④ 取得した所在地情報を使用したレスポンスの作成
① 所在地を取得するためのアクセス権限の設定
アクセス権限の設定には2つの方法があります。
a) skill.json に所在地を取得するためのパーミッションを設定
skill.json 29行目~
"permissions": [
{
"name": "alexa::devices:all:address:full:read"
}
]
b) skill.jsonに記載する以外に、開発者コンソールでパーミッションを設定することも可能です。
参考:
デバイスアドレスの権限をユーザーにリクエストするようスキルを設定する
② アクセス権が許諾されていない場合に許諾を促すための処理
index.js 39行目~
// APIアクセストークンを取得し、アクセス権許諾状況を確認
// アクセス権が許諾されていない場合は、アクセス権許諾を促すメッセージとホームカードを送信
const consentToken = requestEnvelope.context.System.apiAccessToken;
if (!consentToken) {
return responseBuilder
.speak(messages.NOTIFY_MISSING_PERMISSIONS)
.withAskForPermissionsConsentCard(PERMISSIONS)
.getResponse();
}
参考:
ユーザーが権限付与を承諾しない場合のフォールバックメッセージ
③アドレス取得処理
index.js 47行目~
const { deviceId } = requestEnvelope.context.System.device;
//リクエストに含まれるserviceClientFactoryを利用して、deviceAddressServiceClientを取得
//serviceClientFactoryを利用するにはskillBuilderに.withApiClient(new Alexa.DefaultApiClient())を設定する必要があります。
const deviceAddressServiceClient =
serviceClientFactory.getDeviceAddressServiceClient();
//deviceIdを引数にしてデバイスのアドレスを取得
const address = await deviceAddressServiceClient.getFullAddress(deviceId);
④ 取得した所在地情報を使用し、レスポンスを作成
let response;
//デバイスアドレスが設定されていない場合の処理
if (address.addressLine1 === null && address.stateOrRegion === null) {
response = responseBuilder.speak(messages.NO_ADDRESS).getResponse();
} else {
//デバイスの住所・地域・郵便番号を結合してレスポンスを作成
//応答パラメータについては下記の参考:応答パラメータ詳細を参照してください。
const ADDRESS_MESSAGE =
`${messages.ADDRESS_AVAILABLE + address.addressLine1},
${address.stateOrRegion},
${address.postalCode}`;
response = responseBuilder.speak(ADDRESS_MESSAGE).getResponse();
}
return response;
参考:
ここまでで、デバイスアドレス取得機能の実装方法を紹介しました。デバイスのアドレス情報を使用するスキルは、ユーザーのデータを保護するため、以下の要件を満たす必要があります。スキルがこれらの要件のいずれかに違反しているとAmazonが判断した場合、スキル認定の申請は却下または保留になります。 公開する時には、実際にユーザーテストを繰り返して、要件を満たしていることを確認してください。
Alexa Skills Kit (ASK) (日本語) スペースでは、スキル開発に関する質問や、他の開発者の質問に対する回答を投稿することができます。お気軽に投稿ください。