开发者控制台

Alexa.UIController接口 (VSK Fire TV)

Alexa.UIController接口 (VSK Fire TV)

UIController接口会考虑应用的用户界面状态,以便更智能地响应用户请求。要使用UIController接口,您需要向Alexa发送您的用户界面状态,列出页面上的所有元素和聚焦元素。然后,这些详细信息将包含在Alexa发送至您的Lambda的指令中。

如果您要实现UIController,也可以考虑实现MediaDetailsNavigator,这是另一个Alexa接口,它使用用户界面状态报告为“show more details about video title”(显示有关 [视频标题] 的更多详细信息)请求提供指令。

详细解释

为了使Alexa更智能地响应用户的请求,Alexa需要知道客户在屏幕上看到了哪些元素以及每个元素可以使用哪些操作。此信息被称为用户界面状态。用户界面状态有两个不同的维度来描述用户界面上显示的内容 - 屏幕上显示的元素列表(在状态报告的uiElements部分中报告)和聚焦元素(在focusedUIElement部分中报告)。

要让Alexa知道您的用户界面状态,您(作为应用开发者)先向亚马逊发送用户界面报告(将事件作为ChangeReport发布到特定的Alexa网关终端节点),这样Alexa就可以动态地以不同的屏幕元素为目标。例如,启动应用后,您的应用将在屏幕上发送用户界面元素的结构化列表(包括这些对象的名称、别名、位置和支持的操作)。每当用户界面发生变化时,您都会将用户界面状态发送到Alexa终端节点。

