Lambda概述 (VSK Echo Show)
Lambda函数用作视频技能的后端。您可以在本地更新参考Lambda代码,使用CLI工具更新、重建、重新部署项目,并自动将您的Lambda推送到AWS。
工作方式
所有Lambda脚本都存储在本地项目中,位于您的./lambda/src文件夹下。当您使用CLI工具部署视频技能时,它们会被推送到云端。如果您成功部署视频技能,您将能够在AWS控制台中以单个文件的形式找到整个Lambda函数。在那里,您可以搜索自己的Lambda:

单击您的函数名称 (<您的项目>-lambda)。您的Lambda函数位于index.js文件中。

通过使用CLI工具,您只需要专注于更新存储在本地的特定脚本(例如,您可以更新视频内容database.js脚本),更新、重新部署Lambda组件,以及将更新后的Lambda推送到云端。
Lambda函数可以用JSON形式接收来自Alexa的指令,对其进行处理,然后返回包含预期的JSON的响应。指令是JSON消息,包含有关执行特定操作(例如获取视频的元数据)的指示。当前,有一个JSON对象用作嵌入在参考Lambda代码中的视频内容数据库。
要配置Lambda函数以与您拥有的另一个现有数据库进行交互,请修改数据库访问类以查询该数据库,并以与参考代码相同的结构方式返回数据。Lambda代码的其余部分可以保持不变,因为它会动态响应数据库访问层返回的内容。
默认情况下,参考Lambda使用Gracenote目录(命名为“ontv”)。如果您拥有已被Alexa引入的目录并想改用该目录,请参阅使用自己的目录名称。
功能
参考Lambda支持以下主要功能:
| 功能 | 用户 | 示例 |
|---|---|---|
| 搜索 | 视频ID |
搜索Stranger Things 搜索Psych第1季 搜索Black Panther |
| 搜索 | 演员姓名 |
搜索Liam Neeson出演的电影 搜索Jamie Foxx出演的电影 |
| 搜索 | Genre |
搜索喜剧电影 搜索动作电影 搜索冒险电影 |
| 搜索 | 多个视频元数据字段,例如Actor + Genre(演员+流派) |
搜索Liam Neeson出演的动作片 搜索Jennifer Aniston出演的喜剧电视连续剧 请注意,在搜索结果页面上,您也可以这样说: 选择第二个 播放编号1 |
| 快速播放 | 视频名称 |
观看Stranger Things 观看Psych第1季第1集 观看Black Panther |
| 快速播放 | 演员姓名 |
观看Liam Neeson出演的电影 观看Jamie Foxx出演的电影 |
| 快速播放 | Genre |
观看喜剧电影 观看动作电影 观看冒险电影 |
| 快速播放 | 多个视频元数据字段,例如Actor + Genre |
观看Liam Neeson出演的动作电影 观看Jennifer Aniston演出的喜剧电视连续剧 |
| 频道导航 | 调至PBS 调至NBC |
|
| 浏览和列表选择 | 浏览列出的不同类别 通过说出以下表述,浏览More Categories(更多类别)下的其他类别: 选择Highly Rated(高评分) 选择More Categories(更多类别) |
请注意,传输控制由参考软件中包含的网页播放器指定。
Lambda安装和更新
您的Lambda需要托管在AWS上,在安装过程中由CLI工具处理。还需要在技能清单中配置它,这可能是您希望在开发者门户中做的事情。但是,通常,项目中包含的基础架构CLI工具会自动为您进行此设置。
通过使用--deploy,基础架构CLI工具创建和部署Lambda函数。这发生在参考视频技能设置过程中。
使用--update --lambda在开发周期中更新和部署Lambda代码。这大大加快了开发过程。
有关手动安装Lambda的过程,请参阅手动设置Lambda(可选)。
必须在视频技能的清单中配置Lambda。项目中包含的基础架构CLI工具可为您处理此问题。但是,如果您选择手动配置,则必须访问Alexa开发者控制台并按照手动设置Lambda(可选)下的步骤进行操作。
手动设置Lambda(可选)
如果您想手动安装Lambda(而不是通过CLI工具),则必须遵循不同的流程:
- 导航到您的项目在本地的
./lambda文件夹。 - 运行
npm run release。 - 按照此处提到的步骤,在您想要部署视频技能的同一区域创建AWS Lambda函数。
- 从
./lambda/dist/lambda中将编译的Lambda代码复制到步骤3中创建的AWS Lambda函数。 -
在步骤3中创建的Lambda执行角色中,添加以下策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": ["*"] } ] } -
为您的Lambda创建DynamoDB数据库,以使用以下规范存储分页数据:
"PaginationDatabase": { "Type" : "AWS::DynamoDB::Table", "Description": "保留分页数据", "Properties" : { "TableName" : { "Fn::Sub": [ "${ProjectName}-pagination-table", { "ProjectName": { "Ref": "ProjectName" } } ] }, "AttributeDefinitions" : [ { "AttributeName" : "token", "AttributeType" : "S" } ], "KeySchema" : [ { "AttributeName" : "token", "KeyType" : "HASH" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : "5", "WriteCapacityUnits" : "5" } } }
后续步骤
请参阅Lambda自定义。
Last updated: 2020年10月29日

