Cortana 设计指南
警告
自 Windows 10 2020 年 5 月更新(版本 2004,codename“20H1”)起,不再支持此功能。
这些准则和建议介绍应用如何以最佳方式使用 Cortana 与用户交互、帮助他们完成任务以及清楚地传达这一切如何发生。
Cortana 允许在后台运行的应用程序提示用户确认或消除歧义,并向用户提供有关语音命令状态的反馈作为回报。 此过程是轻量级、快速的,不会强制用户离开 Cortana 体验或将上下文切换到应用程序。
虽然用户应该觉得 Cortana 有助于使过程尽可能轻松,但你可能希望 Cortana 也明确表示,由应用完成任务。
我们使用集成到 Cortana UI 中的名为 Adventure Works 应用的旅行计划和管理应用来演示我们讨论的许多概念和功能。 有关详细信息,请参阅 Cortana 语音命令示例。
对话编写
成功的 Cortana 交互要求你在创建文本到语音转换 (TTS) 和 GUI 字符串时遵循一些基本原则。
原则 | 糟糕的示例 | 良好的示例 |
---|---|---|
|
当然可以,今天要搜索什么电影? 我们有一个大型集合。 |
当然,你要看什么电影? |
|
我已将其添加到播放列表。 正如你所知,你的电池电量正在降低。 |
我已将其添加到播放列表。 |
|
查询“到拉斯维加斯的行程”没有结果。 |
我找不到任何前往拉斯维加斯的旅行。 |
|
我找不到那部电影,它一定还没有上映。 |
我在目录中找不到那部电影。 |
编写人们说话的方式。 不要强调语法准确性与听起来自然。 例如,容易听懂的口语便捷表达(如“wanna”或“gotta”)十分适合于供 TTS 读出。
尽可能自然地使用隐含的第一人称时态。 例如,“查找你的下一次 Adventure Works 行程”表示有人在进行查找,但未使用“我”一词进行指定。
使用某种变体有助于使应用听起来更加自然。 提供 TTS 和 GUI 字符串的不同版本,以有效地表达相同的内容。 例如,“你想看什么电影?”可能有一些替代项,例如“你要观看哪部电影?”。 人们每次都不用完全相同的方式说同样的话。 只需确保使 TTS 和 GUI 版本保持同步。
灵活地在响应中使用“好的”和“没问题”之类的短语。 虽然它们可以提供确认和进展感,但如果使用太频繁且没有变化,它们也可能会重复。
注意
仅在 TTS 中使用确认短语。 由于 Cortana 画布上的空间有限,请勿在对应 GUI 字符串中重复这些它们。
在响应中使用缩略词,以进行更自然的交互,并在 Cortana 画布上节省额外空间。 例如,“我找不到该电影”,而不是“我找不到该电影”。 编写内容是为了听,而不是为了看。
使用系统可理解的语言。 用户往往会重复向他们展示的措辞。 需了解你显示的内容。
通过从备用响应集合进行轮换或随机选择,在响应中使用某种变体。 例如,“你想看什么电影?”和“你要观看哪部电影?”。 这会使你的应用程序听起来更加自然且独特。
本地化
若要使用语音命令启动操作,应用必须以用户在其设备上选择的语言(“设置”>“系统”>“语音”>“语音语言”)注册语音命令。
你应对应用进行响应的语音命令以及所有 TTS 和 GUI 字符串进行本地化。
应避免冗长的 GUI 字符串。 Cortana 画布提供三行用于响应,会截断超过该长度的字符串。
有关详细信息,请参阅全球化和本地化部分。
图像资源和缩放
通用 Windows 平台 (UWP) 应用可基于特定设置和设备功能(高对比度、有效像素、区域设置等)自动选择最适合的应用徽标图像。 你只需提供图像并确保在应用项目中为不同的资源版本使用适当的命名约定和文件夹组织。 如果未提供建议的资源版本,则辅助功能、本地化和图像质量可能因用户的偏好、能力、设备类型和位置而异。
有关图像资源的高对比度和缩放因子的更多详细信息,请参阅磁贴和图标资产指导原则。
使用限定符命名资源。 资源限定符是文件夹和文件名修饰符,用于标识应使用特定版本资源的上下文。
标准命名约定为“文件夹名称/限定符名称-值[_qualifiername-value]/文件名.限定符名称-值[_qualifiername-value].ext”。 例如:images/logo.scale-100_contrast-white.png 只使用根文件夹和文件名在代码中进行引用:images/logo.png。 请参阅管理语言和区域和如何使用限定符命名资源。
我们建议你在字符串资源文件(例如“en-US\resources.resw”)上标记默认语言,在图像上标记默认比例因子(例如“logo.scale-100.png”),即使你当前不打算提供本地化或多分辨率资源。 但是,我们建议至少提供 100、200 和 400 比例因子的资产。
重要
Cortana 画布标题区域中使用的应用图标是“Package.appxmanifest”文件中指定的 Square44x44Logo 图标。
还可以为用户查询的每个结果磁贴指定图标。 结果图标的有效图像大小为:
- 68w x 68h
- 68w x 92h
- 280w x 140h
结果磁贴模板
为 Cortana 画布上显示的结果磁贴提供了一组模板。 使用这些模板可指定磁贴标题以及磁贴是否包含文本和结果图标图像。 根据指定的模板,每个磁贴最多可包含三行文本和一个图像。
以下是支持的模板(以及示例):
名称 | 示例 |
---|---|
仅标题 | |
带有文本的标题 | |
带有 68x68 图标的标题 | 无图像 |
带有 68x68 图标和文本的标题 | |
带有 68x92 图标的标题 | 无图像 |
带有 68x92 图标和文本的标题 | |
带有 280x140 图标的标题 | 无图像 |
带有 280x140 图标和文本的标题 |
有关 Cortana 模板的详细信息,请参阅 VoiceCommandContentTileType。
示例
此示例演示了 Cortana 中后台应用的端到端任务流。 我们在使用 Adventure Works 应用取消到拉斯维加斯的行程。 此示例使用“带有 68x68 图标和文本的标题”模板。
下面是此图中概述的步骤:
- 用户点击麦克风以启动 Cortana。
- 用户说出“Cancel my Adventure Works trip to Vegas”以在后台启动 Adventure Works 应用。 应用使用 Cortana 语音和画布与用户交互。
- Cortana 转换到移交屏幕,该屏幕提供用户确认反馈(“I'll get Adventure Works on that.”)、状态栏和取消按钮。
- 在这种情况下,用户有多个与查询匹配的行程,因此应用提供了一个消除歧义屏幕,其中列出了所有匹配结果,并询问“你想要取消哪一个?”
- 用户指定“Vegas Tech Conference”项。
- 由于取消操作无法撤消,因此应用会提供确认屏幕,要求用户确认其意图。
- 用户说出“Yes”。
- 应用随后提供完成屏幕,其中显示操作的结果。
我们会在此处更详细地探讨这些步骤。
Handoff
AdventureWorks “即将推出的旅行” 没有切换屏幕
AdventureWorks“即将到来的旅行”与转接屏幕
应用响应时间少于 500 毫秒且不需要用户提供任何额外信息的任务可在无需 Cortana 进一步参与(除了显示完成情况)的情况下完成。
如果应用程序需要 500 毫秒以上的响应时间,则 Cortana 会提供移交屏幕。 应用图标和名称会进行显示,你必须提供 GUI 和 TTS 移交字符串,以指示已正确理解语音命令。 移交屏幕最多显示 5 秒;如果应用在这段时间内未响应,则 Cortana 会显示一般性错误屏幕。
移交屏幕的 GUI 和 TTS 准则
明确指出任务正在进行中。
使用现在时时态。
使用用于确认所启动的任务并引用特定实体的操作谓词。
使用不会提交到请求的不完整操作的一般谓词。 例如,“Looking for your trip”而不是“Canceling your trip”。 在此例中,如果未返回任何结果,则用户不会听到“Cancelling your trip to Las Vegas… 我找不到拉斯维加斯之旅”。
请注意,如果应用仍需要解析请求的实体,则尚未执行该任务。 例如,请注意我们如何说“查找您的行程”而不是“取消您的行程”,因为零个或多个行程可以匹配,并且我们还不知道结果。
GUI 和 TTS 字符串可以相同,但不需要。 尝试缩短 GUI 字符串,以避免截断和重复其他视觉资产。
TTS | GUI |
---|---|
Looking for your next Adventure Works trip. | Looking for your next trip… |
Searching for your Adventure Works trip to Falls City. | Searching for trip to Falls City... |
进度
AdventureWorks “取消行程”进度
当任务在步骤之间执行一段时间时,你的应用需要单步执行并更新用户在进度屏幕上发生的情况。 应用图标会进行显示,你必须提供 GUI 和 TTS 进度字符串来指示任务正在进行。
应提供指向应用的链接,其中包含用于在适当状态下启动应用的启动参数。 这使用户可以自己查看或完成任务。 Cortana 会提供链接文本(例如“Go to Adventure Works”)。
进度屏幕会显示 5 秒,之后必须接着显示另一个屏幕,否则任务会超时。
以下屏幕可以跟在进度屏幕后面:
- 进度
- 确认(显式,后面会进行介绍)
- 消除歧义
- 完成
进度屏幕的 GUI 和 TTS 准则
使用现在时时态。
使用确认任务正在进行的操作谓词。
GUI:如果显示实体,请使用对它的引用(“Cancelling this trip…”);如果未显示任何实体,请明确指出实体(“Cancelling 'Vegas Tech Conference'”)。
TTS:在第一个进度屏幕上只应包含一个 TTS 字符串。 如果需要进一步的进度屏幕,请发送空字符串 {} 作为 TTS 字符串,并且仅提供一个 GUI 字符串。
条件 | TTS | GUI |
---|---|---|
ENTITY READ ON PRIOR TURN / ENTITY SHOWN ON DISPLAY | Cancelling this trip… | Cancelling this trip… |
ENTITY NOT READ ON PRIOR TURN / ENTITY SHOWN ON DISPLAY | Cancelling your trip to Vegas… | Cancelling this trip… |
ENTITY NOT READ ON PRIOR TURN / ENTITY NOT SHOWN | Cancelling your trip to Vegas… | Cancelling your trip to Vegas… |
确认
AdventureWorks “取消行程” 确认
某些任务可以通过用户命令的性质隐式确认;其他人可能更敏感,需要显式确认。 下面是有关何时使用显式与隐式确认的一些准则。
确认屏幕上的 GUI 和 TTS 字符串都由你的应用指定,并且会显示应用图标(如果提供),而不是 Cortana 头像。
客户响应确认后,应用程序必须在 500 毫秒内提供下一个屏幕,以避免进入进度屏幕。
在以下情况使用显式确认...
- 内容将离开用户(例如文本消息、电子邮件或社交文章)
- 无法撤消操作(例如,购买或删除某些内容)
- 结果可能是令人尴尬(例如打错电话)
- 需要更复杂的识别(例如,开放式听录)
在以下情况使用隐式确认...
- 只为用户保存内容(例如自我备注)
- 有一种简单的退路方法(例如,打开或关闭警报)
- 任务需要快速进行(例如在忘记之前快速捕捉想法)
- 准确性较高(例如简单菜单)
确认屏幕的 GUI 和 TTS 准则
使用现在时时态。
向用户询问可以使用“是”或“否”来回答的明确问题。 问题应显式确认用户在尝试执行的操作,不应有其他明显选项。
如果第一次未理解语音命令,请提供问题的变体以重新提示。
GUI:如果显示实体,请使用对它的引用。 如果未显示任何实体,则明确指出实体。
TTS:为了清晰起见,请始终引用特定项或实体,除非它在上一轮时由系统读出。
条件 | TTS | GUI |
---|---|---|
ENTITY NOT READ ON PRIOR TURN / ENTITY SHOWN ON DISPLAY | Do you wanna cancel Vegas Tech Conference? | Cancel this trip? |
ENTITY NOT READ ON PRIOR TURN / ENTITY NOT SHOWN | Do you wanna cancel Vegas Tech Conference? | Cancel Vegas Tech Conference? |
ENTITY READ ON PRIOR TURN / ENTITY NOT SHOWN | Do you wanna cancel this trip? | Cancel this trip? |
REPROMPT WITH ENTITY SHOWN | Did you wanna cancel this trip? | Did you want to cancel this trip? |
REPROMPT WITH ENTITY NOT SHOWN | Did you wanna cancel this trip? | Did you want to cancel Vegas Tech Conference? |
消除歧义
AdventureWorks “取消行程” 消除歧义
某些任务可能要求用户从实体列表中选择以完成任务。
消除歧义屏幕上的 GUI 和 TTS 字符串都由你的应用指定,并且会显示应用图标(如果提供),而不是 Cortana 头像。
客户响应消除歧义问题后,应用程序必须在 500 毫秒内提供下一个屏幕,以避免进入进度屏幕。
消除歧义屏幕的 GUI 和 TTS 准则
使用现在时时态。
向用户询问可以使用所显示的任何实体的标题或文本行来回答的明确问题。
最多可显示 10 个实体。
每个实体都应具有唯一的标题。
如果第一次未理解语音命令,请提供问题的变体以重新提示。
TTS:为了清晰起见,请始终引用特定项或实体,除非它在上一轮时已读出。
TTS:请勿读出实体列表,除非实体为三个或更少,并且较短。
条件 | TTS | GUI |
---|---|---|
PROMPT - 3 OR FEWER ITEMS | Which Vegas trip do you wanna cancel? Vegas Tech Conference or Party in Vegas? | Which one do you want to cancel? |
PROMPT - MORE THAN 3 ITEMS | Which Vegas trip do you wanna cancel? | Which one do you want to cancel? |
REPROMPT | Which Vegas trip did you wanna cancel? | Which one do you want to cancel? |
完成
AdventureWorks “取消行程” 完成
成功完成任务后,应用应向用户告知已成功完成请求的任务。
完成屏幕上的 GUI 和 TTS 字符串都由你的应用指定,并且会显示应用图标(如果提供),而不是 Cortana 头像。
应提供指向应用的链接,其中包含用于在适当状态下启动应用的启动参数。 这使用户可以自己查看或完成任务。 Cortana 会提供链接文本(例如“Go to Adventure Works”)。
完成屏幕的 GUI 和 TTS 准则
使用过去时时态。
使用操作谓词以显式声明任务已完成。
如果显示实体,或在上一轮时进行了引用,则只引用它。
条件 | TTS | GUI |
---|---|---|
ENTITY SHOWN / ENTITY READ ON PRIOR TURN | 我取消了这次旅行。 | Cancelled this trip. |
ENTITY NOT SHOWN / ENTITY NOT READ ON PRIOR TURN | 我已经取消了你的拉斯维加斯技术会议之旅。 | Cancelled "Vegas Tech Conference." |
错误
AdventureWorks “取消行程”错误
发生以下错误之一时,Cortana 会显示相同的一般性错误消息。
- 应用服务意外终止。
- Cortana 无法与应用服务通信。
- 应用在 Cortana 显示移交屏幕或进度屏幕 5 秒后未能提供屏幕。