当客户提出与屏幕用户界面导航或选择相关的请求时(例如,“Alexa, play number three”(Alexa,播放第三项)、“Alexa, select continue watching”(Alexa,选择继续观看)、“Alexa, play harry potter”(Alexa,播放harry potter)、“Alexa, play this”(Alexa,播放此项),Alexa会从UIController接口向您的Lambda发送一个ActionOnUIElement指令。该指令包含您之前发送至Alexa的用户界面状态中的具体详细信息。例如,如果您在屏幕上有一个名为“Popcorn Movie”(爆米花电影)的标题位于列表中的第二个位置,UIController接口会使用这些详细信息向您的Lambda发送指令。

总体而言,UIController接口允许客户以更丰富的方式在您应用的用户界面中使用语音进行交互,例如通过语音选择他们的个人资料或通过语音在屏幕上选择特定项目。

UIController与KeypadController

UIControllerKeypadController的不同之处在于,UIController会考虑您的用户界面状态,并在其发送的指令中包含来自用户界面状态的详细信息。相比之下,KeypadController是无状态的,不会接收有关应用用户界面的任何具体详细信息。因此,UIController在它所能支持的表述类型中要强大得多。

您可以将KeypadControllerUIController一起使用。每当用户界面状态可用时,UIController将优先于KeypadController。如果用户界面状态不可用,则KeypadController将作为备用项。如果您没有实现KeypadController,则备用项将是Fire TV内置的应用内语音滚动和选择功能。

支持的表述

当用户提出与屏幕上的元素相关的导航或选择请求时,Alexa会向您的Lambda发送ActionOnUIElement指令。与其他表述不同,由于UIController可以访问您的用户界面状态,因此没有一组固定的受支持表述。可以根据您在用户界面状态报告(如下所述)中提供的屏幕上下文动态控制支持的表述和功能。您的应用支持的表述取决于您在用户界面状态报告中提供的元素。

例如,如果您将一个名为“Jake's watchlist”(Jake的观看列表)的元素描述为在第三个位置的序号,则Alexa将支持诸如“Go to Jake's watchlist”(转到Jake的观看列表)或“select the third one”(选择第三项)之类的表述。(序号是表示位置的标识符,例如第一项第二项等)

根据您的状态报告中的详细信息,可以支持以下表述和场景:

  • 您可以通过说出“Scroll/Page right/left/up/down”(向右/向左/向上/向下滚动或翻页)来滚动列表。(注意: 不支持“Scroll back”(向后滚动)。)

  • 您可以通过说出“Show/See more”(显示/查看更多)来查看更多/所有在候选列表中不可见的标题。(注意: 不支持“Show/see all”(显示/查看全部)。)

  • 您可以通过说出“Select/Pick/Choose this/that/the first one/number one”(选择/选取/选中此项/该项/第一个/第一项)来从列表中选择一个项目,或者要求Alexa播放列表中的一个标题,比如“Select/Play/Choose/Watch Mockingjay”(选择/播放/选中/观看Mockingjay)。

  • 您还可以使用语音在遥控器上模拟方向键控制器,方法是说出“Go right/left/up/down”(向右/向左/向上/向下移动),然后说出“Select/Choose/Watch/Play”(选择/选中/观看/播放)。

  • 在视频详情页面上,您可以采取屏幕上显示的以下操作: “Add to watchlist”(添加到观看列表)、“Watch Now”(立即观看)、“Watch Trailer”(观看预告片)等。

  • 您可以导航到任何用户界面位置,例如最近观看的内容、观看列表、推荐的视频。

  • 您可以响应对话框屏幕并选择一个选项,无需使用遥控器。

有关多个区域设置中表述的具体示例,请参阅以下列表。这些表述包括KeypadControllerRemoteVideoPlayer: SearchAndPlay等。

功能 表述示例 预期响应
观看此项
需要认证

Watch this

开始播放聚焦媒体

播放此项
需要认证

Play this

开始播放聚焦媒体

定向导航 - 跳转
需要认证

Go up

go down

go left

go right

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

Move up

move down

move left

move right

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

Scroll up

scroll down

scroll left

scroll right

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

Page up

page down

page left

page right

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

Up

Down

Left

Right

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

Select this

选中聚焦的任何内容。

显示/查看更多
可选

Show more

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

Show details

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

Next

屏幕上会显示下一页结果。

观看[标题]
需要认证

Watch breaking bad

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

Watch sean connery

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

Watch comedy

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

Watch star trek

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

Watch a movie

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

Watch breaking bad season two

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

Watch breaking bad episode five

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

Watch breaking bad season two episode five

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

Watch james bond

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

Watch seahawks

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

Watch soccer

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

Watch n. b. a. league

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

Watch soccer game

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

Launch netflix app

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

Launch a. t. and t. u-verse app

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

Go to control settings

视图更改为控制设置。

转到主页
可选

Go home

视图更改为主屏幕。

关闭
可选

Close [3P App]

e.g. Close Netflix

应用或技能关闭。

退出
可选

Exit [ 3p App]

Exit Netflix

退出应用或技能。

离开
可选

Quit [ 3p App]

Quit Netflix

离开应用或技能。

打开
可选
Open

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

Not supported

开始播放聚焦媒体

播放此项
需要认证

joue ça

开始播放聚焦媒体

定向导航 - 跳转
需要认证

va vers le haut

monte vers le haut

remonte

va en bas

descends

faire défiler vers le bas

va à gauche

aller à gauche

va à droite

aller à droite

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

va vers le haut

monte vers le haut

remonte

navigue en bas

navigue vers le bas

Naviguer à gauche

Naviguer vers la gauche

Naviguer à droite

Naviguer vers la droite

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

fais défiler vers le haut

fais défiler en haut

faire défiler vers le bas

défiler vers le bas

se déplacer vers le bas

fais défiler à gauche

faire défiler à gauche

défiler à gauche

se déplacer à droite

fais défiler à droite

faire défiler à droite

défiler à droite

se déplacer à droite

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

page vers le haut

Page vers le bas

Page vers la gauche

Page vers la droite

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

va en haut

monte

faire défiler vers le haut

va en bas

descends

faire défiler vers le bas

fais défiler à gauche

va à gauche

faire défiler à gauche

se déplacer à gauche

aller à gauche

défiler à gauche

fais défiler à droite

va vers la droite

fais défiler vers la droite

déplace-toi vers la droite

aller à droite

défile à droite

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

sélectionne ça

choisis ça

选中聚焦的任何内容。

显示/查看更多
可选

montre moi en plus

montre en plus

encore

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

montre des détails

montre moi des détails

voir plus d'infos

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

prochain(e)

suivant(e)

next

屏幕上会显示下一页结果。

观看[标题]
需要认证

mets / joue / lance / pars [VideoName] sur [AppName]

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

regarde un film avec [actor]

mets un film avec [actor]

joue un film avec [actor]

pars un film avec [actor]

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

regarder un [GenreName]

regarder une [GenreName]

mets un [GenreName]

mets une [GenreName]

joue un [GenreName]

joue une [GenreName

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

regarde [title]

mets [title]

joue [title]

pars [title]

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

regarde un film

mets un film

joue un film

pars un film

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

regarde la saison [x] de [title]

mets la saison [x] de [title]

joue la saison

[x] de [title]

pars la saison [x] de [title]

regarde [title] saison [x]

mets [title] saison [x]

joue [title] saison [x]

pars [title] saison [x]

joue la saison [x] de [title]

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

regarde l'épisode [x] de [title]

mets l'épisode [x] de [title]

joue l'épisode [x] de [title]

pars l'épisode [x] de [title]

joue [title] épisode [x]

mets [title] épisode [x]

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

Same as fr-FR

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

Not supported

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

Regarde le [team]

Regarde le match de [team]

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

Not supported

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

Mets [league]

Joue [league]

Regarde [league]

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

Not supported

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

pars [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

pars [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

vas à la configuration

vas aux paramètres

vas à la configuration des contrôles

vas aux paramètres des contrôles

ouvres la configuration

ouvres les paramètres

ouvres la configuration des contrôles

ouvres les paramètres des contrôles

视图更改为控制设置。

转到主页
可选

retourne au home page

affiche-moi l'écran d'accueil

retourne à l'écran d'accueil

affiche l'accueil

affiche-moi l'accueil ouvre l'accueil

va à l'accueil

affiche la page d'accueil

retourne à la page d'accueil

rentre à l'accueil accueil

视图更改为主屏幕。

关闭
可选

Not supported

应用或技能关闭。

退出
可选

sors de là

退出应用或技能。

离开
可选

quitte [AppName]

离开应用或技能。

打开
可选

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

Not supported

开始播放聚焦媒体

播放此项
需要认证

joue ça

开始播放聚焦媒体

定向导航 - 跳转
需要认证

va vers le haut

monte vers le haut

remonte

va en bas

descends

faire défiler vers le bas

va à gauche

aller à gauche

va à droite

aller à droite

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

va vers le haut

monte vers le haut

remonte

navigue en bas

navigue vers le bas

Naviguer à gauche

Naviguer vers la gauche

Naviguer à droite

Naviguer vers la droite

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

fais défiler vers le haut

fais défiler en haut

faire défiler vers le bas

défiler vers le bas

se déplacer vers le bas

fais défiler à gauche

faire défiler à gauche

défiler à gauche

se déplacer à droite

fais défiler à droite

faire défiler à droite

défiler à droite

se déplacer à droite

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

page vers le haut

Page vers le bas

Page vers la gauche

Page vers la droite

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

va en haut

monte

faire défiler vers le haut

va en bas

descends

faire défiler vers le bas

fais défiler à gauche

va à gauche

faire défiler à gauche

se déplacer à gauche

aller à gauche

défiler à gauche

fais défiler à droite

va vers la droite

fais défiler vers la droite

déplace-toi vers la droite

aller à droite

défile à droite

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

sélectionne ça

choisis ça

选中聚焦的任何内容。

显示/查看更多
可选

montre moi en plus

montre en plus

encore

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

montre des détails

montre moi des détails

voir plus d'infos

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

prochain(e)

suivant(e)

next

屏幕上会显示下一页结果。

观看[标题]
需要认证

mets / joue / lance [VideoName] sur [AppName]

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

regarde un film avec [actor]

mets un film avec [actor]

joue un film avec [actor]

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

regarder un [GenreName]

regarder une [GenreName]

mets un [GenreName]

mets une [GenreName]

joue un [GenreName]

joue une [GenreName

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

Regarde [title]

Mets [title]

Joue [title]

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

regarde un film

mets un film

joue un film

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

Regarde la saison [x] de [title]

Mets la saison [x] de [title]

Regarde [title] saison [x]

Mets [title] saison [x]

Joue [title] saison [x]

Joue la saison [x] de [title]

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

Regarde l'épisode [x] de [title]

Mets l'épisode [x] de [title]

Joue l'épisode [x] de [title]

Joue [title] épisode [x]

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

Regarde l'épisode [x] de la saison [x] de [title]

Joue l'épisode [x] de la saison [x] de [title]

Mets l'épisode [x] de la saison [x] de [title]

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

Not supported

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

Regarde le [team]

Regarde le match de [team]

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

Not supported

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

Mets [league]

Joue [league]

Regarde [league]

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

Not supported

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

lance [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

lance [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

ouvre les paramètres de contrôles

ouvre les paramètres

va aux paramètres

视图更改为控制设置。

转到主页
可选

affiche-moi l'écran d'accueil

retourne à l'écran d'accueil

affiche l'accueil

affiche-moi l'accueil

ouvre l'accueil

va à l'accueil

affiche la page d'accueil

retourne à la page d'accueil

rentre à l'accueil accueil

视图更改为主屏幕。

关闭
可选

Not supported

应用或技能关闭。

退出
可选

sors d'ici

退出应用或技能。

离开
可选

quitte [AppName]

离开应用或技能。

打开
可选

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

das anschauen/angucken

开始播放聚焦媒体

播放此项
需要认证

spiel das ab?

开始播放聚焦媒体

定向导航 - 跳转
需要认证

geh/e nach oben

nach oben/rauf/hinauf/hoch gehen

gehe hoch

geh rauf/hinauf

nach unten/runter/hinunter gehen

geh runter/nach unten/hinunter

geh nach links

geh nach rechts

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

nach oben bewegen

nach unten bewegen

nach links bewegen

nach rechts bewegen

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

scroll hoch

scroll nach oben

scroll rauf

scrolle hinauf

scrolle hoch

scroll hier/dahin/dorthin runter

scroll zum letzten runter

scroll runter/hinunter/nach unten

runter/hinunter/nach unten scrollen

scroll nach links

scroll links

scroll nach rechts

scroll rechts

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

seite nach oben

seite rauf

seite hinauf

seite hoch

blätter hoch

blätter runter

seite runter/hinunter/nach unten

blätter links

seite nach links

seite links

blätter rechts

seite nach rechts

seite rechts

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

nach oben bewegen

bätter hoch

geh hoch

scroll hoch

scroll nach oben

nach unten bewegen

blätter runter

scroll hier/dahin/dorthin runter geh runter/nach unten

scroll hinunter/nach unten runter/hinunter gehen

seite runter/hinunter/nach unten

nach links bewegen

blätter links

seite nach? links

scroll nach? links

geh nach links

nach rechts bewegen

blätter rechts

seite nach? rechts

scroll nach? rechts

geh nach rechts

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

nimm das

wähl das aus?

klick die an

diese

选中聚焦的任何内容。

显示/查看更多
可选

mehr ansehen/sehen

zeig mir mehr

zeig mir mehr davon

zeig mir mehr auf [AppName] zeig mir mehr filme an?

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

details ansehen/sehen

zeig details an

liefere/gib mir mehr details

mehr details

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

nächste

nächstes

das nächste

spring/geh vor

spring/geh vorwärts vor

überspring das

eins weiter/vorwärts

weiter

spring nach vorn

spring nach vorn auf [AppName]/[DeviceBrand]

nächstes im [DeviceLocation]

nächstes auf [DeviceLocation]? [DeviceType]/[DeviceBrand]

gib mir das nächste von [AppName]

nächstes auf allen [DeviceType]

屏幕上会显示下一页结果。

观看[标题]
需要认证

ich möchte [VideoName] gucken

spiel [VideoName]

spiel watchlist ab von [VideoName]

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

spiel [VideoName] (mit [ActorName]) auf [AppName]

streame einen film mit [ActorName] auf [AppName]

streame einen [ActorName] film auf [AppName]

streame eine serie mit [ActorName] auf [AppName]

streame eine [ActorName] serie auf [AppName]

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

spiel eine [GenreName] [MediaType] auf [DeviceType] ab

spiel eine [GenreName] [MediaType] auf [AppName] ab

[GenreName] [MediaType] schauen

spiel einen [GenreName] [MediaType]

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

ich möchte [VideoName] gucken

spiel [VideoName]

spiel watchlist ab von [VideoName]?

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

spiel einen [MediaType]

spiel [MediaType] aus der/meiner watchlist

streame den [MediaType] [VideoName] auf [AppName]/[Device] spiel trailer von [VideoName]

spiel die neueste folge von [VideoName]

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

spiel [VideoName] [Season] [Season_Numer]

spiel [VideoName] [Season] [Season_Numer] auf [AppName]

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

spiel die [Episode_Number] [Episode] von [VideoName]

spiel [VideoName] [Episode_Number]

spiel von [VideoName] [Episode] [Episode_Number]

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

spiel [Season] [Season_Numer] [Episode] [Episode_Number] von [VideoName]

spiel [VideoName] [Season] [Season_Numer] [Episode] [Episode_Number]

spiel die [VideoName] [Season] [Season_Numer] [Episode] [Episode_Number] auf [AppName] ab

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

Not supported

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

spiel [SportsTeam] [Event] auf [AppName]

[SportsTeam] [Event] anschauen/ansehen

das [SportsTeam] [Event] auf [AppName] anschauen/ansehen

spiel das [SportsTeam] [Event] auf meinem [Device]

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

spiel das [Sport] [Event] auf meinem [Device]

das [Sport] [Event] ansehen

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

spiel [SportsTeam] [Event] auf [AppName]

[SportsTeam] [Event] anschauen

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

spiel das [Sport] [Event] auf meinem [Device]

das [Sport] [Event] ansehen

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

starte [AppName]

spiel/öffne [AppName] app

starte [AppName] auf [DeviceBrand]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

starte [AppName]

spiel/öffne [AppName] app

starte AppName auf [DeviceBrand]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

Öffne die Einstellungen

Einstellungen öffnen

Gehe zu den Einstellungen

Zu Einstellungen gehen

Einstellungen aufrufen

Ruf die Einstellungen auf

zeige mir die eintellungen

zeig mir meine w. lan einstellungen

zeig mir meine start seiten einstellungen

zeig meine start seiten feed einstellungen

zeig mir die (toneinstellungen/geräteeinstellungen/erreichbarkeitseinstellungen/bedienungshilfeeinstellungen)

öffne einstellungen

öffne einstellungen auf [AppName]

视图更改为控制设置。

转到主页
可选

Zum Startbildschirm

Zu Start

Geh nach Hause

Gehe zum Startbildschirm

Zurück zu Start

bring mich zum start bildschirm

bring mich zum home screen

geh zum home screen

geh zur home seite

geh zurück zum start bildschirm

zeig home

zeige mir die start seite

zeig mir den start bildschirm

zu start seite

geh zur start seite

视图更改为主屏幕。

关闭
可选

Not supported

应用或技能关闭。

退出
可选

Not Supported

退出应用或技能。

离开
可选

Not Supported

离开应用或技能。

打开
可选

öffne [AppName]

öffne [AppName] app

öffne [AppName] auf [DeviceBrand]

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

इसे देखो

इसको देखो

开始播放聚焦媒体

播放此项
需要认证

इसे चलाओ

यह चला दो

इसे चला दो

यह चलाओ

开始播放聚焦媒体

定向导航 - 跳转
需要认证

ऊपर जाओ

ऊपर करो

नीचे जाओ *

नीचे जाना *

*ambiguity with "move down"

left जाना *

बाएं जाओ *

left पे जाओ *

*ambiguity with "move left"

right जाना

right पे जाओ

दायें जाओ

*ambiguity with "move right"

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

ऊपर जाओ

ऊपर करो

नीचे जाओ *

नीचे जाना *

*ambiguity with "move down"

left जाना *

बाएं जाओ *

left पे जाओ *

*ambiguity with "move left"

right जाना

right पे जाओ

दायें जाओ

*ambiguity with "move right"

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

उपर चलो

ऊपर scroll

ऊपर करो

नीचे scroll करें

नीचे की तरफ scroll करो

scroll down करो

left scroll करो

left की तरफ scroll करो

बायें की तरफ scroll करो

right scroll करो

right की तरफ scroll करो

दाएँ की तरफ scroll करो

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

पेज ऊपर करो

पेज नीचे करो

पेज को left पे ले जाओ

पेज को right पे ले जाओ

पेज को बाएँ ले जाओ

पेज को दाएँ ले जाओ

page नीचे करो

page down करो

page को बाएँ कर दो

page left  करो

page को दाएँ  करो

page right करो

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

ऊपर

ऊपर जाओ

उपर चलो

ऊपर करो

नीचे

नीचे जाओ

नीचे चलो

नीचे करो

left

बाएँ जाओ

बाएँ

बाएँ करो

Right

दाएँ जाओ

दाएँ

दाएँ करो

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

इसे चुनो

इसको select करो

选中聚焦的任何内容。

显示/查看更多
可选

और दिखाओ

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

details दिखाओ

जानकारी दिखाओ

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

[GroupDeviceBrand] [HomeAutomationType] पर अगला लगाओ[GroupDeviceBrand] पर अगला लगाओ[GroupDeviceBrand] वाले [HomeAutomationType] पर अगला चलाना[AppName] पर इसके बाद वाला दो[AppName] पर मुझे next वाला दे देनाnext recipe अगली recipe[DeviceLocation] पर इसके बाद वाला दो[LocationNonSpecificQuantity] अगला चलाओ अगला/next [Episode] play करो[DeviceLocation] पर DeviceBrand अगला वाला दो

屏幕上会显示下一页结果。

观看[标题]
需要认证

[VideoName] चलाओ/बजाओ/लगाओ/play/देखो [AppName] पे/पर/में [VideoName] चलाओ/बजाओ/लगाओ/play

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

[ActorName] का/की/के movies को चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के movies चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के [GenreName] को चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के [GenreName] चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के [VideoName] को चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के [VideoName] चलाओ/बजाओ/लगाओ/play/देखो

[ActorName] का/की/के/वाला [GenreName] की [VideoName] को चलाओ/बजाओ/लगाओ/play/देखो [ActorName] का/की/के/वाला [GenreName] की [VideoName] चलाओ/बजाओ/लगाओ/play/देखो

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

[GenreName] [VideoName] को चलाओ/बजाओ/लगाओ/play/देखो [GenreName] [VideoName] चलाओ/बजाओ/लगाओ/play/देखो

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

star trek देखो/देखना/देखिए

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

[VideoName] movies चलाओ/बजाओ/लगाओ/play/देखो

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

[VideoName] का/की/के [SeasonNumber] को चलाओ/बजाओ/लगाओ/play/देखो [VideoName] का/की/के [SeasonNumber] चलाओ/बजाओ/लगाओ/play/देखो [VideoName] का/की/के [SeasonNumber] को चलाओ/बजाओ/लगाओ/play/देखो [VideoName] का/की/के [SeasonNumber] [SeasonNumber] चलाओ/बजाओ/लगाओ/play/देखो

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

[VideoName] का/की/के [EpisodeNumber] को चलाओ/बजाओ/लगाओ/play/देखो [VideoName] का/की/के [EpisodeNumber] चलाओ/बजाओ/लगाओ/play/देखो

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

[VideoName] season one episode one चलाओ/बजाओ/लगाओ/play करो

[VideoName] season एक का episode एक चलाओ/बजाओ/लगाओ/play करो

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

[CharacterName] का/की/के/वाला movies चलाओ/बजाओ/लगाओ/play/देखो [CharacterName] का/की/के/वाला movies को चलाओ/बजाओ/लगाओ/play/देखो Watch [CharacterName] movie [VideoName]

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

[Sport/League/Seam] games चलाओ/बजाओ/लगाओ/play/देखो [Sport/League/Seam] के games को चलाओ/बजाओ/लगाओ/play/देखो

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

[Sport/League/Seam] games चलाओ/बजाओ/लगाओ/play/देखो [Sport/League/Seam] के games को चलाओ/बजाओ/लगाओ/play/देखो

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

[Sport/League/Seam] games चलाओ/बजाओ/लगाओ/play/देखो

[Sport/League/Seam] के games को चलाओ/बजाओ/लगाओ/play/देखो

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

[Sport/League/Seam] games चलाओ/बजाओ/लगाओ/play/देखो [Sport/League/Seam] के games को चलाओ/बजाओ/लगाओ/play/देखो

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

netflix launch करो/करना/कीजिए/करिएगा

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

facebook app launch करो/करना/कीजिए/करिएगा

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

视图更改为控制设置。

转到主页
可选

home पर जाओ/जाना/जाइए/चलो/चलना

home पे जाओ/जाना/जाइए/चलो/चलना

视图更改为主屏幕。

关闭
可选

netflix बंद करना

netflix close करो/कीजिए

应用或技能关闭。

退出
可选

1. netflix से बाहर निकलो/निकलना/आओ

2. netflix exit करो/करना

退出应用或技能。

离开
可选

netflix quit करना

netflix quit कीजिए

离开应用或技能。

打开
可选

netflix खोलो

netflix खोलना

netflix open करना

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

guarda questo

metti questo

开始播放聚焦媒体

播放此项
需要认证

riproduci questo

开始播放聚焦媒体

定向导航 - 跳转
需要认证

vai su

Vai giù / scendi

voglio andare verso sinistra

voglio andare verso destra

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

salta su

Passa giù /passa in giù/salta giù / scendi/ salta verso il basso

voglio andare verso sinistra

voglio andare verso destra

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

scorri verso l'alto

scorri giù / scorri verso il basso /scrolla giù

scorri verso sinistra

scorri verso destra

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

pagina in su

pagina di sotto

pagina sinistra/pagina di sinistra

pagina destra/pagina di destra

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

su

giù

verso sinistra

verso destra

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

seleziona questo

scegli questo

选中聚焦的任何内容。

显示/查看更多
可选

mostra mi di più

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

fornisci dettagli mostra più dettagli mostra i dettagli

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

prossima / seguente / avanti / salta / successivo

屏幕上会显示下一页结果。

观看[标题]
需要认证

metti / trasmetti / riproduci / fammi guardare / fammi vedere + [VideoName] (+ da/su [DeviceName])

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

guarda un film con [ActorName]

metti un film con [ActorName]

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

guarda una [GenreName]

fammi vedere una commedia

mostra mi una commedia

metti una commedia

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

guarda star trek

fammi vedere star trek

mostra star trek

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

guarda un film

metti un fim

trasmetti un film

riproduci un film

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

guarda [VideoName] stagione due

metti [VideoName] stagione due

riproduci [VideoName] stagione due

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

guarda [VideoName] episodio cinque

metti [VideoName] episodio cinque

riproduci [VideoName] episodio cinque

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

guarda [VideoName] stagione due episodio cinque

metti [VideoName] stagione due episodio cinque

riproduci [VideoName] stagione due episodio cinque

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

guarda [CharacterName]

fammi vedere un film con james bond

mostrami un film di james bond

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

riproduci la partita del [SportsTeam]

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

not supported

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

trasmetti la partita della [League]

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

not supported

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

lancia [AppName]

apri [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

apri [special character AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

vai alle impostazioni (di controllo)

apri le impostazioni (di controllo)

视图更改为控制设置。

转到主页
可选

vai alla home

视图更改为主屏幕。

关闭
可选

应用或技能关闭。

退出
可选

esci

退出应用或技能。

离开
可选

Chiudi [AppName]

离开应用或技能。

打开
可选

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

これ見せて

开始播放聚焦媒体

播放此项
需要认证

これ を再生して

开始播放聚焦媒体

定向导航 - 跳转
需要认证

上に行って

下に行って

左側に行って

右の方へ行って

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

上に移動して

下の方へ移動して

左の方へ移動して

右側に移動して

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

上にスクロールして

下にスクロールして

左の方にスクロールして

右側へスクロールして

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

画面の上部へ

ページの下へ

画面の左へ

ページの右の方へ

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

*

 

*

*

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

これ選んで

选中聚焦的任何内容。

显示/查看更多
可选

もっと見せて

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

詳細を表示して

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

次 スキップ 次に行って[DeviceLocation]で次に行って[DeviceLocation]の[DeviceBrand]で次に行って[LocationNonSpecificQuantity]で次を再生[Episode]を再生して[VideoName]の[Episode]を再生[DeviceBrand]で再生

屏幕上会显示下一页结果。

观看[标题]
需要认证

[VideoName]を再生して [VideoName]を[AppName]で再生して [AppName]で[VideoName][MediaType]を再生して

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

[ActorNameName]が出ている[MediaType]を再生

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

[AppName]で[GenreNameName][MediaType]を再生[AppName]で[GenreNameName]を再生

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

[VideoName]を再生して [VideoName]を<AppName]で再生して [AppName]で[VideoName][MediaType]を再生して

[MediaType]を再生して

[ActorNameName]が出ている[MediaType]を再生

[Anaphor][MediaType]を流して

[AppName]で[GenreNameName][MediaType]を再生

[AppName]で[VideoName][MediaType]を再生して

[ChannelName]の[MediaType]を再生

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

[VideoName]の[Season][Season_Number]の

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

[Episode_Number][Episode]を再生

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

[Episode_Number][Episode]を再生

[VideoName]の[Season][Season_Number]の

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

[SportsTeam]の[Event]を[AppName]で見せて

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

[SportsTeam]の[Event]を[AppName]で見せて

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

[SportsTeam]の[Event]を[AppName]で見せて

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

[SportsTeam]の[Event]を[AppName]で見せて

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

設定を開いて

設定を見せて

設定に戻って

設定に行って

视图更改为控制设置。

转到主页
可选

[TargetName]に行って

视图更改为主屏幕。

关闭
可选

应用或技能关闭。

退出
可选

[3p App]を閉じて

退出应用或技能。

离开
可选

[3p App]を終了して

离开应用或技能。

打开
可选

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

Assistir/assista/assiste isso

开始播放聚焦媒体

播放此项
需要认证

Reproduzir/Reproduza/Reproduz isso

开始播放聚焦媒体

定向导航 - 跳转
需要认证

Subir/suba/sobe

Vá/vai/ir para baixo

Vá/vai/ir para esquerda

Vá/vai/ir para direita

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

Mover/mova/move pra cima

Mova/move/mover para baixo

Mova/move/mover para a esquerda

Mova/move/mover para direita

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

Rolar/rola/role para cima

Rola/role/rolar para baixo

Rola/role/rolar para a esquerda

Rola/role/rolar para a direita

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

página para cima/ ir para cima na página

Página para baixo

Pagina para esquerda

Página para direita

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

Ir/vai/vá pra cima

Ir/vai/vá pra baixo

Ir/vai/vá pra esquerda

Ir/vai/vá pra direita

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

escolher isso/esse/essa

selecionar isso/essa/ esse

esse aqui / esse/ essa aqui/ essa/ isso aqui/ isso

选中聚焦的任何内容。

显示/查看更多
可选

Mostrar/mostra/mostre mais

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

ver todos os detalhes do progama/show

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

próximo/próxima

屏幕上会显示下一页结果。

观看[标题]
需要认证

tocar/assistir/reproduzir [VideoName] no/na [AppName]

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

assistir [ator]

colocar [ator]

coloque filmes com [ator]

encontre filmes com [ator]

me mostre filmes com [ator]

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

assitir [GenreName]

assistir programas de [GenreName]

programas de [GenreName]

colocar [GenreName]

por favor reproduzir [GenreName]

reproduzir programas de [GenreName]

colocar um programa de [GenreName]

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

assitir jornada nas estrelas

colocar jornada nas estrelas

reproduzir jornada nas estrelas

você pode passsar jornada nas estrelas

por favor reproduzir jornada nas estrelas

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

assistir um filme

colocar um filme

nós podemos assistir um filme

ver um filme

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

assistir [title] temporada [x]

colocar [title] temporada [x]

reproduzir [title] temporada [x]

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

assistir [title] episódio [x]

colocar [title] episódio [x]

reproduzir [title] episódio [x]

reproduzir o [title] episódio [x]

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

assistir [title] temporada [x] episódio [x]

colocar [title] temporada [x] episódio [x]

reproduzir [title] temporada [x] episódio [x]

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

Not Supported

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

assisitr [SportTeam]

assitir o/a [SportTeam]

colocar no/na [SportTeam]

colocar o jogo do/da [SportTeam]

me mostre o jogo do/da [SportTeam]

mostre o jogo do/da [SportTeam]

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

assistir [Sport]

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

assistir [League]

colocar [League]

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

not supported

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

abrir [AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

abrir [special character AppName]

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

vá para Configurações

ir para Configurações

abrir Configurações

abra Configurações

Configurações

acessar Configurações

acesse Configurações

视图更改为控制设置。

转到主页
可选

vá para a página principal/ vá para a tela principal

视图更改为主屏幕。

关闭
可选

fechar [AppName]

应用或技能关闭。

退出
可选

Sair [AppName]

sai [AppName]

saia [AppName]

退出应用或技能。

离开
可选

sair do [AppName]

离开应用或技能。

打开
可选

打开应用或技能。

功能 表述示例 预期响应
观看此项
需要认证

ver lo*

ver este*

开始播放聚焦媒体

播放此项
需要认证

reproduce esto

reproduce este

开始播放聚焦媒体

定向导航 - 跳转
需要认证

ve te arriba

ve te abajo

ve te a la izquierda

ve a la izquierda

ve te a la derecha

ve a la derecha

应用向左、向右、向上或向下跳转,和按下方向键控制器上的方向相似。

定向导航 - 移动
需要认证

muéve te hacia arriba

muéve te hacia abajo

muéve te hacia izquierda

muéve te hacia derecha

应用向左、向右、向上或向下移动,和按下方向键控制器上的方向相似。

定向滚动
需要认证

despláza te hacia arriba

despláza te para arriba

despláza te hacia abajo

despláza te para abajo

despláza te hacia izquierda

despláza te para izquierda

despláza te hacia derecha

despláza te para derecha

应用向左、向右、向上或向下滚动,和按下方向键控制器上的方向相似。

定向分页
需要认证

arriba de la página

abajo de la página

izquierda de la página

derecha de la página

应用向左、向右、向上或向下分页,和按下方向键控制器上的方向相似。

无动词定向导航
需要认证

ve te arriba

ve te abajo

izquierda

ve te a la derecha

ve a la derecha

应用向左、向右、向上或向下切换,和按下方向键控制器上的方向相似。

选择此项(该项)
需要认证

selecciona esto

selecciona este

selecciona aquel

选中聚焦的任何内容。

显示/查看更多
可选

muestra más

muestra qué más hay

quiero ver algo más

veamos un poco más

veamos algo más

显示更多项目。例如,如果列表仅显示有限数量的项目,则将检索并显示更多项目。

显示/查看详情(信息)
可选

muestra detalles

enseña detalles

ver detalles

显示了更多详情。例如,如果信息被截断,则会显示更多信息。

获取下一页
需要认证

siguiente

salta

muestra el siguiente

siguiente en el sonos

próxima en el jardín

屏幕上会显示下一页结果。

观看[标题]
需要认证

pon interstellar

reproduce interstellar

ver interstellar

播放请求的媒体类型。如果内容有多个匹配项,则系统会提示用户选择所需的媒体。

按演员观看
需要认证

pon salma hayek

reproduce salma hayek

要么播放有演员参演的媒体(通过为用户选择最佳匹配项的算法),要么向用户显示结果列表。

按流派名称观看
需要认证

pon comedia en netflix (Not supported without AppName)

要么播放所请求流派的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按系列片 [标题] 观看
需要认证

pon star wars

reproduce star wars

要么播放所请求系列片最为推荐的结果,要么向用户显示匹配的系列片列表。

按媒体类型观看
可选

pon la película*

reproduce la película*

Note: Not supported in es-ES or es-US

要么播放与非标题请求匹配的媒体(通过为用户选择推荐视频的算法),要么向用户显示结果列表。

通过季编号观看 [标题]
可选

empieza la segunda temporada de los rompecorazones

comienza la segunda temporada de los rompecorazones

reproduce la segunda temporada de los rompecorazones

如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过剧集编号观看 [标题]
可选

pon el capítulo final de los serrano

通过用户上次观看的剧集来识别正确的剧集。如果剧集的观看未完成,则播放该系列中上次观看的剧集。如果已观看完上次观看的剧集,则播放下一集未观看的剧集。

通过季和剧集编号观看 [标题]
可选

pon el segundo episodio de la primera temporada de anabel

reproduce el cuarto episodio de la temporada tres de águila roja

播放与请求的季和剧集相对应的内容。

按角色姓名观看
可选

reproduce algo con james bond

要么播放与角色姓名匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按运动队观看
可选

ver el partido del real madrid

要么播放与运动队匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示媒体结果列表。

按体育运动类型观看
可选

reproduce el partido de fútbol en mi televisor

ver el partido de fútbol en mi tele

ver el partido de fútbol

要么播放与体育运动类型匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育联赛观看
可选

pon el partido de la a. c. b. en mi tele

ver el partido de la a. c. b. en mi televisor

要么播放与体育联赛匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

按体育赛事观看
可选

ver el partido de fútbol

要么播放与体育赛事匹配的媒体(通过为用户选择推荐媒体的算法),要么向用户显示结果列表。

启动 [合作伙伴] 应用
需要认证

lanza la app de netflix

lanza netflix

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

启动特殊角色标题
需要认证

lanza i. b. e. x. treinta y cinco

请求的应用启动并显示可供播放的已上线媒体列表。多模式设备有一个主页模板,其中填写了可能分为不同类别的媒体。

转到控制设置

abre configuración

ve a configuración

ve te a configuración

configuración

ir a configuración

abrir configuración

视图更改为控制设置。

转到主页
可选

página inicial

ir a la página principal

lléva me a la página principal

pantalla de inicio

menú de inicio

pantalla principal

menú principal

视图更改为主屏幕。

关闭
可选

cierra netflix

应用或技能关闭。

退出
可选

cierra netflix

退出应用或技能。

离开
可选

quitar netflix

离开应用或技能。

打开
可选

打开应用或技能。

发送用户界面状态报告

您需要发送用户界面状态报告,向Alexa告知客户屏幕上当前可见的项目。

支持VSK的应用

对于支持VSK的应用,您可以通过Alexa客户端库发送用户界面状态报告。用户界面控制器需要Alexa客户端库版本1.4.9及更高版本。请参阅步骤3: 集成Alexa客户端库,了解有关下载和安装Alexa客户端库的信息。

步骤1 - 将用户界面控制器添加到Alexa客户端库支持的功能中

在发送用户界面状态报告之前,您需要在Alexa客户端库中添加对用户界面控制器的支持。在initializeAlexaClient方法中,将getAlexaUIControllerCapability添加到supportedCapabilities列表中。

private void initializeAlexaClient() {
     // 检索AlexaClientManager的共享实例
     final AlexaClientManager clientManager = AlexaClientManager.getSharedInstance();

     // 收集您的技能ID
     final String alexaSkillId = "<insert skill id>";

     // 创建技能中支持的功能的列表。
     final List<AlexaVideoCapability> supportedCapabilities = new ArrayList<>();
     supportedCapabilities.add(getAlexaChannelControllerCapability());
     supportedCapabilities.add(getAlexaPlaybackControllerCapability());
     supportedCapabilities.add(getAlexaRemoteVideoPlayerCapability());
     supportedCapabilities.add(getAlexaSeekControllerCapability());
     supportedCapabilities.add(getAlexaKeypadControllerCapability());
     supportedCapabilities.add(getAlexaUIControllerCapability()); // 添加用户界面控制器支持

步骤2 - 通过Alexa客户端库发送用户界面报告

要发送用户界面状态报告,可调用Alexa客户端库的AlexaClientManager类中的setUIState方法。

public AlexaClientManager setUIState(Map<String, String> states) {
    Log.i(TAG, "setUIState");
    alexaClientEventManager.onUIStateSet(states);
    return this;
    }

setUIState方法采用states参数。states参数是用户界面属性的映射,代表屏幕上显示的元素。代表要设置的属性名称(即uiElementsfocusedUIElement)的键字符串与值字符串(与该属性相关的值键的JSON编码内容)相匹配。

支持VSK的设备

对于第三方设备,每当用户界面状态发生可操作的更改时,您都会将用户界面状态报告作为POST请求发送到Alexa事件网关终端节点。下面列出了发送用户界面状态报告事件的步骤。

步骤1 - 请求发送事件的权限

将用户界面状态报告事件发送到Alexa事件网关,这需要为每个客户提供身份验证令牌。在Alexa控制台中,找到您的技能,选择左侧的PERMISSIONS(权限)选项卡,然后打开Send Alexa Events(发送Alexa事件)。记录您的Alexa客户端ID和Alexa客户端密钥(显示在此屏幕上),这些信息将在下一步使用,以使用Login with Amazon (LwA) 对客户进行身份验证。有关更多信息,请参阅Alexa文档中的在您的技能中配置客户信息的权限。(状态报告在Alexa智能家居API中很常见。)

步骤2 - 添加代码以处理AcceptGrant指令

当您申请发送Alexa事件的权限时,您技能的Lambda函数将收到每位客户的AcceptGrant指令AcceptGrant指令包含授权代码,您将使用该授权代码为客户获取身份验证令牌。您必须添加代码才能在与客户所在地区相同的地区获取和存储令牌。以下是AcceptGrant指令示例:

{
  "directive": {
    "header": {
      "namespace": "Alexa.Authorization",
      "name": "AcceptGrant",
      "messageId": "<消息ID>",
      "payloadVersion": "3"
    },
    "payload": {
      "grant": {
        "type": "OAuth2.AuthorizationCode",
        "code": "VGhpcyBpcyBhbiBhdXRob3JpemF0aW9uIGNvZGUuIDotKQ=="
      },
      "grantee": {
        "type": "BearerToken",
        "token": "access-token-from-skill"
      }
    }
  }
}

AcceptGrant指令有效负载详细信息

字段 描述 类型
grant 亚马逊Alexa系统中标识用户的信息。 对象
grant.type 授予类型。目前,唯一的有效值为OAuth2.AuthorizationCode 字符串
grant.code 用户的授权代码。 字符串
grantee 在关联账户服务或系统中标识用户的信息。 对象
grantee.type 受让人类型。目前,唯一的有效值为BearerToken 字符串
grantee.token Alexa在账户关联过程中收到的用户访问令牌。 字符串

如果成功处理了AcceptGrant指令,则使用AcceptGrant.Response事件进行响应。

AcceptGrant响应事件示例

{
  "event": {
    "header": {
      "namespace": "Alexa.Authorization",
      "name": "AcceptGrant.Response",
      "messageId": "<消息ID>",
      "payloadVersion": "3"
    },
    "payload": {}
  }
}

如果您无法成功处理AcceptGrant指令,可使用Alexa.Authorization.ErrorResponse事件进行响应。以下是处理可能不成功的一些原因:

  • 您无法调用Login with Amazon来交换访问和刷新令牌的授权代码。
  • 您无法存储用户的访问和刷新令牌。
  • 当您尝试检索和存储访问和刷新令牌时发生的任何其他错误。

以下是Alexa.Authorization.ErrorResponse示例:

{
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa.Authorization",
      "name": "ErrorResponse",
      "payloadVersion": "3"
    },
    "payload": {
      "type": "ACCEPT_GRANT_FAILED",
      "message": "无法处理AcceptGrant指令,因为<原因>"
    }
  }
}

如果在AcceptGrant处理过程中出现错误,用户将无法启用您的技能。

更多详细信息,请参阅以下内容:

步骤3 - 指明在检测期间主动报告了属性

Alexa通过Discovery接口发送Discover指令,以了解您应用的功能。除了声明对UIController接口的支持外,在检测过程中,您还必须指明将发送更改报告。为此,您可以指明在您的检测响应中这些属性属于proactivelyReported

您可以通过以下方式配置对Discover指令的响应,以指明您对UIController功能的支持:

{
    "event": {
        "header": {
            "namespace": "Alexa.Discovery",
            "name": "Discover.Response",
            "payloadVersion": "3.0",
            "messageId": "abc-123-def-456"
        },
        "payload": {
            "endpoints": [
                {
                    "endpointId": "uniqueIdOfEndpoint",
                    "friendlyName": "客厅电视",
                    "description": "向客户展示的描述",
                    "cookie": {

                    },
                    "capabilities": [
                        {
                            "type": "AlexaInterface",
                            "interface": "Alexa.UIController",
                            "version": "3.0",
                            "properties": {
                                "supported": [
                                    {
                                        "name": "uiElements"
                                    },
                                    {
                                        "name": "focusedUIElement"
                                    }
                                ],
                                "proactivelyReported": true,
                                "retrievable": false
                            }
                        }
                    ]
                }
            ]
        }
    }
}
声明对MediaDetailsNavigator的支持

如果您还计划支持MediaDetailsNavigator接口,您可以在此为其声明功能。MediaDetailsNavigator接口让您可以处理客户的请求,以便在屏幕上查看有关特定项目的更多详细信息。有关详细信息,请参阅MediaDetailsNavigator中的发送用户界面状态报告部分。

有关状态报告和授权的更多信息,请参阅以下内容:

步骤4 - 向Alexa事件网关发送用户界面状态报告

最后一步是在可报告的属性发生变化时,开始向Alexa事件网关发送用户界面状态报告。当您的用户界面状态因任何原因发生变化时,发送用户界面状态报告。发送到事件网关的每条消息都应将身份验证令牌作为HTTP头部包含在消息正文中。

要将您的用户界面状态发送到Alexa事件网关,请如下提交请求头部:

POST /v3/events HTTP/1.1
Host: api.amazonalexa.com
Authorization: Bearer <access-token-from-Amazon>
Content-Type: application/json

(将<access-token-from-Amazon>更改为您在上述步骤2中获得的实际身份验证令牌。) 请求正文必须包含一个JSON对象,其中包含用户界面状态详细信息,如用户界面状态报告示例和架构中所述。有关详细信息,请参阅下一部分中的“Example”(示例)选项卡。

有关授权的更多详细信息,请参阅Alexa文档中的以下内容:

用户界面状态报告示例和架构

以下选项卡提供用户界面状态报告示例(显示填充值示例)和架构(显示数据类型而非示例)。还包括一个树形图,用于显示架构的视觉层次结构。

POST /v3/events HTTP/1.1
Host: api.amazonalexa.com
Authorization: Bearer <access-token-from-Amazon>
Content-Type: application/json

{
    "context": {
        "properties": [

        ]
    },
    "event": {
        "header": {
            "messageId": "abc-123-def-456",
            "namespace": "Alexa",
            "name": "ChangeReport",
            "payloadVersion": "3"
        },
        "endpoint": {
            "scope": {
                "type": "AMAZON.BearerToken",
                "token": "access-token-from-Amazon"
            },
            "endpointId": "endpoint-001"
        },
        "payload": {
            "change": {
                "cause": {
                    "type": "PHYSICAL_INTERACTION"
                },
                "properties": [
                    {
                        "namespace": "Alexa.UIController",
                        "name": "uiElements",
                        "value": {
                            "scene": {
                                "sceneId": "sceneId-001"
                            },
                            "elements": [
                                {
                                    "elementId": "elementId_10",
                                    "entity": {
                                        "type": "AMAZON.ItemList"
                                    },
                                    "uiSupportedActions": [
                                        "SCROLL_DOWN",
                                        "SCROLL_FORWARD"
                                    ],
                                    "elements": [
                                        {
                                            "elementId": "elementId_11",
                                            "entity": {
                                                "type": "AMAZON.VideoObject",
                                                "name": {
                                                    "value": "Superbad"
                                                },
                                                "externalIds": {
                                                    "externalIdNamespace": "e99e067f-9112-4642-9853-b6401322964d"
                                                }
                                            },
                                            "ordinal": 1,
                                            "uiSupportedActions": [
                                                "SELECT"
                                            ]
                                        },
                                        {
                                            "elementId": "elementId_12",
                                            "entity": {
                                                "type": "AMAZON.VideoObject",
                                                "name": {
                                                    "value": "Dumb and Dumber"
                                                },
                                                "externalIds": {
                                                    "mediaBrowseId": "d9fd6168-81b8-4a28-a660-ba35141ca5b6"
                                                }
                                            },
                                            "ordinal": 2,
                                            "uiSupportedActions": [
                                                "SELECT"
                                            ]
                                        },
                                        {
                                            "elementId": "elementId_13",
                                            "entity": {
                                                "type": "AMAZON.VideoObject",
                                                "name": {
                                                    "value": "Hangover"
                                                },
                                                "externalIds": {
                                                    "mediaBrowseId": "08cb2390-2511-4df7-84c4-457a98fb738c"
                                                }
                                            },
                                            "ordinal": 2,
                                            "uiSupportedActions": [
                                                "SELECT"
                                            ]
                                        }
                                    ]
                                }
                            ]
                        },
                        "timeOfSample": "2017-02-03T16:20:50.52Z",
                        "uncertaintyInMilliseconds": 0
                    },
                    {
                        "namespace": "Alexa.UIController",
                        "name": "focusedUIElement",
                        "value": {
                            "scene": {
                                "sceneId": "sceneId-001"
                            },
                            "element": {
                                "elementId": "elementId_11",
                                "entity": {
                                    "type": "AMAZON.VideoObject",
                                    "name": {
                                        "value": "Superbad"
                                    },
                                    "externalIds": {
                                        "externalIdNamespace": "e99e067f-9112-4642-9853-b6401322964d"
                                    }
                                },
                                "ordinal": 1,
                                "uiSupportedActions": [
                                    "SELECT"
                                ]
                            }
                        },
                        "timeOfSample": "2017-02-03T16:20:50.52Z",
                        "uncertaintyInMilliseconds": 0
                    }
                ]
            }
        }
    }
}
{
  "context": {
    "properties": []
  },
  "event": {
    "header": {
      "messageId": string,
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": string
      },
      "endpointId": string
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": string
              },
              "elements": [
                {
                  "elementId": string,
                  "entity": {
                    "type": enum<EntityTypes>
                  },
                  "uiSupportedActions": [
                    list<uiSupportedActions>
                  ],
                  "elements": [
                    {
                      "elementId": string,
                      "entity": {
                        "type": enum<EntityTypes>,
                        "name": {
                          "value": string
                        },
                        "externalIds": {
                          map<String>
                        }
                      },
                      "ordinal": Integer,
                      "uiSupportedActions": [
                      list<uiSupportedActions>
                      ]
                    }
                  ]
                }
              ]
            },
            "timeOfSample": string (ISO 8601),
            "uncertaintyInMilliseconds": integer
          },
          {
            "namespace": "Alexa.UIController",
            "name": "focusedUIElement",
            "value": {
              "scene": {
                "sceneId": string
              },
              "element": {
                "elementId": string,
                "entity": {
                  "type": enum<EntityTypes>,
                  "name": {
                    "value": string,
                    "variants": string
                  },
                  "externalIds": {
                    map<String>
                  }
                },
                "ordinal": Integer,
                "uiSupportedActions": [
                  list<uiSupportedActions>
                ]
              }
            },
            "timeOfSample": string (ISO 8601),
            "uncertaintyInMilliseconds": integer
          }
        ]
      }
    }
  }
}
object
├── context object
│   └── properties array[object]
└── event object
    ├── header object
    │   ├── messageId string
    │   ├── namespace enum => "Alexa"
    │   ├── name enum => "ChangeReport"
    │   └── payloadVersion string => "3"
    ├── endpoint object
    │   ├── scope object
    │   │   ├── type enum => "AMAZON.BearerToken"
    │   │   └── token string
    │   └── endpointId string
    └── payload object
        └── change object
            ├── cause object
            │   └── type enum => "PHYSICAL_INTERACTION"
            └── properties array[object]
                ├── namespace enum => "Alexa.UIController"
                ├── name enum => "uiElements"
                └── value object
                    ├── scene object
                    │   └── sceneId string
                    ├── elements array[object]
                    │   ├── elementId string
                    │   ├── entity object
                    │   │   └── type enum => Enum<EntityTypes>
                    │   ├── uiSupportedActions array[enum] => Enum<uiSupportedActions>
                    │   └── elements array[object]
                    │       ├── elementId string
                    │       ├── entity object
                    │       │   ├── type => Enum<EntityTypes>
                    │       │   ├── name object
                    │       │   │   ├── value string
                    │       │   │   └── variants string
                    │       │   └── externalIds map
                    │       ├── ordinal integer
                    │       └── uiSupportedActions array[enum] => Enum<uiSupportedActions>
                    ├── timeOfSample string ISO 8601
                    ├── uncertaintyInMilliseconds integer
                    ├── namespace enum => "Alexa.UIController"
                    ├── name enum => "focusedUIElement"
                    └── value object
                        ├── scene object
                        │   └── sceneId string
                        ├── element object
                        │   ├── elementId string
                        │   ├── entity object
                        │   │   ├── type enum => Enum<EntityTypes>
                        │   │   └── name object
                        │   │       ├── value string
                        │   │       └── variants string
                        │   └── uiSupportedActions array[enum] => Enum<uiSupportedActions>
                        ├── timeOfSample string
                        └── uncertaintyInMilliseconds integer

contextproperties对象不用于Fire TV实现。context对象将仅包含来自其他Alexa组件(例如Alexa.PowerState)的更新。如果触发更改报告事件时没有来自其他组件的状态更新,则将此项留空。)

数据结构

该部分介绍上述状态报告架构的数据结构。这些树形图与之前的架构类似,但在此处配对以显示用户界面状态报告的uiElementsfocusedUIElement部分所需的架构。

uiElementsfocusedUIElements的架构

properties数组有两个主要对象:一个具有的namespaceuiElements,另一个具有的namespacefocusedUIElement。它们的架构略有不同:

  • uiElements列出了屏幕上的所有元素;该部分使用elements数组(复数),还包含一个名称类似的称为elements的嵌套数组,您可以在其中提供子元素的可选列表。
  • focusedUIElement列出了聚焦元素;该部分使用element对象(单数)。

以下选项卡显示了uiElementsfocusedUIElement列表的不同架构。

├── namespace enum => "Alexa.UIController"
├── name enum => "uiElements"
└── value object
    ├── scene object
    │   └── sceneId string
    ├── elements array[object]
    │   ├── elementId string
    │   ├── entity object
    │   │   └── type enum => Enum<EntityTypes>
    │   ├── uiSupportedActions array[enum] => Enum<uiSupportedActions>
    │   └── elements array[object]
    │       ├── elementId string
    │       ├── entity object
    │       │   ├── type => Enum<EntityTypes>
    │       │   ├── name object
    │       │   │   ├── value string
    │       │   │   └── variants string
    │       │   └── externalIds map
    │       ├── ordinal integer
    │       └── uiSupportedActions array[enum] => Enum<uiSupportedActions>
    ├── timeOfSample string ISO 8601
    └── uncertaintyInMilliseconds integer
├── namespace enum => "Alexa.UIController"
├── name enum => "focusedUIElement"
└── value object
    ├── scene object
    │   └── sceneId string
    ├── element object
    │   ├── elementId string
    │   ├── entity object
    │   │   ├── type enum => Enum<EntityTypes>
    │   │   └── name object
    │   │       ├── value string
    │   │       └── variants string
    │   └── uiSupportedActions array[enum] => Enum<uiSupportedActions>
    ├── timeOfSample string
    └── uncertaintyInMilliseconds integer

有效负载定义

下表定义了您发送的用户界面状态报告的有效负载。请注意,在uiElementsfocusedUIElement部分中重复的元素(例如uiSupportedActions)具有相同的定义。

有效负载描述
字段 描述 数据类型
change
必需
包含有关状态变化的详细信息。 对象
cause
必需
提供状态变化的原因。

对象
type
必需
状态变化的类型。对于Fire TV实现,允许有一个选项: AMAZON.PHYSICAL_INTERACTION

枚举
properties
可选
包含有关状态更改的详细信息。properties元素包含与uiElements(元素列表)和focusedUIElement对象相关的状态更改的详细信息。

​数组
namespace
必需
有效负载的命名空间。对于Fire TV实现,允许有一个选项: Alexa.UIController

字符串
name
必需
有效负载的接口的名称。允许有两个选项:uiElementfocusedUIElement。如果您提供元素列表,可使用uiElement。相比之下,如果您要包括聚焦元素,可使用focusedUIElement。有关详细信息和上下文,请参阅用户界面状态报告示例

示例:uiElements

字符串
value
可选
包含描述客户屏幕上元素的scene对象。

对象
scene
必需
包括一个sceneId属性,该属性包含有关客户用户界面上显示的场景的信息。

对象
sceneId
必需
在客户的用户界面上呈现的场景的ID。

示例:sceneId-001

字符串
elements
可选
在此场景中呈现的用户界面元素列表。仅用于uiElements状态报告。

​数组
element
必需
在此场景上具有视觉焦点的元素。仅用于focusedUIElement状态报告。

List<Element>
entity
必需
描述此元素的Thing(一般对象)。

对象
type
必需
此实体的类型。有关详细信息,请参阅Enum<EntityTypes>部分。

示例: AMAZON.ItemList

Enum<EntityTypes>
name
可选
该实体的名称。包含两个可能的属性:valuevariants

对象
value
可选
该实体的首选名称。

示例: Superbad

字符串
variants
可选
用于指代该实体的其他名称。

示例: Extremebad

字符串
externalIds
可选
此实体在此终端节点的范围内唯一的标识符。entity.externalIds字段对Alexa来说是不透明的,仅用于包含在Alexa所发的指令中。所有接受实体结构的指令命令上的终端节点都需要理解在entity.externalIds中报告的标识符。

示例:"mediaBrowseId": "d9fd6168-81b8-4a28-a660-ba35141ca5b6"

Map<String, String>
elementId
必需
该用户界面元素在报告的场景范围内唯一的标识符。elementId字段对Alexa来说是不透明的,仅用于包含在从Alexa到该终端节点的指令中。终端节点可以使用此字段来包含所需的信息,以便能响应指令命令而在呈现的用户界面上定位此元素。

示例:elementId_11

字符串
ordinal
可选
可用于所用语言的选择的元素编号。例如,如果此值为1,则对于“Alexa select number 1”(Alexa,选择第1项),将选择此元素。

示例: Number one

整数
uiSupportedActions
必需
用户可通过UIController接口对该用户界面元素执行的枚举操作列表。有关枚举选项的详细信息,请参阅Enum<uiSupportedActions>

示例: SELECT

枚举
elements
可选
嵌套用户界面元素的可选列表。该元素是uiElements独有的。

List<ElementWithChildren>
timeOfSample
可选
记录属性值的时间。

示例: 2018-02-03T16:20:49.52Z

ISO 8601时间
uncertaintyInMilliseconds
可选
自上次确认属性值以来经过的毫秒数。

示例: 0

整数

Enum<EntityTypes>

entitytype枚举允许有以下选项:

  • AMAZON.VideoObject: 表示在用户界面上呈现的视频项目的实体类型。该实体是各种类型的视频(例如电影、电视节目、预告片等)的抽象。屏幕示例:

    示例:此屏幕上的“Interstellar”
    示例: 此屏幕上的“Interstellar”
  • AMAZON.ItemList: 表示项目列表的实体类型。该实体可用于表示相同或不同类型的实体的集合。屏幕示例:

    示例:此屏幕上的“Recents”(最近观看)
    示例: 此屏幕上的“Recents”(最近观看)
  • AMAZON.SoftwareApplication: 代表软件应用的实体类型。屏幕示例:

    示例:此屏幕上的“IMDb TV”
    示例: 此屏幕上的“IMDb TV”
  • AMAZON.Thing: 表示一般实体的实体类型,其特定类型要么是API集成方未知的,要么在UIController API规范中未对其进行定义。(请注意,MediaDetailsNavigator不支持显示有关此实体类型的更多详细信息。) 屏幕示例:

    示例:屏幕阅读器应用从该屏幕报告“Captain Fantastic”
    示例: 屏幕阅读器应用从该屏幕报告“Captain Fantastic”

Enum<uiSupportedActions>

uiSupportedActions枚举允许有以下选项。

名称 描述 预期指令处理
SELECT 选择用户界面元素的操作 该应用的相关表现应相当于单击提供的元素
EXPAND 在用户界面元素上“扩展”或以其他方式“显示更多”的操作。 应用应扩展所提供元素的隐藏、受阻、截断或其他可扩展内容。
SCROLL_RIGHT 在可滚动元素上按向右方向滚动的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向右的方向对指定元素执行滚动操作,使得滚动的感觉清晰
SCROLL_LEFT 在可滚动元素上按向左方向滚动的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向左的方向对指定元素执行滚动操作,使得滚动的感觉清晰
SCROLL_UP 在可滚动元素上按向上方向滚动的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向上的方向对指定元素执行滚动操作,使得滚动的感觉清晰
SCROLL_DOWN 在可滚动元素上按向下方向滚动的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向下的方向对指定元素执行滚动操作,使得滚动的感觉清晰
SCROLL_FORWARD 在可滚动元素上按向前方向导航的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向前的方向对指定元素执行滚动操作,使得滚动的感觉清晰。
SCROLL_BACKWARD 在可滚动元素上按向后方向导航的操作 应用应通过动画或通过在屏幕上保留某些元素,以按向后的方向对指定元素执行滚动操作,使得滚动的感觉清晰。

ActionOnUIElement指令示例

当客户按照支持的表述中的描述提出请求时,UIController接口会向您的Lambda发送名为ActionOnUIElement的指令。以下为指令示例。请注意,指令中使用了您在用户界面状态下报告的信息。例如,在应用已发送至Alexa的用户界面状态下报告"sceneId": "sceneId-001"

{
    "directive": {
        "header": {
            "namespace": "Alexa.UIController",
            "name": "ActionOnUIElement",
            "payloadVersion": "3"
        },
        "endpoint": {
            "scope": {
                "type": "AMAZON.BearerToken",
                "token": "access-token-from-Amazon"
            },
            "endpointId": "endpoint-001"
        },
        "payload": {
            "action": "SELECT",
            "scene": {
                "sceneId": "sceneId-001"
            },
            "element": {
                "elementId": "elementId_11",
                "entity": {
                    "type": "AMAZON.VideoObject",
                    "name": {
                        "value": "Superbad"
                    },
                    "externalIds": {
                        "externalIdNamespace": "e99e067f-9112-4642-9853-b6401322964d"
                    }
                },
                "ordinal": 1,
                "uiSupportedActions": [
                    "SELECT"
                ]
            }
        }
    }
}

用户界面状态报告和UIController指令示例

以下示例显示了示例屏幕、发送的用户界面状态报告、客户的表述以及Alexa向您的Lambda发送的UIController指令。

命名/序号选择示例

在此示例中,屏幕以不同的序号显示内容(位置,例如数字1、2、3等)。用户按序号或标题选择内容。

用户看到的屏幕

示例1
{
  "context": {
    "properties": [

    ]
  },
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": "scene-id-004"
              },
              "elements": [
                {
                  "entity": {
                    "type": "AMAZON.ItemList",
                    "externalIds": {
                      "entityId": "webpage-001"
                    }
                  },
                  "elementId": "elementId-001",
                  "uiSupportedActions": [
                    "SCROLL_DOWN",
                    "SCROLL_FORWARD"
                  ],
                  "elements": [
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Iron Man"
                        },
                        "externalIds": {
                          "entityId": "video-001"
                        }
                      },
                      "ordinal": 1,
                      "elementId": "elementId-002",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Interstellar"
                        },
                        "externalIds": {
                          "entityId": "video-002"
                        }
                      },
                      "ordinal": 2,
                      "elementId": "elementId-003",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Captain Fantastic"
                        },
                        "externalIds": {
                          "entityId": "video-003"
                        }
                      },
                      "ordinal": 3,
                      "elementId": "elementId-004",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "The Dressmaker"
                        },
                        "externalIds": {
                          "entityId": "video-004"
                        }
                      },
                      "ordinal": 4,
                      "elementId": "elementId-005",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Gaurdians of the Galaxy"
                        },
                        "externalIds": {
                          "entityId": "video-005"
                        }
                      },
                      "ordinal": 5,
                      "elementId": "elementId-006",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Passengers"
                        },
                        "externalIds": {
                          "entityId": "video-006"
                        }
                      },
                      "ordinal": 6,
                      "elementId": "elementId-007",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    }
                  ]
                }
              ]
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  }
}

