Cortana 设计指南

警告

自 Windows 10 2020 年 5 月更新(版本 2004,codename“20H1”)起,不再支持此功能。

请参阅 Microsoft 365 中的 Cortana,了解 Cortana 如何改变现代生产力体验。

这些准则和建议介绍应用如何以最佳方式使用 Cortana 与用户交互、帮助他们完成任务以及清楚地传达这一切如何发生。

Cortana 允许在后台运行的应用程序提示用户确认或消除歧义,并向用户提供有关语音命令状态的反馈作为回报。 该过程是轻型、快速的,不会强制用户留下 Cortana 体验或将上下文切换到应用程序。

虽然用户应该觉得 Cortana 有助于使过程尽可能轻松,但你可能希望 Cortana 也明确表示,由应用完成任务。

我们使用集成到 Cortana UI 中的名为 Adventure Works 应用的旅行计划和管理应用来演示我们讨论的许多概念和功能。 有关详细信息,请参阅 Cortana 语音命令示例

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 画布上显示的结果磁贴提供了一组模板。 使用这些模板可指定磁贴标题以及磁贴是否包含文本和结果图标图像。 根据指定的模板,每个磁贴最多可包含三行文本和一个图像。

以下是支持的模板(以及示例):

名称 示例
仅标题 仅显示标题的 Cortana 画布的屏幕截图
带有文本的标题 显示带文本的标题的 Cortana 画布的屏幕截图
带有 68x68 图标的标题 无图像
带有 68x68 图标和文本的标题 Cortana 画布的屏幕截图,其中显示了带有 68x68 图标和文本的标题
带有 68x92 图标的标题 无图像
带有 68x92 图标和文本的标题 Cortana 画布的屏幕截图,其中显示了带有 68x92 图标和文本的标题
带有 280x140 图标的标题 无图像
带有 280x140 图标和文本的标题 Cortana 画布的屏幕截图,其中显示了带有 280x140 图标和文本的标题

有关 Cortana 模板的详细信息,请参阅 VoiceCommandContentTileType

示例

此示例演示了 Cortana 中后台应用的端到端任务流。 我们在使用 Adventure Works 应用取消到拉斯维加斯的行程。 此示例使用“带有 68x68 图标和文本的标题”模板。

端到端 Cortana 后台应用流的 Cortana 画布的屏幕截图

下面是此图中概述的步骤:

  1. 用户点击麦克风以启动 Cortana。
  2. 用户说出“Cancel my Adventure Works trip to Vegas”以在后台启动 Adventure Works 应用。 应用使用 Cortana 语音和画布与用户交互。
  3. Cortana 转换到移交屏幕,该屏幕提供用户确认反馈(“I'll get Adventure Works on that.”)、状态栏和取消按钮。
  4. 在此例中,用户有多个与查询匹配的行程,因此该应用提供了消除歧义屏幕,其中会列出所有匹配结果并询问“Which one do you wanna cancel?”
  5. 用户指定“Vegas Tech Conference”项。
  6. 由于取消操作无法撤消,因此应用会提供确认屏幕,要求用户确认其意图。
  7. 用户说出“Yes”。
  8. 应用随后提供完成屏幕,其中显示操作的结果。

我们会在此处更详细地探讨这些步骤。

Handoff

Cortana 画布的屏幕截图,用于端到端 Cortana 后台应用流,使用 AdventureWorks 即将开始的行程,没有切换的 AdventureWorks“即将开始的行程”,没有切换屏幕

Cortana 画布的屏幕截图,用于端到端 Cortana 后台应用流,使用 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… I couldn’t find a trip to Las Vegas”这类内容。

如果应用仍需要解析请求的实体,请明确任务尚未执行。 例如,请注意我们会说“Looking for your trip”,而不是“Cancelling your trip”,因为可能会匹配零个或多个行程,我们还不知道结果。

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 取消行程进度的 Cortana 画布的端到端 Cortana 后台应用流的屏幕截图AdventureWorks“取消行程”进度

当任务在步骤之间需要一段时间时,应用需要介入并在进度屏幕上向用户更新所发生的情况。 应用图标会进行显示,你必须提供 GUI 和 TTS 进度字符串来指示任务正在进行。

应提供指向应用的链接,其中包含用于在适当状态下启动应用的启动参数。 这使用户可以自己查看或完成任务。 Cortana 会提供链接文本(例如“Go to Adventure Works”)。

进度屏幕会显示 5 秒,之后必须接着显示另一个屏幕,否则任务会超时。

以下屏幕可以跟在进度屏幕后面:

  • 进度
  • 确认(显式,后面会进行介绍)
  • 消除歧义
  • Completion

进度屏幕的 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 取消行程确认的端到端 Cortana 后台应用流的 Cortana 画布的屏幕截图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 取消行程消除歧义的 Cortana 画布的端到端 Cortana 后台应用流的屏幕截图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?

Completion

使用 AdventureWorks 取消行程完成的 Cortana 画布的端到端 Cortana 后台应用流的屏幕截图AdventureWorks“取消行程”完成

成功完成任务后,应用应向用户告知已成功完成请求的任务。

完成屏幕上的 GUI 和 TTS 字符串都由你的应用指定,并且会显示应用图标(如果提供),而不是 Cortana 头像。

应提供指向应用的链接,其中包含用于在适当状态下启动应用的启动参数。 这使用户可以自己查看或完成任务。 Cortana 会提供链接文本(例如“Go to Adventure Works”)。

完成屏幕的 GUI 和 TTS 准则

使用过去时时态。

使用操作谓词以显式声明任务已完成。

如果显示实体,或在上一轮时进行了引用,则只引用它。

条件 TTS GUI
ENTITY SHOWN / ENTITY READ ON PRIOR TURN I’ve cancelled this trip. Cancelled this trip.
ENTITY NOT SHOWN / ENTITY NOT READ ON PRIOR TURN I’ve cancelled your Vegas Tech Conference trip. Cancelled "Vegas Tech Conference."

错误

使用 AdventureWorks 取消行程错误 AdventureWorks“取消行程”错误的端到端 Cortana 后台应用流的 Cortana 画布屏幕截图

发生以下错误之一时,Cortana 会显示相同的一般性错误消息。

  • 应用服务意外终止。
  • Cortana 无法与应用服务通信。
  • 应用在 Cortana 显示移交屏幕或进度屏幕 5 秒后未能提供屏幕。