步骤6: 创建和部署Lambda程序包 (VSK Fire TV)
现在您已经上传了Fire TV应用,您需要创建一个Lambda函数,该函数具有将从Alexa收到的指令传递到您的应用的功能。下面提供了一个Lambda函数示例,该函数为实现视频技能提供了起点。此示例Lambda将响应Alexa的指令,并通过ADM与您的Fire TV应用通信。
- 关于 Lambda
- 下载示例Lambda函数
- 在Lambda函数中更新客户端ID和客户端密钥
- 创建Lambda部署程序包
- 为您的Lambda创建IAM角色
- 在AWS中为您的视频技能创建Lambda函数
- 有关Lambda的更多信息
- 后续步骤
关于 Lambda
在此步骤中,您将开始使用Lambda。此处的文档包括用于将VSK与Fire TV应用集成的示例Lambda代码,包括对Discovery、SearchAndPlay、FastForward、ChangeChannel和其他指令类型的响应。您将使用这个index.js
代码作为起点,但之后可以添加自己的逻辑。
您需要使用客户端密钥和客户端ID更新此Lambda函数。您将使用Node JS应用将函数生成为Lambda部署程序包(生成为zip文件),然后将其上传到AWS Lambda中。稍后,您将使用处理传入指令所需的逻辑自定义此函数,并将它们传递到您的应用以进行处理。
当您自定义Lambda函数的逻辑时,在一定程度上熟悉Node.js会有所帮助,尽管现阶段不需要该领域的专业知识(您也可以使用多种其他语言编写Lambda代码)。对于此示例Lambda,您只需要使用Node.js版本10或更高版本即可。有关在Lambda函数中处理预期Alexa指令的更多信息,请参阅解释指令并对指令做出反应。
下载示例Lambda函数
示例Fire TV Lambda函数包含在Lambda文件夹中的sample-fire-tv-app-video-skill GitHub存储库中。您在步骤2使用VSK下载示例Fire TV应用中下载示例应用时下载此文件夹。
此Lambda文件夹包含一个示例Lambda文件index.js
,以及一个package.json
文件,用于下载将Lambda代码生成为部署程序包所需的Node模块。此文件夹还包含video_catalog.json
,其为视频内容提供数据源示例。
在Lambda函数中更新客户端ID和客户端密钥
首先,您需要更新示例Lambda代码中的客户端ID和密钥:
- 确保您已经安装了Node和NPM版本10或更高版本。您可以通过键入
node -v
来检查Node。您可以通过键入npm -v
来检查npm。如果您尚未安装它们,可下载并安装Node JS。(您的Node JS安装将包含npm,因此您无需将npm与Node JS分开安装。) - 在文本编辑器中,浏览到
Lambda
文件夹并打开index.js
。 -
输入您在对应用签名并配置安全配置文件中检索到的
CLIENT_ID
和CLIENT_SECRET
的值:第32-33行:
const CLIENT_ID = '<输入客户端ID>'; const CLIENT_SECRET = '<输入客户端密钥>';
-
打开终端窗口或命令提示符,并浏览到包含
Lambda
应用的目录。例如:cd /Users/<用户名>/sample-fire-tv-app-video-skill/Lambda
-
运行以下命令:
npm install
这将创建一个名为
node_modules
的文件夹,并将所有依赖程序包添加到其中。它还添加了package-lock.json
。您会看到一条成功消息,如下所示:added 69 packages from 127 contributors and audited 89 packages in 5.483s(添加了来自127个贡献者的69个程序包,并在5.483s内审核了89个程序包) found 0 vulnerabilities(已发现0个漏洞)
创建Lambda部署程序包
自定义Lambda并安装Node模块后,就可以生成Lambda部署程序包了:
- 使用您的
index.js
Lambda代码浏览到目录。 -
运行以下命令创建Lambda部署程序包:
zip -r firetv-lambda.zip .
这将创建一个将所有Lambda代码打包在一起的zip文件。(在Windows上,您也可以在Windows资源管理器中右键单击该文件夹,然后选择发送到 -> 压缩 (Zipped) 文件夹。)
现在,您将在此目录中看到一个名为
firetv-lambda.zip
的程序包。您将在下一部分(创建IAM角色之后)中将此程序包上传到AWS Lambda。
为您的Lambda创建IAM角色
您需要定义权限以指定哪些应用可以引用您的Lambda函数。在这里,您将创建一个IAM角色,允许Lambda函数代表您调用AWS服务,例如Cloudwatch。要创建IAM角色,请执行以下操作:
- 登录AWS管理控制台。(无需像以前一样使用相同的亚马逊开发者账户。)
- 单击顶部导航栏中的Services(服务),搜索IAM,然后在结果中单击IAM。
- 从左侧导航栏中选择Roles(角色),然后单击Create role(创建角色)按钮。
- 在AWS service(AWS服务)矩形(默认处于选中状态)下,单击Lambda,然后单击底部的Next: Permissions(下一步:权限)按钮。
- 搜索AWSLambdaBasicExecutionRole并选中其旁边的复选框。然后单击Next: Tags(下一步:标记)按钮。
- 跳过Add tags (optional)(添加标记 [可选])配置,然后单击Next: Review(下一步:审核)按钮。
-
任意为角色命名(例如,“video_skill_streamz”)并提供描述,然后单击Create role(创建角色)按钮。
记下您的IAM角色名称(特别是如果您在AWS中有多个IAM角色),这样您就可以轻松记住它以备下一步使用。
在AWS中为您的视频技能创建Lambda函数
现在,您将在AWS中创建Lambda函数以供您的视频技能使用。要为您的视频技能创建Lambda函数,请执行以下操作:
- 登录AWS管理控制台。
- 单击Services(服务),然后转到Lambda(使用搜索框)。
-
在右上角,根据下表选择相应的AWS地区: (与IAM不同,Lambda函数特定于AWS地区。)
区域设置 客户地区 AWS地区 en-US、en-CA、fr-CA、pt-BR、es-MX 北美洲 美国东部(北弗吉尼亚) en-GB、fr-FR、de-DE、it-IT、es-ES、en-IN、hi-IN 欧洲 欧盟(爱尔兰) ja-JP、en-AU 远东(FE) 美国西部(俄勒冈) (在区域设置缩写中,小写字母表示语言;大写字母表示地区。例如,“fr-CA”是指讲法语的加拿大,而“en-CA”是指讲英语的加拿大。)
选择离您的客户较近的地区将确保将客户表述与Lambda引用之间的延迟降至最低。此外,如果您选择了错误的AWS地区,视频技能将不起作用。
注意: 对于其中一些区域设置,Alexa对视频技能的支持即将推出,但仍在准备中。有关详细信息,请参阅支持的国家/地区。 - 单击Create function(创建函数)按钮。
- 保持Author from scratch(从头开始创建)矩形按原样选中,然后完成以下各部分:
- 函数名称: 您的Lambda函数的唯一名称(例如,
firetv_app_lambda
)。 - Runtime(运行时): Node.js 10.x(示例Lambda代码是用Node.js编写的。稍后,您可以探索在Lambda中使用其他语言,例如Python、Ruby、.NET、Java等。)
- Permissions(权限)。单击Choose or create an execution role(选择或创建执行角色)展开此部分。然后完成以下操作:
- Execution role(执行角色): 使用现有角色。
- Existing role(现有角色): 选择您在上一部分中创建的IAM角色(为您的Lambda创建IAM角色)。
提示: 记下您的Lambda名称,因为您需要在接下来的步骤中参考此名称。
- 函数名称: 您的Lambda函数的唯一名称(例如,
-
单击Create function(创建函数)按钮。
您的Lambda函数已创建。请注意,除非您添加智能家居触发器,告知Lambda应该从哪里获取消息,否则您的Lambda函数不会接收来自Alexa的指令。(这就是智能家居API的作用 - 它将您的设备 [例如Echo Dot] 连接到云中的Lambda计算。)
- 单击+ Add trigger(+添加触发器)按钮。
-
在触发器配置中,选择Alexa Smart Home(Alexa智能家居),然后将您的视频技能ID(在步骤1: 创建您的视频技能以及设置设备中创建)输入Application ID(应用ID)字段。然后单击Add(添加)按钮。
单击Add(添加)后,您会在顶部看到一条成功通知,内容为:“The trigger 123456789… was successfully added to function [Lambda function name].The function is now receiving events from the trigger.”(触发器123456789...已成功添加到函数 [Lambda函数名称] 中。该函数现在正在接收来自触发器的事件。) 在这种情况下,Lambda函数的触发器是您的视频技能。您的视频技能将引用此Lambda函数。
注意: 如果您对Lambda函数使用“版本控制”,则每次创建新版本时都需要重新添加智能家居触发器。 -
您的Lambda函数的ARN显示在页面的右上角,如以下屏幕截图所示。复制您Lambda的ARN并记下它。在接下来的步骤中更新视频技能时,您将需要此信息。
- 在页面中心单击您的Lambda函数的名称(带有的方框)。这将在下方窗格中展开Function Code(函数代码)部分。
- 在Function Code部分,单击Code entry type(代码输入类型)菜单,然后选择Upload a .zip file(上传.zip文件)。
- 单击Upload(上传),然后选择您已通过Node创建的
firetv-lambda.zip
压缩文件(创建Lambda程序包)。 - 单击保存。将在您单击Save(保存)后上传压缩文件。
有关Lambda的更多信息
请记住,Alexa会侦听客户的措词(例如“Play Interstellar”(播放Interstellar)),并将请求打包为指令(JSON对象)。Lambda函数将接收Alexa发出的指令并采取一些操作。您的Lambda通过识别指令消息头部中的命名空间和名称值来确定请求类型。例如,命名空间指定请求是Discover
还是ChangeChannel
指令。根据这个命名空间,会调用handleDiscovery
或handleChannelControl
函数。
示例Lambda提供指令的基本处理。自定义Lambda代码时,您需要处理用户对您的技能提出的每种类型的请求,并通过Amazon Device Messaging (ADM) 在您的应用中提供正确的响应。在本教程的后面部分,您将测试自己的视频技能以了解其处理各种指令的方式。
后续步骤
继续执行下一步: 步骤7: 更新Fire TV技能部分
(如果遇到任何问题而无法继续,请参阅云端集成故障排除。)
Last updated: 2021年10月13日