スキルでAPLインターフェースを使用するように設定する
スキルでAlexa Presentation Languageを使用するには、Alexa.Presentation.APLインターフェースのサポートを追加する必要があります。
Alexa.Presentation.APLインターフェースをサポートするようにスキルを設定する
APLのディレクティブとリクエスト(RenderDocument、ExecuteCommands、UserEvent)を使用するには、スキルでAlexa.Presentation.APLインターフェースをサポートする必要があります。このインターフェースを有効にすると、スキルに送信されたリクエストが、APLに対応するデバイスから送られたかどうかを特定できます。
スキルを更新するには、開発者コンソールかASK CLIのいずれかを使用します。
Alexa.Presentation.APLインターフェースが自動的に有効になります。応答ビルダーの詳細については、マルチモーダル応答ビルダーを使用するを参照してください。開発者コンソールでAlexa.Presentation.APLを設定する
- 開発者コンソールを開き、設定するスキルの編集をクリックします。
- ビルド>インターフェースページに移動します。
- Alexa Presentation Languageオプションを有効にします。
- インターフェースを保存をクリックし、モデルをビルドをクリックして、対話モデルを再ビルドします。
- スキルコードで、APLディレクティブを返す前に、ユーザーのデバイスがAPLに対応しているかどうかを特定します。
ASK CLIまたはSMAPIを使用してAlexa.Presentation.APLを設定する
ASK CLIまたはSMAPIを使用して、スキルマニフェストのmanifest.apis.custom.interfaces配列を更新し、ALEXA_PRESENTATION_APLオブジェクトを含めます。このオブジェクトには、次に示すようにsupportedViewports配列も含まれています。
{
"type": "ALEXA_PRESENTATION_APL",
"supportedViewports": [
{
"mode": "HUB",
"shape": "ROUND",
"minWidth": 100,
"maxWidth": 599,
"minHeight": 100,
"maxHeight": 599
},
{
"mode": "HUB",
"shape": "RECTANGLE",
"minHeight": 600,
"maxHeight": 959,
"minWidth": 960,
"maxWidth": 1279
},
{
"mode": "HUB",
"shape": "RECTANGLE",
"minHeight": 600,
"maxHeight": 1279,
"minWidth": 1280,
"maxWidth": 1920
},
{
"mode": "TV",
"shape": "RECTANGLE",
"minHeight": 540,
"maxHeight": 540,
"minWidth": 960,
"maxWidth": 960
}
]
}
サポートされているViewportの詳細については、スキルがサポートするViewportプロファイルの選択を参照してください。
- 次のコマンドを実行して、スキルコンポーネントをダウンロードします。
ask api get-skill -s amzn1.ask.skill.<スキルID>get-skillサブコマンドを参照してください。
-
スキルマニフェスト(
skill.jsonとしてダウンロード)を編集し、上記のALEXA_PRESENTATION_APLオブジェクトをmanifest.apis.custom.interfaces配列に追加します。 - 次のコマンドを実行して、変更したスキルマニフェストをデプロイします。
ask api update-skill -s amzn1.ask.skill.<スキルID> -f skill.jsonupdate-skillサブコマンドを参照してください。
-
更新が正しくデプロイされたことを確認するために、手順1を繰り返してスキルマニフェストをダウンロードします。
skill.jsonファイルをエディターで開き、インターフェースオブジェクトにALEXA_PRESENTATION_APLオブジェクトが含まれていることを確認します。 - スキルコードで、APLディレクティブを返す前に、ユーザーのデバイスがAPLに対応しているかどうかを特定します。
ASK CLIの使用方法の詳細については、クイックスタート:Alexa Skills Kitコマンドラインインターフェースを参照してください。
ユーザーのデバイスがAPLに対応していることを確認する
スキルコードからAPLディレクティブを送信する前に、ユーザーのデバイスが関連するAPLインターフェースに対応していることを確認してください。すべてのリクエストについて、含まれているcontext.System.device.supportedInterfacesオブジェクトをチェックします。確認するインターフェースは次の2つです。
Alexa.Presentation.APL:Echo ShowやFire TVなど、画面付きデバイスであることを示しています。Alexa.Presentation.APLディレクティブを返すことができます。ドキュメントでは、指定されたバージョン(最新バージョンは2024.3)でサポートされているすべてのAPL機能を、画像やその他のメディアを含めて使用できます。Alexa.Presentation.APLT:Echo Dot with clockなど、キャラクターディスプレイ付きデバイスであることを示しています。Alexa.Presentation.APLTディレクティブを返すことができます。ドキュメントでは、デバイスに簡単なテキストコンテンツを表示するためのごく限られたAPL機能を使用できます。
以下にLaunchRequestの例を示します。一方はAlexa.Presentation.APLインターフェースのバージョン2024.3をサポートするデバイスの例で、もう一方はAlexa.Presentation.APLTインターフェースのバージョン1.0をサポートするデバイスの例です。
{
"version": "1.0",
"session": {},
"context": {
"System": {
"device": {
"deviceId": "amzn1.ask.device.1",
"supportedInterfaces": {
"AudioPlayer": {},
"Alexa.Presentation.APL": {
"runtime": {
"maxVersion": "2024.3"
}
}
}
},
"apiEndpoint": "https://api-amazonalexa.amazon.com",
"apiAccessToken": ""
},
"Viewport": {
"experiences": [
{
"canRotate": true,
"canResize": true
},
{
"canRotate": false,
"canResize": false
}
],
"shape": "RECTANGLE",
"pixelWidth": 1024,
"pixelHeight": 600,
"dpi": 160,
"currentPixelWidth": 640,
"currentPixelHeight": 500,
"touch": [
"SINGLE"
],
"keyboard": [
"DIRECTION"
],
"video": {
"codecs": [
"H_264_42",
"H_264_41"
]
}
}
},
"request": {
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.1",
"timestamp": "2019-06-27T15:52:19Z",
"locale": "ja-JP",
"shouldLinkResultBeReturned": false
}
}
{
"version": "1.0",
"session": {},
"context": {
"System": {
"device": {
"deviceId": "amzn1.ask.device.1",
"supportedInterfaces": {
"AudioPlayer": {},
"Alexa.Presentation.APLT": {
"runtime": {
"maxVersion": "1.0"
}
}
}
},
"apiEndpoint": "https://api-amazonalexa.amazon.com",
"apiAccessToken": ""
},
"Viewports": [
{
"id": "main",
"type": "APLT",
"supportedProfiles": [
"FOUR_CHARACTER_CLOCK"
],
"lineLength": 4,
"lineCount": 1,
"format": "SEVEN_SEGMENT",
"interSegments": [
{
"x": 2,
"y": 0,
"characters": "':."
}
]
}
]
},
"request": {
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.1",
"timestamp": "2019-06-27T15:52:19Z",
"locale": "ja-JP",
"shouldLinkResultBeReturned": false
}
}
簡潔にするために、リクエストプロパティの一部は省略されています。スキーマ全体については、リクエスト本文の構文を参照してください。
ASK SDKの使用時にこのチェックを行う方法を示すコードサンプルについては、スキルコードにAPLサポートを追加するを参照してください。
コードでAPLのディレクティブとリクエストを使用する
スキルコードでは、Alexa.Presentation.APLとAlexa.Presentation.APLTのディレクティブとリクエストを使用します。
表示するコンテンツをデバイスに送信するには、RenderDocumentディレクティブを使用します。
Alexa.Presentation.APL.RenderDocument:コンテンツを画面付きデバイスに表示します。Alexa.Presentation.APLT.RenderDocument:コンテンツをキャラクターディスプレイ付きデバイスに表示します。
ドキュメント関連のコマンドをデバイスに送信するには、ExecuteCommandsディレクティブを使用します。
デバイスから送信されたユーザーイベント(ボタンの押下など)を処理するには、UserEventリクエストを使用します。UserEventは画面付きデバイスに使用できますが、キャラクターディスプレイ付きデバイスには使用できません。
スキルフロー全体でAPLがどのように使用されるかの概要については、APLとスキルフローを参照してください。
ASK SDKでAPLのディレクティブとリクエストを使用する方法を示すコードサンプルについては、スキルコードにAPLサポートを追加するを参照してください。
APLを使用してキャラクターディスプレイにコンテンツを表示する方法の詳細については、Alexa Presentation Languageとキャラクターディスプレイの概要を参照してください。
APLディレクティブをDisplayインターフェースと組み合わせないでください。
リソースのCross-Origin Resource Sharing(CORS)を設定する
HTTPSエンドポイントでホストされている外部リソース(画像など)をスキルで参照する場合は、エンドポイントが次の要件を満たしていることを確認してください。
- エンドポイントが、Amazon認定の認証局によって署名されたSSL証明書を提供していること。これは多くのコンテンツホスティングサービスが提供しています。たとえば、Amazon Simple Storage Service(Amazon S3)(アマゾンウェブサービスの1つ)などのサービスでファイルをホストできます。
- エンドポイントが、画像のCross-Origin Resource Sharing(CORS)を許可していること。
CORSを有効にするには、リソースサーバーで、応答にAccess-Control-Allow-Originヘッダーを設定する必要があります。リソースをAlexaのみに制限するには、取得元として*.amazon.comのみをホワイトリストに登録します。
リソースがAmazon S3バケット内にある場合は、以下のCORS設定(JSON表示)を使用してバケットを設定できます。
[
{
"AllowedHeaders": [],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
S3およびCORSの詳細については、Cross−Origin Resource Sharing(CORS)の使用を参照してください。
最終更新日: 2025 年 11 月 19 日