Alexa.UIController接口 (VSK Fire TV)
UIController
接口会考虑应用的用户界面状态,以便更智能地响应用户请求。要使用UIController
接口,您需要向Alexa发送您的用户界面状态,列出页面上的所有元素和聚焦元素。然后,这些详细信息将包含在Alexa发送至您的Lambda的指令中。
如果您要实现UIController
,也可以考虑实现MediaDetailsNavigator
,这是另一个Alexa接口,它使用用户界面状态报告为“show more details about video title”(显示有关 [视频标题] 的更多详细信息)请求提供指令。
UIController
接口仅支持云端集成。- 详细解释
- UIController与KeypadController
- 支持的表述
- 发送用户界面状态报告
- 数据结构
- 有效负载定义
- ActionOnUIElement指令示例
- 用户界面状态报告和UIController指令示例
- 示例应用集成
- MediaDetailsNavigator
详细解释
为了使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发送指令。
RemoteVideoPlayer: SearchAndPlay
等。也就是说,UIController
接口并不总是发送ActionOnUIElement
指令。有时它会根据需要发送其他指令,例如RemoteVideoPlayer: SearchAndPlay
。因此,下面支持的表述部分还包括SearchAndPlay指令的表述。总体而言,UIController
接口允许客户以更丰富的方式在您应用的用户界面中使用语音进行交互,例如通过语音选择他们的个人资料或通过语音在屏幕上选择特定项目。
UIController与KeypadController
UIController
与KeypadController
的不同之处在于,UIController
会考虑您的用户界面状态,并在其发送的指令中包含来自用户界面状态的详细信息。相比之下,KeypadController
是无状态的,不会接收有关应用用户界面的任何具体详细信息。因此,UIController
在它所能支持的表述类型中要强大得多。
您可以将KeypadController
和UIController
一起使用。每当用户界面状态可用时,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”(观看预告片)等。
-
您可以导航到任何用户界面位置,例如最近观看的内容、观看列表、推荐的视频。
-
您可以响应对话框屏幕并选择一个选项,无需使用遥控器。
MediaDetailsNavigator
的接口。有关多个区域设置中表述的具体示例,请参阅以下列表。这些表述包括KeypadController
和RemoteVideoPlayer: 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
参数是用户界面属性的映射,代表屏幕上显示的元素。代表要设置的属性名称(即uiElements
、focusedUIElement
)的键字符串与值字符串(与该属性相关的值键的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
中的发送用户界面状态报告部分。有关状态报告和授权的更多信息,请参阅以下内容:
步骤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
(context
和properties
对象不用于Fire TV实现。context
对象将仅包含来自其他Alexa组件(例如Alexa.PowerState
)的更新。如果触发更改报告事件时没有来自其他组件的状态更新,则将此项留空。)
数据结构
该部分介绍上述状态报告架构的数据结构。这些树形图与之前的架构类似,但在此处配对以显示用户界面状态报告的uiElements
和focusedUIElement
部分所需的架构。
uiElements
与focusedUIElements
的架构
properties
数组有两个主要对象:一个具有的namespace
为uiElements
,另一个具有的namespace
为focusedUIElement
。它们的架构略有不同:
uiElements
列出了屏幕上的所有元素;该部分使用elements
数组(复数),还包含一个名称类似的称为elements
的嵌套数组,您可以在其中提供子元素的可选列表。focusedUIElement
列出了聚焦元素;该部分使用element
对象(单数)。
以下选项卡显示了uiElements
和focusedUIElement
列表的不同架构。
├── 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
有效负载定义
下表定义了您发送的用户界面状态报告的有效负载。请注意,在uiElements
和focusedUIElement
部分中重复的元素(例如uiSupportedActions
)具有相同的定义。
字段 | 描述 | 数据类型 |
---|---|---|
change 必需 |
包含有关状态变化的详细信息。 | 对象 |
cause 必需 |
提供状态变化的原因。
|
对象 |
type 必需 |
状态变化的类型。对于Fire TV实现,允许有一个选项: AMAZON.PHYSICAL_INTERACTION 。
|
枚举 |
properties 可选 |
包含有关状态更改的详细信息。properties 元素包含与uiElements (元素列表)和focusedUIElement 对象相关的状态更改的详细信息。
|
数组 |
namespace 必需 |
有效负载的命名空间。对于Fire TV实现,允许有一个选项: Alexa.UIController 。
|
字符串 |
name 必需 |
有效负载的接口的名称。允许有两个选项:uiElement 和focusedUIElement 。如果您提供元素列表,可使用uiElement 。相比之下,如果您要包括聚焦元素,可使用focusedUIElement 。有关详细信息和上下文,请参阅用户界面状态报告示例。
示例: |
字符串 |
value 可选 |
包含描述客户屏幕上元素的scene 对象。
|
对象 |
scene 必需 |
包括一个sceneId 属性,该属性包含有关客户用户界面上显示的场景的信息。
|
对象 |
sceneId 必需 |
在客户的用户界面上呈现的场景的ID。
示例: |
字符串 |
elements 可选 |
在此场景中呈现的用户界面元素列表。仅用于uiElements 状态报告。
|
数组 |
element 必需 |
在此场景上具有视觉焦点的元素。仅用于focusedUIElement 状态报告。
|
List<Element> |
entity 必需 |
描述此元素的Thing(一般对象)。
|
对象 |
type 必需 |
此实体的类型。有关详细信息,请参阅Enum<EntityTypes>部分。
示例: |
Enum<EntityTypes> |
name 可选 |
该实体的名称。包含两个可能的属性:value 和variants 。
|
对象 |
value 可选 |
该实体的首选名称。
示例: |
字符串 |
variants 可选 |
用于指代该实体的其他名称。
示例: |
字符串 |
externalIds 可选 |
此实体在此终端节点的范围内唯一的标识符。entity.externalIds 字段对Alexa来说是不透明的,仅用于包含在Alexa所发的指令中。所有接受实体结构的指令命令上的终端节点都需要理解在entity.externalIds 中报告的标识符。
示例: |
Map<String, String> |
elementId 必需 |
该用户界面元素在报告的场景范围内唯一的标识符。elementId 字段对Alexa来说是不透明的,仅用于包含在从Alexa到该终端节点的指令中。终端节点可以使用此字段来包含所需的信息,以便能响应指令命令而在呈现的用户界面上定位此元素。
示例: |
字符串 |
ordinal 可选 |
可用于所用语言的选择的元素编号。例如,如果此值为1,则对于“Alexa select number 1”(Alexa,选择第1项),将选择此元素。
示例: |
整数 |
uiSupportedActions 必需 |
用户可通过UIController 接口对该用户界面元素执行的枚举操作列表。有关枚举选项的详细信息,请参阅Enum<uiSupportedActions>。
示例: |
枚举 |
elements 可选 |
嵌套用户界面元素的可选列表。该元素是uiElements 独有的。
|
List<ElementWithChildren> |
timeOfSample 可选 |
记录属性值的时间。
示例: |
ISO 8601时间 |
uncertaintyInMilliseconds 可选 |
自上次确认属性值以来经过的毫秒数。
示例: |
整数 |
Enum<EntityTypes>
entity
的type
枚举允许有以下选项:
-
AMAZON.VideoObject
: 表示在用户界面上呈现的视频项目的实体类型。该实体是各种类型的视频(例如电影、电视节目、预告片等)的抽象。屏幕示例: -
AMAZON.ItemList
: 表示项目列表的实体类型。该实体可用于表示相同或不同类型的实体的集合。屏幕示例: -
AMAZON.SoftwareApplication
: 代表软件应用的实体类型。屏幕示例: -
AMAZON.Thing
: 表示一般实体的实体类型,其特定类型要么是API集成方未知的,要么在UIController
API规范中未对其进行定义。(请注意,MediaDetailsNavigator
不支持显示有关此实体类型的更多详细信息。) 屏幕示例:
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等)。用户按序号或标题选择内容。
用户看到的屏幕:
{
"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");在这两种情况下,指代对象指的是同一个项目。
用户看到的屏幕:
{
"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
指令。
用户看到的屏幕:
{
"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
指令。
用户看到的屏幕:
{
"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
,该类型由屏幕阅读器应用用来报告屏幕上的文本数据,所采用的格式与某些更高级的应用使用的格式相同。以下是简单的用户界面状态报告和交互。
用户看到的屏幕:
{
"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代码,该代码演示如何使用UIController
的Discover
指令声明支持,以及如何处理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日