ServiceAlexa開発者フォーラムAlexaデザインガイドAlexaスキルマーケティングガイドラインスキルのアトリビュート﻿スキルのアトリビュートこのガイドでは、スキル開発に使用できるアトリビュートのさまざまなスコープと、スコープをスキルで使用する方法について説明します。アトリビュートアトリビュートのスコープAttributesManagerPersistenceAdapterアトリビュートSDKを使うと、さまざまなスコープでアトリビュートの保存と取得が可能になります。アトリビュートを使用して後続のリクエストで取得するデータを保存できます。ハンドラーのcan_handleロジックでアトリビュートを使用して、リクエストのルーティングに条件を追加することもできます。アトリビュートは、キーと値で構成されます。キーはStr型限定、値は無制限のobject型です。セッションアトリビュートと永続アトリビュートの場合、値は保存して後で取得できるよう、シリアライズできるデータ型である必要があります。この制限はリクエストレベルのアトリビュートには適用されません。リクエストレベルのアトリビュートは、リクエスト処理のライフサイクルが終了すると、永続的に存在しないからです。アトリビュートのスコープリクエストアトリビュートリクエストアトリビュートは、1回のリクエスト処理ライフサイクルの間のみ存続します。リクエストを受信した時点では、リクエストアトリビュートは空です。応答が生成されると破棄されます。リクエストアトリビュートは、リクエストと応答のインターセプターと合わせて使うと便利です。リクエストインターセプターを使って追加のデータとヘルパーメソッドをリクエストアトリビュートに挿入して、リクエストハンドラーが取得できるようにできます。セッションアトリビュートセッションアトリビュートは、現在のスキルセッションが継続している間存続します。セッションアトリビュートは、すべてのセッション内リクエストで使用できます。リクエスト処理のライフサイクル中に設定されたすべてのアトリビュートはAlexaサービスに返され、同じセッションの次のリクエストで提供されます。セッションアトリビュートで、外部ストレージソリューションを使用する必要はありません。セッションアトリビュートはセッション外のリクエストの処理では使用できません。スキルセッションがクローズされると破棄されます。セッションアトリビュートは、Alexaのask_sdk_model.request_envelope.RequestEnvelopeおよびask_sdk_model.response_envelope.ResponseEnvelopeオブジェクトのsessionプロパティに保存されるため、シリアル化可能な型のみをそれらの下に保存できます。ask_sdk_core.serialize.DefaultSerializerは値をシリアル化/逆シリアル化するために使用されます。永続アトリビュート永続アトリビュートは、現在のセッションのライフサイクルが終了しても存続します。主要なスコープ(ユーザーID、デバイスID)、TTL、ストレージレイヤーを含む、これらのアトリビュートがどのように保存されるかはスキルのコンフィギュレーションによって異なります。永続アトリビュートは、PersistenceAdapterを使用してスキルのインスタンスを設定する場合にのみ使用できます。PersistenceAdapterが設定されていない場合に、AttributesManagerを呼び出して永続アトリビュートの取得と保存を行おうとするとエラーが発生します。AttributesManagerAttributesManagerには、ハンドラーで取得や更新を行えるアトリビュートがあります。Inputオブジェクトからハンドラーで使用できます。AttributesManagerは、スキルで必要なアトリビュートと直接やり取りできるように、アトリビュートの取得と保存を行います。....以下は、永続アトリビュートの取得と保存を行う方法のサンプルです。スキルのパフォーマンスを高めるため、AttributesManagerは永続アトリビュートをローカルにキャッシュします。setPersistentAttributes()は、ローカルにキャッシュされた永続アトリビュートのみを更新します。永続アトリビュートを永続レイヤーに保存するには、savePersistentAttributes()を呼び出す必要があります。デフォルトのDynamoDbPersistenceAdapter実装のdelete_attributesは、ローカルキャッシュおよび永続レイヤー(DynamoDBテーブル)から永続アトリビュートを削除します。PersistenceAdapterAbstractPersistenceAdapterは、永続レイヤー(データベースやローカルファイルシステムなど)でアトリビュートを保存したり取得したりする場合にAttributesManagerが使用します。SDKを使用して、AbstractPersistenceAdapterインターフェースに準拠する任意のカスタマイズ済みPersistenceAdapterを登録できます。AbstractPersistenceAdapterの実装はすべて、以下のインターフェースに従う必要があります。DynamoDBを使用してAbstractPersistenceAdapterを実装します。使用するDynamoDBテーブルの名前です。パーティションキー列の名前です。指定されない場合、デフォルトの"id"になります。アトリビュート列の名前です。指定されない場合、デフォルトのattributesになります。Trueに設定すると、テーブルが存在しない場合にDynamoDbAdapterが自動で作成します。指定されない場合、デフォルトのFalseになります。RequestEnvelopeを使ってパーティションキーを生成するときに使用される関数です。user_idを使用してパーティションキーを生成します。DynamoDBテーブルのクエリーに使用するDynamoDBClientです。ここにカスタムコンフィギュレーションを使ったDynamoDBClientを挿入できます。デフォルトではboto3.resource("dynamodb")を使用します。詳細については、DynamoDB永続アダプターを参照してください。S3を使用してAbstractPersistenceAdapterを実装します。使用するS3バケットの名前です。オブジェクトのS3パスプレフィックスです。指定されない場合、デフォルトの接頭辞なしになります。