as

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

Lambda自定义 (VSK Echo Show)

Lambda自定义 (VSK Echo Show)

本指南重点介绍可帮助您识别和更新Lambda中最重要可自定义部分的任务。

使用您的目录名称

更新目录名称可以在创建技能之前进行,也可以在初始部署之后进行。

创建视频技能之前

按照以下步骤使用您自己的目录而不是ontv

  1. ./lambda/src/utils/constants.js中将CATALOG_NAME更改为您自己的目录名称。例如:

    export const Constants = {
      ...
      // 将此替换为您自己的目录名称以使用您自己的目录。
      CATALOG_NAME: 'mycatalog',
      ...
    }
    
  2. 通过编辑./infrastructure/video-skill/skill.json文件,更改技能清单中的目录名称。具体而言,更新sourceId值。例如:
        "catalogInformation": [
          {
            "type": "INGESTED_CONTENT_IDENTIFIER",
            "sourceId": "mycatalog"
          }
        ]
    
  3. 继续进行从安装、构建和部署参考视频技能: 步骤3开始的部署流程。

创建视频技能之后

如果您的技能已经存在,则必须执行以下操作:

  1. 打开Alexa开发者控制台(使用此特定链接查看您的现有技能)。
  2. 在您的技能上单击Edit(编辑)。
  3. 使用您的目录名称更新Country Specific Configuration(特定于国家/地区的配置)
  4. 单击保存。​
  5. 在计算机上运行--update --lambda CLI命令。

使用您的目录内容

./lambda/src/database/database.js中的videoDatabase替换为您自己的视频数据库。

Lambda将内存中数据库存储在./lambda/src/database/database.js中。其目的是维护和推送您的所有视频作品和S3视频路径。最初,每个视频路径都指向“Big Buck Bunny”示例视频,但“Iron Man 2”除外,它映射到一个名为“Elephants Dream”的视频。

典型的视频对象如下所示:

{
  id: 'MV009844570000',
  name: 'The Commuter',
  contentType: 'ON_DEMAND',
  videoUrl: 'big-buck-bunny/Bug.Buck.Bunny.mp4',
  actors: ['Liam Neeson', 'Vera Farmiga', 'Patrick Wilson'],
  genre: ['Action', 'Highly Rated', 'Recommended Movies'],
  thumbnailImageDescription: 'The Commuter',
  thumbnailImageSources: [
    {
      url: 'big-buck-bunny/Big.Buck.Bunny.thumbnail.png',
      size: 'SMALL',
      widthPixels: 720,
      heightPixels: 480
    }
  ],
  contentDescription: 'movie',
  parentalControl: 'NOT_REQUIRED',
  absoluteViewingPositionMilliseconds: '0',
  itemType: 'VIDEO',
  releaseYear: '2018',
  selectionAction: 'PLAY',
  runTimeInMilliseconds: 635000,
  runTimeDisplayString: '9m',
  closedCaptionStatus: 'AVAILABLE',
  closedCaptionDisplayString: 'CC',
  viewingDisplayString: 'Play Now',
  reviewsTotalReviewCount: '84823',
  reviewsType: 'FIVE_STAR',
  reviewsRatingDisplayString: '6.3',
  ratingCategory: 'G',
  webPlayerContentType: 'VIDEO'
}

此数据库结构遵循Alexa标准(例如,runTimeInMilliseconds是ASK中定义的视频持续时间)。按照此结构中的定义更新您自己的视频内容元数据。

使用您的数据库实现

./lambda/src/access/in-memory-db-access.js中的方法替换为您自己的实现,以访问您自己的数据库并启用搜索。为了正确包含您自己的实现,请更新所有.filter方法,例如:

.filter(item => {
  return this._commonIdentifierMatch(item.name, videoName)
})

在搜索结果中添加新的可显示元数据

如果您想在搜索表述的结果中添加新的元数据,则必须遵循以下流程:

  1. 将新的元数据添加到您的database.js文件中。(强烈建议您不要更改现有的元数据。)
  2. 将新的元数据添加到VideoData类的构造函数中(位于./lambda/src/models/database-models/video-metadata.js)。
  3. 在Lambda中,将搜索结果引用到您自己对附加元数据的实现中。

请注意,您还必须确保网页播放器通过特殊令牌(即playbackContextToken)访问新创建的元数据。您的Lambda会将这个令牌传回给Alexa。playbackContextToken包含一个用于描述媒体的值,并通过处理程序传递给您的网页播放器。有关更多详细信息,请参阅以下指南:

示例

假设您想将每个视频的制作公司以字符串数组形式添加到元数据中。请按照以下流程开始:

  1. 打开您的./lambda/src/database/database.js文件。
  2. 将新的production属性添加到您的对象中,如下所示:

    {
      id: 'MV009844570000',
      name: 'The Commuter',
      production: ['StudioCanal', 'TF1 Films Production', 'The Picture Company', 'Obra Films', 'Canal+', 'Cine +', 'TF1', 'Amazon Prime Video'],
      ...
    }
    
  3. ./lambda/src/models/database-models/video-metadata.js文件中打开VideoData类。
  4. 将此行添加到该类的构造函数中:
    this.production = options.production
    

Handler

本部分概述了此类,以帮助您理解Lambda和网页播放器之间的交互。此时无需对其进行自定义。

Handler是接收来自Alexa的请求指令的主类(它位于.lambda/src/handlers/handler.js中)。根据指令的类型,该类将请求路由到特定于指令的处理程序。所有指令均受支持。

Handler类包含几个特定于参考项目的附加指令。由于您的网页播放器在设备上运行时可能需要再次调用您的Lambda,因此还支持以下指令:

  • UPDATE_VIDEO_PROGRESS通过更新最新的已知时间戳来支持视频播放。如果用户结束体验并在稍后继续同一视频的流式播放,他们可以从上次离开之处继续播放。
  • REFRESH_WEB_PLAYER_CREDENTIALS支持在网页播放器的安全IAM凭证到期之前对其进行刷新。

自定义登录页面中的类别数量

根据设备的屏幕尺寸,通过更改./lambda/utils/constants.js中的NUM_CATEGORIES_ON_LANDING_PAGE,在登陆页面上最多显示五个类别。

后续步骤

请参阅网页播放器概述


Last updated: 2020年10月29日