Alexaスキル開発トレーニングシリーズ:デバイスアドレスAPIの利用方法

Tsuneki Umeda Jul 04, 2019
Share:
API Tips & Tools
Blog_Header_Post_Img

GitHubAlexa 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行目~

① 所在地を取得するためのアクセス権限の設定

アクセス権限の設定には2つの方法があります。

 

a) skill.json に所在地を取得するためのパーミッションを設定

skill.json 29行目~

Copied to clipboard
"permissions": [
      {
        "name": "alexa::devices:all:address:full:read"
      }
 ]

b) skill.jsonに記載する以外に、開発者コンソールでパーミッションを設定することも可能です。

how to use alexa skills
② アクセス権が許諾されていない場合に許諾を促すための処理 index.js 39行目~
Copied to clipboard
// APIアクセストークンを取得し、アクセス権許諾状況を確認
// アクセス権が許諾されていない場合は、アクセス権許諾を促すメッセージとホームカードを送信
    const consentToken = requestEnvelope.context.System.apiAccessToken;

    if (!consentToken) {
      return responseBuilder
        .speak(messages.NOTIFY_MISSING_PERMISSIONS)
        .withAskForPermissionsConsentCard(PERMISSIONS)
        .getResponse();
    }
③アドレス取得処理 index.js 47行目~
Copied to clipboard
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);
④ 取得した所在地情報を使用し、レスポンスを作成 index.js 53行目~
Copied to clipboard
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ユーザーを同じ所在地情報を持つアカウントプールのユーザーに関連付けることは認められていません。
  • スキルは、ユーザーがユーザー情報を要求するリクエストを使用してスキルを呼び出すたびに、デバイスアドレスAPIを使用して最新のユーザー情報を取得する必要があります。

■ トレーニングコース目次 ■

Alexa Skills Kit (ASK) (日本語) スペースでは、スキル開発に関する質問や、他の開発者の質問に対する回答を投稿することができます。お気軽に投稿ください。