Amazon AlexaAWS

alexa-sdkからデバイスの情報を取得する

この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の22日目の記事です。 Alexa Skillの「設定」に「アクセス権限」という項目があります。 デバイスア […]

広告ここから
広告ここまで

この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の22日目の記事です。

Alexa Skillの「設定」に「アクセス権限」という項目があります。

デバイスアドレスとリストへのアクセス権限がそれぞれ設定できますが、実際にデータを取得するためにはアプリによる認証が必要となります。

alexa-sdkの場合、各インテントのfunction内でthis.event.context.System.user.permissions.consentTokenに値が入っているかいないかで判断することができます。

tokenの有無を判定するサンプル

const consentToken = this.event.context.System.user.permissions.consentToken || '';;
if(!consentToken) {
    this.emit(":tellWithPermissionCard", 'Amazon Alexaアプリでデバイスアドレスへのアクセス権限を有効にしてください。', ["read::alexa:device:all:address"]);
    return;
}
// access device data

:tellWithPermissionCardを使うことで、Amazon Alexaアプリに認証画面付きのカードを表示させることができます。

そちらでユーザーにデバイスデータへのアクセスを許可してもらうことで、以降そのデバイスではデバイスデータを利用することができるようになります。

データの取り出し方サンプル

const Alexa = require('alexa-sdk')
const AlexaDeviceAddressClient = Alexa.utils.TextUtils.AlexaDeviceAddressClient

const consentToken = this.event.context.System.user.permissions.consentToken || '';
if(!consentToken) {
    this.emit(":tellWithPermissionCard", 'Amazon Alexaアプリでデバイスアドレスへのアクセス権限を有効にしてください。', ["read::alexa:device:all:address"]);
    return;
}
const deviceId = this.event.context.System.device.deviceId;
const apiEndpoint = this.event.context.System.apiEndpoint;

const alexaDeviceAddressClient =new Alexa.services.DeviceAddressService();
alexaDeviceAddressClient.getFullAddress(deviceId, apiEndpoint, consentToken)
                    .then((data) => {
                             this.response.speak('<address information>');
                             console.log('Address get: ' + JSON.stringify(data));
                             this.emit(':responseReady');
                     })
                   .catch((error) => {
                             this.response.speak('I\'m sorry. Something went wrong.');
                             this.emit(':responseReady');
                             console.log(error.message);
                     });

Alexa.services.DeviceAddressServiceクラスの中に取得処理が用意されています。
getCountryAndPostalCodegetFullAddressの2つがあり、どちらもPromise形式でデータを取得する方法をとっています。

Device Addressにアクセスするサンプルスキルも公式で用意されている様子(ただしちょっと実装がふるめ)ですので、Amazon Alexaアプリに登録された住所などのデータを利用したい場合はぜひお試しください。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts