項目選択のためのAPLサポート



項目選択のためのAPLサポート

APLスキルの画面では、ユーザーは特定の項目をさまざまな方法で選択しようとします。

たとえば、ユーザーが「2番目を選んで」と言ったとします。この動作をサポートするには、対話モデルのAMAZON.SelectIntentを、APLドキュメントのSequenceコンポーネントと組み合わせて使用します。

ユーザーは「これを選んで」または「それを選んで」と言います。Anaphorスロットに入力がある場合、AMAZON.SelectIntentは照応に応じた選択肢を提供します。

序数に応じて選択する

APL Sequenceコンポーネントが、対話モデルにAMAZON.SelectIntentがあるスキルで使用されている場合、ユ―ザーが「3番目を選んで」と言うと、スキルにAMAZON.SelectIntentリクエストが送られます。この場合AMAZON.SelectIntentは、ListPositionスロットの(3)の序数に加えて、画面上に3番目の項目が表示されていれば、Sequenceコンポーネントの3番目の位置にあるリスト項目のAPLコンポーネントIDも提供します。つまり、選択の動作はさまざまなサイズのデバイスに応じて異なります。

序数に応じた選択に関連するAMAZON.SelectIntentのプロパティは、次のとおりです。

プロパティ 説明
ListPosition オブジェクト
(スロット)
ユーザーが序数によって項目を選択するときにAMAZON.SelectIntentに入力されるスロットです。
ListPosition.value 文字列 ユーザーが言及している位置です。たとえば、「2番目を選んで」という発話の場合、ListPosition.valueには「2」という値が含まれます。
ListPosition.resolutions.resolutionsPerAuthority コレクション ListPositionスロットの値として利用可能な解決一式です。APLでは、対象となるのは権限がamz1.er-authority.visual-contextに設定されている項目だけです。詳細については、resolutionsPerAuthority objectを参照してください。

照応に応じて選択する

ビルトインのAMAZON.SelectIntentでは、照応に応じた選択もできます。ユーザーが「これを選んで」または「それを選んで」と言うと、スキルはAnaphorスロットに入力されたAMAZON.SelectIntentを受け取ります。AMAZON.SelectIntentが呼び出されたときにAPLドキュメントが画面上に表示されている場合、Anaphorスロットの下にあるresolutions.resolutionsPerAuthorityコレクションには、現在のドキュメントにある、上位レベルのAPLコンポーネントのIDが含まれます。この上位レベルのコンポーネントは、視覚化された階層のルートにあるコンポーネントです。これは、項目の詳細表示を見ているユーザーが、その表示内容に基づいて項目を選択する場合に便利です。

AMAZON.SelectIntentに関連するプロパティは、次のとおりです。

プロパティ 説明
Anaphor オブジェクト
(スロット)
これは、ユーザーが照応によって項目を選択しようとするときにAMAZON.SelectIntentに入力されるスロットです。
Anaphor.value 文字列 「これ」や「それ」など、ユーザーが照応に使用する値です。
ListPosition.resolutions.resolutionsPerAuthority コレクション Anaphorスロットの値として利用可能な解決一式です。この用途の対象となるのは、authorityamz1.er-authority.visual-contextに設定されている解決です。

ListPosition.resolutions.resolutionsPerAuthority

序数および照応に応じた選択の両方で、ListPosition.resolutions.resolutionsPerAuthorityコレクションにあり、そのauthorityの値がamz1.er -authority.visual-contextに設定されている項目には、次の関連プロパティが含まれます。

プロパティ 説明
authority 文字列 amz1.er-authority.visual-contextに設定します。
status オブジェクト 解決のステータスを含むオブジェクトです。
status.code 文字列 ListPositionの解決に成功したときに、ER_SUCCESS_MATCHに設定されるステータスコードです。この解決が失敗したときには、ER_SUCCESS_NO_MATCHと設定されます。
values 配列 ListPositionスロットの解決済みの値を表す配列です。
values.value オブジェクト ListPositionスロットの解決された値を表すオブジェクトです。
values.value.id 文字列 ListPosition.valueにより識別される序数の位置にあるAPLコンポーネントのIDです。

ListPositionスロットの解決(序数に応じて選択する場合)

解決されたListPositionスロットが3番の位置にあるAMAZON.SelectIntentの例を次に示します。ER_SUCCESS_MATCHというステータスコードは、IDが正常に解決されたことを表します。

{
    "version": "1.0",
    "session": {
            //セッション 情報	
    },
    "context": {
        "Alexa.Presentation.APL": {
            "token": "anydocument",
            "version": "AriaRenderer-1.0.209.0",
            "componentsVisibleOnScreen": [{
                //APL コンテキスト
            }]
        },
        "System": {
            //システム 情報
        },
        "Viewport": {
            //Viewport 情報
        }
    },
    "request": {
        "type": "IntentRequest",
        "requestId": "[RequestId]",
        "timestamp": "2018-10-22T03:53:47Z",
        "locale": "en-US",
        "intent": {
            "name": "AMAZON.SelectIntent",
            "confirmationStatus": "NONE",
            "slots": {
                "ListPosition": {
                    "name": "ListPosition",
                    "value": "3",
                    "resolutions": {
                        "resolutionsPerAuthority": [{
                            "authority": "amz1.er-authority.visual-context",
                            "status": {
                                "code": "ER_SUCCESS_MATCH"
                            },
                            "values": [{
                                "value": {
                                    "id": "blue"
                                }
                            }]
                        }]
                    },
                    "confirmationStatus": "NONE",
                    "source": "USER"
                },
                "Anaphor": {
                    "name": "Anaphor",
                    "confirmationStatus": "NONE"
                },
                "VisualModeTrigger": {
                    "name": "VisualModeTrigger",
                    "confirmationStatus": "NONE"
                },
                "PositionRelation": {
                    "name": "PositionRelation",
                    "confirmationStatus": "NONE"
                }
            }
        }
    }
}

ListPositionスロットの解決(照応に応じて選択する場合)

AMAZON.SelectIntentで、APLのIDがthisの値に対応するAnaphorスロットで解決された例を示します。

{
    "version": "1.0",
    "session": {
        //セッション 情報
    },
    "context": {
        "Alexa.Presentation.APL": {
            "token": "anydocument",
            "version": "AriaRenderer-1.0.209.0",
            "componentsVisibleOnScreen": [{
                //APL コンテキスト
            }]
        },
        "System": {
            //システム 情報
        },
        "Viewport": {
            //Viewport 情報
        }
    },
    "request": {
        "type": "IntentRequest",
        "requestId": "[RequestId]",
        "timestamp": "2018-10-22T06:14:55Z",
        "locale": "en-US",
        "intent": {
            "name": "AMAZON.SelectIntent",
            "confirmationStatus": "NONE",
            "slots": {
                "ListPosition": {
                    "name": "ListPosition",
                    "confirmationStatus": "NONE"
                },
                "Anaphor": {
                    "name": "Anaphor",
                    "value": "this",
                    "resolutions": {
                        "resolutionsPerAuthority": [{
                            "authority": "amz1.er-authority.visual-context",
                            "status": {
                                "code": "ER_SUCCESS_MATCH"
                            },
                            "values": [{
                                "value": {
                                    "id": "bluecheesedetail"
                                }
                            }]
                        }]
                    },
                    "confirmationStatus": "NONE",
                    "source": "USER"
                },
                "VisualModeTrigger": {
                    "name": "VisualModeTrigger",
                    "confirmationStatus": "NONE"
                },
                "PositionRelation": {
                    "name": "PositionRelation",
                    "confirmationStatus": "NONE"
                }
            }
        }
    }
}