as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
开发
测试
应用发布
盈利
用户参与
设备规格
资源

步骤6: 对传送至Lambda的Alexa指令做出响应 (VSK Echo Show)

步骤6: 对传送至Lambda的Alexa指令做出响应 (VSK Echo Show)

在此步骤中,您需要对Lambda函数进行编码,以相应的响应来响应六个指令中的每一个。有六个主要指令: GetPlayableItemsGetPlayableItemsMetadataGetDisplayableItemsGetDisplayableItemsMetadataGetBrowseNodeItemsGetNextPage。此内容的全面参考可在请求和响应参考中找到。

您的Lambda需要与后端服务进行交互才能检索信息。例如,当Alexa发送指令供您的Lambda处理时,这些指令可能涉及检索有关特定媒体的信息。您需要编写代码以在后端服务中查找媒体,并将该信息以正确的JSON格式返回给Alexa。

探索

通过探索过程,您的技能将能够向Alexa声明其功能。对于具有您技能的所有用户,这些功能可能是静态的,也可能根据用户对您的服务的订阅级别而变化。无论哪种方式,您对该指令的回应都会确定用户可以用您的技能做什么。

GetDisplayableItems指令要求在您的Lambda的响应中返回一系列项目。响应中应当包含您的内容的标识符。创建单独的指令GetDisplayableItemsMetadata(该指令将在下一部分中详细介绍),用于检索元数据以播放内容。GetDisplayableItemsGetDisplayableItemsMetadata指令分为两个请求以优化延迟。

GetDisplayableItems

当用户提出诸如“Alexa, show me <Title of Video Content>”(Alexa,显示<视频内容标题>)之类的搜索请求时,Alexa会向您的Lambda发送GetDisplayableItems指令,如下所示:

{
    "directive": {
        "header": {
            ...
            "name": "GetDisplayableItems",
            "namespace": "Alexa.VideoContentProvider",
            ...
        },
        "endpoint": {
            "scope": {
                "type": "BearerToken",
                "token": "accessToken",

            }
        },
        "payload": {
            "entities": [{
                "type": "Video",
                "value": "视频内容的标题",
                "externalIds": {
                    "yourCatalogKey": "yourContentIdFromCatalog"
                }
            }],
            "locale": "en-US",
            "minResultLimit": 8,
            "maxResultLimit": 25,
            "timeWindow": {
                "end": "2016-09-07T23:59:00+00:00",
                "start": "2016-09-01T00:00:00+00:00"
            }           
        }
    }
}

收到此指令后,您的Lambda应向Alexa提供包含所请求媒体的GetDisplayableItemsResponse响应,如下所示:

{
    "event": {
        "header": {
            ...
            "name": "GetDisplayableItemsResponse",
            "namespace": "Alexa.VideoContentProvider",
            ...
        },
        "payload": {
            "nextToken": "wwrfwef3",
            "mediaItems": [
                {
                    "mediaIdentifier": {
                        "id": "video://content.1234567"
                    }
                },
                {
                    "mediaIdentifier": {
                        "id": "video://content.4567890"
                    }
                }
            ]
        }
    }
}

GetDisplayableItemsMetadata

当Alexa收到您的GetDisplayableItemsResponse响应(其中包含正确的请求内容)时,Alexa会发送另一条名为GetDisplayableItemsMetadata的指令。GetDisplayableItemsMetadata的目的是获取有关已解析内容(例如图像、标题和其他元数据)的信息,以便填充设备的屏幕。以下示例是一个GetDisplayableItemsMetadata指令:

{
    "directive": {
        "header": {
            ...
            "name": "GetDisplayableItemsMetadata",
            "namespace": "Alexa.VideoContentProvider",
            ...
        },
        "endpoint": {
            "scope": {
                "type": "BearerToken",
                "token": "accessToken",

            }
        },
        "payload": {
            "mediaIdentifiers": [
                {
                    "id": "video://content.1234567"
                },
                {
                    "id": "video://content.4567890"
                }
            ]
        }
    }
}

当您的Lambda收到GetDisplayableItemsMetadata指令时,您应提供GetDisplayableItemsMetadataResponse响应,该响应提供有关所请求项目的元数据。这些元数据通常会填充设备上的搜索结果模板。

{
    "event": {
        "header": {
            ...
            "name": "GetDisplayableItemsMetadataResponse",
            "namespace": "Alexa.VideoContentProvider",
            ...
        },
        "payload": {
            "resultsTitle": "搜索结果",
            "searchResults": [
                {
                    "title": "视频名称",
                    "contentType": "ON_DEMAND",
                    "thumbnailImage": {
                        "small": "https://.../image.jpg",
                        "medium": "https: //.../image.jpg",
                        "large": "https: //.../image.jpg"
                    },
                    /* ... 视频1的其余元数据... */
                },  
                {
                    /* ... 视频2元数据... */
                }
            ]
        }
    }
}

登陆页面

当用户打开您的登录页面(通过说出“Alexa, open ACME video”(Alexa,打开ACME视频)或说出“Video Home”(视频主页),然后选择您的视频技能)时,Alexa会发送两个GetDisplayableItems指令:

  • 第一个GetDisplayableItems指令用于检索登陆页面的类别,方法是将itemType属性设置为CATEGORY并纳入RECOMMENDEDsortType

  • 第二个GetDisplayableItems指令获取登陆页面的精选视频,在该情况下请求改为将itemType设置为VIDEO

在收到您对这两项指令的响应 (GetDisplayableItemsResponse) 后,Alexa会发送一个GetDisplayableItemsMetadata调用,其中包含类别ID和视频ID组合而成的列表。响应包括有关视频和类别的元数据。有关每个itemType的必填字段,请参阅GetDisplayableItemsGetDisplayableItemsMetadata

以下示例是值为CATEGORYitemType的元数据。

{
    "name": "我的播放列表",
    "contentType": "ON_DEMAND",
    "itemType": "CATEGORY",
    "selectionAction": "BROWSE",
    "thumbnailImage": {
        "contentDescription": "我的播放列表图像",
        "sources": [{
            "url": "http://ecx.images-amazon.com/AJhF52zkD7ObETpyTTW.jpg",
            "size": "SMALL",
            "widthPixels": 720,
            "heightPixels": 480
        }]
    },
    "mediaIdentifier": {
        "id": "entity://provider/category/myWatchList"
    }
}

快速播放

快速播放场景(用户发出“Alexa, play the movie [X]”(Alexa,播放电影 [X])之类的请求)使用GetPlayableItemsGetPlayableItemsMetadata指令,它们与GetDisplayableItemsGetDisplayableItemsMetadata指令非常相似。唯一的区别在于,返回的用于播放的元数据与用于搜索的元数据略有不同。有关更多信息,请参阅GetPlayableItemsGetPlayableItemsMetadata

频道导航

频道导航表述提示Alexa也发送GetPlayableItemsGetPlayableItemsMetadata指令。唯一的区别在于,返回的用于频道导航的元数据与用于搜索/播放的元数据略有不同。有关更多信息,请参阅GetPlayableItems

后续步骤

前往步骤7: 实现账户关联