article

Tsuneki@Amazon avatar image
Tsuneki@Amazon posted

サンプルコード紹介:デバイスアドレス取得機能の実装方法


Alexa Device Address APIを使用して、デバイスの所在地データを活用したスキルを作成できます。


Device Address APIの実装には、公式リポジトリのサンプルコードが参考になります。

今回は、より実装しやすいように該当部分のコードを解説いたします。


今回使用するサンプルコードはこちらです。

https://github.com/alexa/alexa-cookbook/tree/master/feature-demos/skill-demo-device-location


サンプルコードでは、デバイスの所在地取得処理を5つに分けて実装しています。


① 所在地を取得するためのパーミッションの設定
② アクセス権が許諾されていない場合に許諾を促す処理
③ serviceClientFactoryを利用したアドレス取得処理
④ 取得した所在地情報を使用したレスポンス作成処理
⑤ APIClientの設定


① skill.json 29行目

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

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


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を取得
const deviceAddressServiceClient = 
serviceClientFactory.getDeviceAddressServiceClient();

//device IDを引数にしてアドレスを取得
const address = await deviceAddressServiceClient.getFullAddress(deviceId);


④ index.js 53行目

取得した所在地情報を使用し、レスポンスを作成

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;  

参考:

応答パラメーター詳細


⑤ index.js 165行目

APIClientを設定

  .withApiClient(new Alexa.DefaultApiClient())


ご指摘、ご要望がございましたら、お気軽にコメント願います。


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

device address apialexaskillawards2019
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Article

Contributors

tsuneki contributed to this article