客户表述: “Alexa, select number two”(Alexa,选择第二项)/“Alexa, select interstellar”(Alexa,选择interstellar)

{
  "directive": {
    "header": {
      "name": "ActionOnUIElement",
      "namespace": "Alexa.UIController"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "scene": {
        "sceneId": "scene-id-004"
      },
      "action": "SELECT",
      "element": {
        "entity": {
          "type": "AMAZON.VideoObject",
          "name": {
            "value": "Interstellar"
          },
          "externalIds": {
            "entityId": "video-002"
          }
        },
        "elementId": "elementId-003",
        "uiSupportedActions": [
          "SELECT"
        ]
      }
    }
  }
}

“select this”(选择此项)示例

在此示例中,用户选择了一个标题 ("The Marvelous Mrs. Maisel") 以查看详细信息。应用会向用户展示内容详细信息。然后用户说出“select this”(选择此项)。 这种语音模式之所以被称为“指代”,是因为用户将指代物从标题 ("The Marvelous Mrs. Maisel") 更改为较短的缩写 ("this");在这两种情况下,指代对象指的是同一个项目。

用户看到的屏幕

示例2
{
  "context": {
    "properties": [

    ]
  },
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": "scene-id-001"
              },
              "elements": [
                {
                  "entity": {
                    "type": "AMAZON.VideoObject",
                    "name": {
                      "value": "The Marvelous Mrs. Maisel"
                    },
                    "externalIds": {
                      "entityId": "video-001"
                    }
                  },
                  "elementId": "element-010",
                  "uiSupportedActions": [
                    "SELECT"
                  ],
                  "elements": [
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "立即使用Prime观看"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-001"
                        }
                      },
                      "elementId": "element-011",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "季节和剧集"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-002"
                        }
                      },
                      "elementId": "element-012",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "添加到观看列表"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-003"
                        }
                      },
                      "elementId": "element-013",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "更多观看方式"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-003"
                        }
                      },
                      "elementId": "element-013",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },                    
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "客户也观看了"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-004"
                        }
                      },
                      "elementId": "element-014",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                  ]
                }
              ]
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          },
          {
            "namespace": "Alexa.UIController",
            "name": "focusedUIElement",
            "value": {
              "scene": {
                "sceneId": "scene-id-001"
              },
              "element": {
                "entity": {
                  "type": "AMAZON.Thing",
                  "name": {
                    "value": "立即使用Prime观看"
                  },
                  "externalIds": {
                    "entityId": "webPageButton-003"
                  }
                },
                "elementId": "element-013",
                "uiSupportedActions": [
                  "SELECT"
                ]
              }
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  }
}

