リストスキルの作成と管理: FAQ



リストスキルの作成と管理:FAQ

このよくある質問のリストでは、リストスキルの作成と管理のさまざまな側面について説明します。

質問: スキルでは、アカウントリンクとこれらのリスト管理機能の両方を使用できますか?

はい。この機能を使うと、スキルの開発者はユーザーのAlexaリストを外部アプリで参照できます。アカウントリンクの設定については、アカウントリンクとはを参照してください。

質問: Alexaのユーザーは、2つ以上のスキルに対してAlexaのやることリストと買い物リストへのアクセスを許可できますか?

はい。

質問: ユーザーは自分のAlexaリストを削除できますか?

ユーザーはデフォルトのAlexaリストを削除できませんが、Alexaリストにあるすべてのアイテムを削除できます。ユーザーはカスタムリストを削除できますが、その場合は最初にすべてのアイテムを削除する必要があります。

質問: ユーザーは、Alexaリストへのアクセスをリスト1個に限って許可できますか?

いいえ、ユーザーはスキルに共有するリストを制限することはできません。ただし、スキルは関係するリストのみにアクセスすることを選択できます。

質問: これらのリスト管理機能は、カスタムリストのメタデータをサポートしていますか?

いいえ。

質問: Alexaユーザーは、自分のリストをAmazonの他のユーザーと共有できますか?

はい、他のユーザーが同じAmazon家族アカウントの一員である場合は可能です。Amazon家族アカウントについては、Alexaデバイスの家族プロフィールをご覧ください。

質問:スキル管理API(SMAPI)を使用して作成されたリストスキルを開発者コンソールで表示するには、どうすればよいですか?

リストスキルは、SMAPIを使用して作成する必要があり、SMAPIでのみ表示および編集が可能です。開発者コンソールでリストスキルを表示および編集することはできません。

質問:ユーザーのアクションによってイベントが生成されるのはいつですか?

ユーザーがリストスキルを有効にすると、ユーザーがリストのアイテムを追加、変更、または削除したときにリストイベントが生成されます。スキルイベントは、ユーザーがスキルを有効または無効にしたとき、サードパーティアカウントとスキルのリンクまたはリンク解除を行ったとき、スキルに権限を付与したとき、スキルに付与した権限を変更したときに生成されます。

質問:alexa_user_idlist_idlist_item_idなどのIDは、ユーザーがスキルイベントを生成した後も存続しますか?

alexa_user_idの値は、ユーザーがスキルを無効にしてから再度有効にすると、そのたびに変更されます。アカウントのリンクまたはリンク解除によってalexa_user_idの値が変更されることはありません。list_idおよびlist_item_idの値は、スキルが無効になってから再度有効になったときでも変更されません。

質問:開発者はやることリストと買い物リストのローカライズをどのように処理すべきですか?

デフォルトリスト(やることリストと買い物リスト)のlist_idの値は、以下の形式を持つbase-64エンコード文字列です。

  • <Internal_identifier>-TASK(やることリスト)
  • <Internal_identifier>-SHOPPING_LIST(買い物リスト)

開発者は、list_idの値をbase64でデコードし、末尾の指定された文字列を検索できます。この文字列は不変であり、ローカライズに依存しません。

質問:ユーザーはリストの読み取り権限と書き込み権限のいずれか1つだけを付与できますか?

ユーザーは、リストの読み取り権限と書き込み権限のいずれかまたは両方を付与できます。

質問:リストAPIはべき等ですか? 削除したアイテムを再度削除できますか?

アイテムを削除すると、そのアイテムはシステムに存在しなくなるため、そのアイテムを削除する後続の呼び出しでは「Object not found」例外がスローされます。同様に、アイテムを作成する呼び出しを複数回行った場合、個々の呼び出しがまったく同じでも、複数のアイテムが作成されます。

質問:イベント呼び出しにはどのようなタイムアウトが適用されますか? 特に最初のリンクでは、最初の「同期」が非常に大規模で遅くなる可能性があります。

AWS Lambdaスキルサービスのタイムアウト時間は、デフォルトで30秒です。この値は、スキルサービスの設定で変更できます。HTTPSエンドポイントのタイムアウトは10秒です。

質問:サーバーはどのようなロジックでリストイベントとスキルイベントを再試行しますか?

システム再試行の間隔は指数関数的に増加します。最初の間隔は30秒で、エンドポイントがメッセージを受信できなかったときに2倍になります。再試行が行われる期間は最大で1時間です。再試行の間隔は最大で30分です。スキルメッセージAPIによって送信されるメッセージの場合、再試行の最大期間はexpiresAfterSecondsフィールドを使用して設定され、最大24時間(86,400秒)まで設定できます。