客户表述: “Alexa, select this”(Alexa,选择此项)

{
  "directive": {
    "header": {
      "namespace": "Alexa.UIController",
      "name": "ActionOnUIElement"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "scene": {
        "sceneId": "scene-id-004"
      },
      "action": "SELECT",
      "element": {
        "entity": {
          "type": "AMAZON.Thing",
          "name": {
            "value": "立即使用Prime观看"
          },
          "externalIds": {
            "entityId": "webPageButton-003"
          }
        },
        "elementId": "element-013",
        "uiSupportedActions": [
          "SELECT"
        ]
      }
    }
  }
}

命名播放示例

在此示例中,用户在屏幕上看到一个标题列表,并按名称选择其中一个标题。因为用户要求播放标题,因此发送了RemoteVideoPlayer: SearchAndPlay指令,而非UIController指令。

用户看到的屏幕

示例3
{
  "context": {
    "properties": [

    ]
  },
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": "scene-id-004"
              },
              "elements": [
                {
                  "entity": {
                    "type": "AMAZON.ItemList",
                    "externalIds": {
                      "entityId": "webpage-001"
                    }
                  },
                  "elementId": "elementId-001",
                  "uiSupportedActions": [
                    "SCROLL_DOWN",
                    "SCROLL_FORWARD"
                  ],
                  "elements": [
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Iron Man"
                        },
                        "externalIds": {
                          "entityId": "video-001"
                        }
                      },
                      "ordinal": 1,
                      "elementId": "elementId-002",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Interstellar"
                        },
                        "externalIds": {
                          "entityId": "video-002"
                        }
                      },
                      "ordinal": 2,
                      "elementId": "elementId-003",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Captain Fantastic"
                        },
                        "externalIds": {
                          "entityId": "video-003"
                        }
                      },
                      "ordinal": 3,
                      "elementId": "elementId-004",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "The Dressmaker"
                        },
                        "externalIds": {
                          "entityId": "video-004"
                        }
                      },
                      "ordinal": 4,
                      "elementId": "elementId-005",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Gaurdians of the Galaxy"
                        },
                        "externalIds": {
                          "entityId": "video-005"
                        }
                      },
                      "ordinal": 5,
                      "elementId": "elementId-006",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.VideoObject",
                        "name": {
                          "value": "Passengers"
                        },
                        "externalIds": {
                          "entityId": "video-006"
                        }
                      },
                      "ordinal": 6,
                      "elementId": "elementId-007",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    }
                  ]
                }
              ]
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  }
}

客户表述: “Alexa, play Interstellar”(Alexa,播放Interstellar)

{
    "directive": {
        "header": {
            "name": "SearchAndPlay",
            "namespace": "Alexa.RemoteVideoPlayer"
        },
        "endpoint": {
            "scope": {
                "type": "AMAZON.BearerToken",
                "token": "access-token-from-Amazon"
            },
            "endpointId": "endpoint-001"
        },
        "payload": {
            "entities": [
                {
                    "externalIds": {
                        "entityId": "video-002"
                    },
                    "value": "Interstellar",
                    "type": "Video"
                }
            ]
        }
    }
}

“Play This”(播放此项)示例

在此示例中,用户之前要求查看有关标题“The Marvelous Mrs. Maisel”的更多详细信息,因此应用显示了内容详情页面。现在用户说出“Play this”(播放此项)。 与之前的“Select this”(选择此项)示例一样,这也是指代的示例。除了这种情况外,发送的指令为RemoteVideoPlayer: SearchAndPlay指令而非UIController指令。

用户看到的屏幕

示例4
{
  "context": {
    "properties": [

    ]
  },
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": "scene-id-001"
              },
              "elements": [
                {
                  "entity": {
                    "type": "AMAZON.VideoObject",
                    "name": {
                      "value": "The Marvelous Mrs. Maisel"
                    },
                    "externalIds": {
                      "entityId": "video-001"
                    }
                  },
                  "elementId": "element-010",
                  "uiSupportedActions": [
                    "SELECT"
                  ],
                  "elements": [
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "立即使用Prime观看"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-001"
                        }
                      },
                      "elementId": "element-011",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "季节和剧集"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-002"
                        }
                      },
                      "elementId": "element-012",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "添加到观看列表"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-003"
                        }
                      },
                      "elementId": "element-013",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                      "type": "AMAZON.Thing",
                      "name": {
                        "value": "更多观看方式"
                    },
                      "externalIds": {
                        "entityId": "webPageButton-003"
                      }
                    },
                    "elementId": "element-013",
                    "uiSupportedActions": [
                      "SELECT"
                    ]
                   },                    
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "客户也观看了"
                        },
                        "externalIds": {
                          "entityId": "webPageButton-004"
                        }
                      },
                      "elementId": "element-014",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                  ]
                }
              ]
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          },
          {
            "namespace": "Alexa.UIController",
            "name": "focusedUIElement",
            "value": {
              "scene": {
                "sceneId": "scene-id-001"
              },
              "element": {
                "entity": {
                  "type": "AMAZON.Thing",
                  "name": {
                    "value": "立即使用Prime观看"
                  },
                  "externalIds": {
                    "entityId": "webPageButton-003"
                  }
                },
                "elementId": "element-013",
                "uiSupportedActions": [
                  "SELECT"
                ]
              }
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  }
}