質問:リストAPIの呼び出しとリストイベントでは、日付と時刻の形式が異なりますか?

リストイベントでは、ISO8061形式の日付と時刻が使用されます。リストAPIは、 「Sat Jul 22 10:41:04 UTC 2017」という形式で日付と時刻を返します。

質問:ユーザーはリージョンを変更できますか?その場合、リストAPIを呼び出すために異なるAPIエンドポイントが必要ですか?

はい、ユーザーはリージョンを変更できますが、同じエンドポイントを使用してリストAPIを呼び出すことができます。システム内部では、ユーザーが優先するマーケットプレイスに従ってリクエストがルーティングされます。ユーザーが優先するマーケットプレイスを変更した場合、スキルによって制御されるデータは自動的には移行されません。

質問:リストアイテムの移動はリストアイテム削除イベントとリストアイテム作成イベントで表されますか? item_idは維持されますか?

ユーザーがAlexaアプリを使用してリスト間でアイテムを移動すると、この操作に対して2つのイベントが生成されます。これらのイベントは、移動元リストのItemsDeletedイベントと移動先リストのItemsCreatedイベントです。item_idの値は維持されます。

質問:開発者は、イベントが自分のスキルによってトリガーされたかどうかを判別できますか?

次のシナリオについて考えてみましょう。

  • ユーザーがアプリでやることリストを作成します。
  • スキルサービスは、スキルメッセージAPIを使用してスキルにメッセージを送信し、Alexaにリスト項目を作成します。
  • スキルは、スキルメッセージAPIのメッセージと、householdlistおよびリスト項目に対するPOSTを受信します。

POSTへの応答として、スキルサービスはalexa_item_idをローカルに記録します。リスト項目が作成された時点で、ItemsCreateイベントも発生します。Alexaは、リストAPIの呼び出しによってリストアイテムが作成された場合でもイベントをトリガーします。スキル開発者は、CreateListItemから返されたitem_idの値を使用してアイテムを一意に識別できます。

質問:リストAPIを呼び出してセッション外の同意トークンを取得する呼び出しの例は、どのようなものですか?

スキルメッセージAPIのセッション外トークンを取得するには、次のようにします。

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
client_id=amzn1.application-oa2-client.e8621d747d6742d4a7aff2bbc614fc0d&client_secret=9ef36f40378fa1a7XXXXXXXXXXX12acd650030b07bb0fcc7e467&grant_type=client_credentials&scope=alexa%3Askill_messaging

応答は次のとおりです。

{
    "access_token": "Atc|XXXXXXXXXXXXXXXXXUSyLA",
    "scope": "alexa:skill_messaging",
    "token_type": "bearer",
    "expires_in": 3600
}

スキルメッセージAPIにメッセージを投稿するには、次のようにします。

POST /v1/skillmessages/users/amzn1.ask.account.XXXXXXXXXXXXXX HTTP/1.1
Host: api.amazonalexa.com
Authorization: Bearer Atc|XXXXXXXXXX
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 98b62082-ff25-a7de-f33b-95d9424beb22
{"data":{"notificationTitle":"NewMessagefromBackend","spokenOutput":"バックエンドから送信されたメッセージです。"},"expiresAfterSeconds":60}
Response: 202 Accepted

質問:クライアントIDはスキルに固有のものですか?

ClientIdClientSecretはスキルに固有のものであり、ClientIdの値とスキルは1対1で対応します。同様に、実際のユーザーとスキルのalexa_user_idも1対1で対応します。複数のAlexaスキルを有効にしたユーザーは、スキルごとに異なる一意のalexa_user_idを持っています。

たとえば、ユーザーが2つのスキル ABCSkillXYSSkillを持っており、クライアントIDがそれぞれClientId_ABCClientId_XYSだとします。

ユーザーがABCSkillとXYSSkillを有効にすると、各スキルは別個のalexa_user_idを持ちます。たとえば、ABCSkillAlexaUserId_ABCXYZSkillAlexaUserId_XYSを持ち、これらは同じではありません。

ClientId_ABC、ClientSecret_ABC、AlexaUserId_ABCの組み合わせを使用してスキルメッセージAPIを呼び出すと、正しい応答が返されます。ClientId_XYZClientSecret_XYZAlexaUserId_XYZの組み合わせにも同じことが言えます。

質問:スキルサービスはスキルエンドポイントで受信したイベントが本物であることをどのようにして確認しますか?

Alexa Skills Kitのセキュリティテストを参照してください。アクセストークンだけに頼って受信したリクエストの検証を行わないでください。すべてのサードパーティスキルは、リクエストの署名を検証して、リクエストがAlexaから送信されたことを確認する必要があります。確認できない場合、認定に合格できず、スキルを公開できません。