客户表述: “Alexa, play this”(Alexa,播放此项)

{
    "directive": {
        "header": {
            "name": "SearchAndPlay",
            "namespace": "Alexa.RemoteVideoPlayer"
        },
        "endpoint": {
            "scope": {
                "type": "AMAZON.BearerToken",
                "token": "access-token-from-Amazon"
            },
            "endpointId": "endpoint-001"
        },
        "payload": {
            "entities": [
                {
                    "externalIds": {
                        "entityId": "video-001"
                    },
                    "value": "The Marvelous Mrs. Maisel",
                    "type": "Video"
                }
            ]
        }
    }
}

屏幕选择示例

一些应用可以通过抓取用户界面或通过无障碍功能框架来读取屏幕上的内容。这些应用可以在不完全理解呈现的内容的情况下读取屏幕上的内容文本,并提供屏幕上的简单选择功能。

这些应用还可以使用向Alexa网关终端节点发送的发送状态用户界面报告,向Alexa报告屏幕上的信息。UIController接口包括一般实体类型AMAZON.Thing,该类型由屏幕阅读器应用用来报告屏幕上的文本数据,所采用的格式与某些更高级的应用使用的格式相同。以下是简单的用户界面状态报告和交互。

用户看到的屏幕

示例5
{
  "context": {
    "properties": []
  },
  "event": {
    "header": {
      "messageId": "abc-123-def-456",
      "namespace": "Alexa",
      "name": "ChangeReport",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "avl-endpoint-id-001"
    },
    "payload": {
      "change": {
        "cause": {
          "type": "PHYSICAL_INTERACTION"
        },
        "properties": [
          {
            "namespace": "Alexa.UIController",
            "name": "uiElements",
            "value": {
              "scene": {
                "sceneId": "scene-id-004"
              },
              "elements": [
                {
                  "entity": {
                    "type": "AMAZON.Thing"
                  },
                  "elementId": "uiNode-000",
                  "uiSupportedActions": [
                    "SCROLL_FORWARD",
                    "SCROLL_DOWN"
                  ],
                  "elements": [
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Home"
                        }
                      },
                      "elementId": "uiNode-001",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Shows"
                        }
                      },
                      "elementId": "uiNode-002",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "IMDB FREEDIVE MOVIES AND TV-FREE WITH ADS"
                        }
                      },
                      "elementId": "uiNode-010",
                      "uiSupportedActions": []
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Captain Fantastic"
                        }
                      },
                      "elementId": "uiNode-011",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Fringe"
                        }
                      },
                      "elementId": "uiNode-012",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Drive"
                        }
                      },
                      "elementId": "uiNode-013",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Forte"
                        }
                      },
                      "elementId": "uiNode-014",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                    {
                      "entity": {
                        "type": "AMAZON.Thing",
                        "name": {
                          "value": "Padington"
                        }
                      },
                      "elementId": "uiNode-015",
                      "uiSupportedActions": [
                        "SELECT"
                      ]
                    },
                  ]
                }
              ]
            },
            "timeOfSample": "2017-02-03T16:20:50.52Z",
            "uncertaintyInMilliseconds": 0
          }
        ]
      }
    }
  }
}

客户表述: “Alexa, select captain fantastic”(Alexa,选择captain fantastic)

{
  "directive": {
    "header": {
      "namespace": "Alexa.UIController",
      "name": "ActionOnUIElement"
    },
    "endpoint": {
      "scope": {
        "type": "AMAZON.BearerToken",
        "token": "access-token-from-Amazon"
      },
      "endpointId": "endpoint-001"
    },
    "payload": {
      "scene": {
        "sceneId": "scene-id-004"
      },
      "action": "SELECT",
      "element": {
        "entity": {
          "type": "AMAZON.Thing",
          "name": {
            "value": "Captain Fantastic"
          }
        },
        "elementId": "uiNode-011",
        "uiSupportedActions": [
          "SELECT"
        ]
      }
    }
  }
}

示例应用集成

您可以在云端示例应用中找到UIController的集成示例。示例应用包含Lambda代码,该代码演示如何使用UIControllerDiscover指令声明支持,以及如何处理UIController发送的ActionOnUIElement指令。

下面各部分包含示例应用中用户界面控制器API的详细用例。您无需实现下面的任何类或方法即可测试示例应用。下面的代码片段向您展示应在何处实现以及应如何使用所需的方法。您需要在应用代码中使用自己的逻辑。

要使用示例应用进行测试,请更改任何屏幕的用户界面内容,并使用Alexa测试以新用户界面内容为目标的语音。

MainFragment类

MainFragment类与示例应用的主屏幕相关联。示例应用会报告此页面上的内容以及当前聚焦元素。

public class MainFragment extends BrowseFragment implements MainActivity.UIElementAction, MainActivity.MediaDetailsAction {
    public static final String HOME_BROWSER_SCENE_IDENTIFIER = "home-browser-scene-000";

    private static final String TAG = "MainFragment";

    private static final int BACKGROUND_UPDATE_DELAY = 300;
    private static final int NUM_ROWS = 2;
    private static final int NUM_COLS = 4;

    private final Handler mHandler = new Handler();
    private Drawable mDefaultBackground;
    private DisplayMetrics mMetrics;
    private Timer mBackgroundTimer;
    private String mBackgroundUri;
    private BackgroundManager mBackgroundManager;

要查看聚焦内容以及向Alexa报告的当前用户界面状态,请在终端中运行adb(Android调试桥)命令

adb logcat | grep MainFragment -i

每当客户在此屏幕上做出选择时,示例应用都会向Alexa报告此屏幕的用户界面状态。

private void reportCurrentUIState(final Object selectedItem) {
    final ArrayObjectAdapter rowsAdapter = (ArrayObjectAdapter) getAdapter();
    final List<ElementWithChildren> elements = getUIElements(rowsAdapter);

    final Movie currentMovieSelected = (Movie) selectedItem;
    final Element focusedElement = getUIElement(currentMovieSelected);

    Log.d(TAG, MessageFormat.format("Focused movie element id is {0}", focusedElement.getElementId()));

    final Scene scene = new Scene.Builder().withSceneId(HOME_BROWSER_SCENE_IDENTIFIER).build();
    final UIElements uiElements = new UIElements.Builder().withScene(scene).withElements(elements).build();
    final FocusedUIElement focusedUIElement = new FocusedUIElement.Builder().withScene(scene).withElement(focusedElement).build();

    final Map<String, String> currentUIStateJSON = getUIStateJSON(uiElements, focusedUIElement);

    Log.d(TAG, MessageFormat.format("Reporting home screen UI State to Alexa: {0}", currentUIStateJSON));
    AlexaClientManager.getSharedInstance().setUIState(currentUIStateJSON);
    Log.i(TAG, "Finished reporting home screen UI State to Alexa.");
}

VideoDetailsFragment

在示例应用中,VideoDetailsFragment类与特定的Movie对象相关联。该类提供所有Movie详细信息,例如预告片、购买选项和电影描述。

public class VideoDetailsFragment extends DetailsFragment implements DetailsActivity.UIElementAction, DetailsActivity.MediaDetailsAction {
    public static final String VIDEO_DETAIL_SCENE_IDENTIFIER = "video-detail-scene-001";

    private static final String TAG = "VideoDetailsFragment";

    private static final int ACTION_WATCH_TRAILER = 1;
    private static final int ACTION_RENT = 2;
    private static final int ACTION_BUY = 3;

    private static final int DETAIL_THUMB_WIDTH = 274;
    private static final int DETAIL_THUMB_HEIGHT = 274;

    private static final int NUM_COLS = 4;

    private Movie mSelectedMovie;

    private ArrayObjectAdapter mAdapter;
    private ClassPresenterSelector mPresenterSelector;

    private DetailsFragmentBackgroundController mDetailsBackground;

要查看聚焦内容以及向Alexa报告的当前用户界面状态,请在终端中运行adb(Android调试桥)命令。

adb logcat | grep VideoDetailsFragment -i

每当客户在此屏幕上做出选择时,示例应用都会向Alexa报告此屏幕的用户界面状态。

private void reportCurrentUIState(final Object selectedItem) {
    final ArrayObjectAdapter rowsAdapter = (ArrayObjectAdapter) getAdapter();
    final List<ElementWithChildren> elements = getUIElements(rowsAdapter);

    final Movie currentMovieSelected = (Movie) selectedItem;
    final Element focusedElement = getUIElement(currentMovieSelected);

    Log.d(TAG, MessageFormat.format("Focused movie element id is {0}", focusedElement.getElementId()));

    final Scene scene = new Scene.Builder().withSceneId(HOME_BROWSER_SCENE_IDENTIFIER).build();
    final UIElements uiElements = new UIElements.Builder().withScene(scene).withElements(elements).build();
    final FocusedUIElement focusedUIElement = new FocusedUIElement.Builder().withScene(scene).withElement(focusedElement).build();

    final Map<String, String> currentUIStateJSON = getUIStateJSON(uiElements, focusedUIElement);

    Log.d(TAG, MessageFormat.format("Reporting home screen UI State to Alexa: {0}", currentUIStateJSON));
    AlexaClientManager.getSharedInstance().setUIState(currentUIStateJSON);
    Log.i(TAG, "Finished reporting home screen UI State to Alexa.");
}

用户界面状态报告

示例应用使用多个类来生成用户界面状态事件有效负载:

  • Element
  • ElementWithChildren
  • Entity
  • EntityType
  • EntityName
  • Scene
  • UIAction
  • FocusedUIElement
  • UIElement

您可以使用这些类及其中的方法,通过您的逻辑生成用户界面状态负载。例如,Element类定义屏幕上的每个用户界面元素。示例应用在下面的代码片段中定义了这种行为:

package com.amazon.alexauicontroller;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
 
/**
 *表示在用户界面上呈现的用户界面元素
 */
public class Element {
 
    /**
     *场景中此元素的唯一ID
     */
    private String elementId;
 
    /**
     *描述此元素的内容
     */
    private Entity entity;
 
    /**
     *可用于所用语言的选择的元素编号。
     */
    private Integer ordinal;
 
    /**
     *用户可以对此元素执行的用户界面操作的列表
     */
    private List<UIAction> uiSupportedActions;
 
    protected Element() {}
 
    protected Element(final String elementId, final Entity entity, final Integer ordinal,
                   final List<UIAction> uiSupportedActions) {
        this.elementId = elementId;
        this.entity = entity;
        this.ordinal = ordinal;
        this.uiSupportedActions = uiSupportedActions;
    }
 
    /**
     * @返回此元素的ID
     */
    public String getElementId() {
        return elementId;
    }
 
    /**
     * @返回描述此元素的{@link Entity}
     */
    public Entity getEntity() {
        return entity;
    }
 
    /**
     * @返回此元素的编号
     */
    public Integer getOrdinal() {
        return ordinal;
    }
 
    /**
     * @返回用户可以在此元素上使用的{@link UIAction}的列表
     */
    public List<UIAction> getUiSupportedActions() {
        return uiSupportedActions;
    }
 
    /**
     *设置元素的标识符
     * @param elementId - 要设置的元素ID
     */
    public void setElementId(final String elementId) {
        this.elementId = elementId;
    }
 
    /**
     *设置元素的实体
     * @param entity - 要设置的{@link Entity}
     */
    public void setEntity(final Entity entity) {
        this.entity = entity;
    }
 
    /**
     *设置元素编号
     * @param ordinal - 要设置的元素编号
     */
    public void setOrdinal(final Integer ordinal) {
        this.ordinal = ordinal;
    }
 
    /**
     *设置元素的用户界面操作。此操作将替换现有的用户界面操作(如果已存在)列表
     * @param uiSupportedActions - 要设置的{@link UIAction}的列表
     */
    public void setUiSupportedActions(final List<UIAction> uiSupportedActions) {
        this.uiSupportedActions = uiSupportedActions;
    }

UIElementUtil类

UIElementUtil类是一个实用工具类,用于构建生成用户界面状态事件有效负载所需的所有用户界面元素。

public class UIElementUtil {
    private static final String TAG = "UIElementUtil";

    public static final String EXTERNAL_ID_KEY = "entityId";
    public static final String EXTERNAL_ID_VALUE_PREFIX_FOR_ACTION = "webPageButton-";
    public static final String EXTERNAL_ID_VALUE_PREFIX_FOR_MOVIE = "video-";
    public static final String EXTERNAL_ID_VALUE_PREFIX_FOR_LIST_ROW = "videos-row-";
    public static final String ELEMENT_ID_PREFIX = "element-";
    public static final String ELEMENT_ID_PREFIX_FOR_ACTION = "action-";
    public static final String ELEMENT_ID_PREFIX_FOR_MOVIE = "movie-";
    public static final String ELEMENT_ID_PREFIX_FOR_VIDEO_DETAIL = "details-";
    public static final String ELEMENT_ID_PREFIX_FOR_LIST_ROW = "list-row-";
    public static final String UI_ELEMENTS_EVENT_KEY = "uiElements";
    public static final String FOCUSED_UI_ELEMENT_EVENT_KEY = "focusedUIElement";

onMessage方法

示例应用通过Lambda接收来自Alexa的指令。在onMessage方法中,该指令名为ActionOnUIElement

protected void onMessage(final Intent intent) {
    Log.d(TAG, MessageFormat.format("Recieved a message from ADM: {0}", intent.toString()));
    
    //...
    
     else if ("ActionOnUIElement".equals(directiveName)) {

                if (jsonTree.isJsonObject()) {
                    final JsonObject jsonObject = jsonTree.getAsJsonObject();

                    final JsonObject jDirective = jsonObject.get("directive").getAsJsonObject();
                    final JsonElement jPayload = jDirective.get("payload");

                    if (jPayload != null && jPayload.isJsonObject()) {
                        final String jPayloadString = jPayload.getAsJsonObject().toString();

                        final ActionOnUIElement actionOnUIElement = gson.fromJson(jPayloadString, ActionOnUIElement.class);
                        Log.d(TAG, MessageFormat.format("The ActionOnUIElement directive is {0}", actionOnUIElement));

                        final boolean isActionOnUIElementValid = validateActionOnUIElementDirective(actionOnUIElement);
                        if (!isActionOnUIElementValid) {
                            Log.d(TAG, "The received ActionOnUIElement directive is invalid.Cannot process it.");
                            return;
                        }

                        final Intent actionOnUIElementIntent = new Intent();
                        actionOnUIElementIntent.setAction(ACTION_ON_UI_ELEMENT);
                        final String packageName = FireTVApp.getInstance().getPackageName();
                        actionOnUIElementIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

                        actionOnUIElementIntent.putExtra(EXTRA_UI_CONTROLLER_ELEMENT_ID, actionOnUIElement.getElement().getElementId());
                        actionOnUIElementIntent.putExtra(EXTRA_UI_CONTROLLER_ELEMENT_TYPE, actionOnUIElement.getElement().getEntity().getType());
                        actionOnUIElementIntent.putExtra(EXTRA_UI_CONTROLLER_ACTION, actionOnUIElement.getAction());

                        final Scene scene = actionOnUIElement.getScene();
                        if (scene.getSceneId().equals(HOME_BROWSER_SCENE_IDENTIFIER)) {
                            Log.d(TAG, MessageFormat.format("Setting the destination of actionOnUIElement intent to Home Screen: {0}",
                                    MainActivity.class.getName()));
                            actionOnUIElementIntent.setClassName(packageName, MainActivity.class.getName());
                        } else if (scene.getSceneId().equals(VIDEO_DETAIL_SCENE_IDENTIFIER)) {
                            Log.d(TAG, MessageFormat.format("Setting the destination of actionOnUIElement intent to Detail Screen: {0}",
                                    DetailsActivity.class.getName()));
                            actionOnUIElementIntent.setClassName(packageName, DetailsActivity.class.getName());
                        } else {
                            Log.e(TAG, MessageFormat.format("Unknown scene id {0}.Cannot process ActionOnUIElement directive", scene.getSceneId()));
                            return;
                        }
                        Log.d(TAG, MessageFormat.format("Sending the actionOnUIElement intent: {0}", actionOnUIElementIntent));
                        FireTVApp.getInstance().startActivity(actionOnUIElementIntent);
                        Log.d(TAG, "Finished processing the UIController directive");
                    }
                } else {
                    // 无效消息JSON
                    Log.e(TAG, "Invalid message JSON");
                }
       //...

MediaDetailsNavigator

如果您已实现UIController,可以考虑同时实现MediaDetailsNavigator,因为此接口以您已经发送的相同用户界面状态报告为基础构建,从而也包括对诸如“Show more details about video title”(显示有关 [视频标题] 的更多详细信息)之类表述的支持。


Last updated: 2021年3月29日