智能家居常见问题解答

一般措施

:应该在何种平台上以何种语言实现 Actions on Google 执行方式基础架构?

:您可以在任何平台上以您选择的任何语言实现该基础架构,只要它支持现代 SSL (TLS) 和 OAuth 2.0 即可。建议你的部署要尽可能靠近你的其他基础架构,以提高可靠性并缩短运行延迟(尽快向实际用户设备返回响应)。


:设备 ID 必须是唯一的吗?

:设备 ID 应该是唯一的。如果您没有在整个服务中使用唯一的 ID,那么这些 ID 必须至少在每用户级别上是唯一的。假设某位用户有多套房,其中两套房在同一用户名下集成了设备。请求打开一栋房子里的某盏灯,不应该打开另一栋房子里 ID 相同的灯。


:设备名称必须是唯一的吗?

:名称不必是唯一的,但在用户设置完毕后,我们可能会在用户使用的过程中建议用户改进不太合适的命名,以获得更好的用户体验。

下面提供了快速命名指南:

  • 名称应是用户确实会用的表述。
  • 系统可识别字符串的子集,因此如果你设置了“acme 彩灯”这个名称,我们也可以对“acme 灯”作出响应。
  • 我们建议同时添加产品的描述性名称以及一个或多个用户定义的名称。
  • 用户不需要为灯指定房间名称,因为系统会自动为灯指定房间;每个房间里灯的名称应该是唯一的,但随时都可以用复数表述来控制所有灯(例如,办公桌灯台上的两个灯泡分别命名为“北侧的灯”和“东侧的灯”,但也可以统称为“灯”来一并控制)。

:设备状态多久更新一次?

:系统会在收到 QUERY 或 EXECUTE(用户发起的操作)时检索暂存状态。如果用户询问“灯是开着的吗?”或者想要把灯调亮,我们需要执行查询以确定当前状态。


:可以使用设备的当前状态直接更新 Home Graph 吗?

:可以,请使用 Report State API 调用。


账号关联和 OAuth

:需要。必须进行帐号关联才能将用户的设备连接到提供商的云服务。


:针对 OAuth 的访问令牌每 15.213 小时失效一次,可以吗?

:可以,但请针对比较短的失效时间(例如 10-20 分钟)进行测试。我们的 OAuth 客户端应该会根据需要刷新令牌,而针对较短的失效时间进行测试可以验证这一点。


Intent

:系统何时执行 SYNC?

:系统会在 OAuth 完成后以及进行请求同步调用后立即执行 SYNC。


SYNC 为什么不起作用?

:可能导致该请求失败的常见原因有很多。

  • 您发送的设备类型有误。

    • 例如,我们期待的是 action.devices.types.LIGHT,但是你发送了 action.devices.types.Light
  • 您发送的设备类型不受支持。

    • 例如,您发送了 action.devices.types.FLASHLIGHT,而系统不支持此类型。
  • 您发送的字段无效/不受支持。

    • 例如,你的版本字段或其他某个字段不符合我们的规范。
  • 您的 SYNC 响应存在其他某种格式问题。

    • 请检查括号!
  • 你遇到了账号关联问题。

    • 请确认你在 SYNC 请求的 Auth 标头中收到的访问令牌是否有效。
  • 对 SYNC 请求的响应用时过长。

    • 请确认你能否在 5 秒内响应 SYNC 请求。

:是否可以使用“待处理”响应?

:如果您的设备支持实时响应,我们强烈建议您提供成功/失败响应,而不是待处理响应。如果您认为自己需要使用“待处理”响应,请与我们联系。我们了解,一些低功耗的、不支持实时响应的设备可能需要使用“待处理”响应和异步执行模型。


测试和提交

:可以设置临时环境吗?

:可以,请创建一个单独的项目,并针对该项目完成各项设置。您可以根据需要创建任意数量的项目,以便映射到您的开发流程和基础架构。


:我要多久更新一次草稿项目?

:草稿项目要求每 3 天更新一次。3 天后,测试代理即会从 HomeControl 移动设置中消失。如果遇到此问题,请在 Actions on Google Console 中点击您的项目对应的 TEST DRAFT 按钮。


:我可以同时在多台设备上进行测试吗?

Actions on Google 一次仅支持一个“try-on-device” AP。如果您先在“ap1”上使用 TEST DRAFT 并同步设备,然后直接运行 TEST DRAFT“ap2”(而不取消关联 ap1),则“ap1”将从 HomeControl 移动设置中消失。如需更正此问题,请再次在“ap1”上运行 TEST DRAFT,然后您可以在设置中取消关联“ap1”。

请注意,这个操作包适用于用户的所有 Google Assistant 设备。例如,您可以同时在声控音响设备和 Android 上测试新的硬件集成。


:我的 Action 项目提交内容因名称或发音存在问题而遭到拒绝,我需要更改什么?

:我们会检查名称发音以确保发音相同的名称日后不会被其他 Action 使用,并确保发音与显示名匹配(以防出现会影响未来名称注册的不匹配问题)。

如需继续使用同一个名称,请与支持团队联系,让语音团队将显示名添加到 Assistant


:我的 Action 未显示在 Google Home 应用的“家居控制”部分中,这是为什么?

:该问题可能涉及以下某一种情况:

  • 您没有在 Actions Console 中点击您的项目对应的 TEST DRAFT 按钮。
  • 你一次只能在 Test-on-Device 中添加一个 Action。
  • Actions Console 中,访问“Simulator”标签页并找到您的 Action 项目,将 Active/Inactive 切换开关切换为“Inactive”,然后再次切换为“Active”。
  • 如果此 Action 是他人与您共享的,请确保已遵循所有共享说明
  • Test-on-Device 在三天后失效。在 Actions Console 中点击您的项目对应的 TEST DRAFT 按钮。

:当我在模拟器中输入“talk to <my agent name>”时,为什么系统出会提示错误?

:智能家居 Action 不使用调用名称。如需在模拟器中进行测试,您必须在安装了 Google Home app (GHA)Android 或 iOS 手机上完成帐号关联。此外,在执行帐号关联之前,您还必须先将设备与您的帐号关联。


:为什么我在尝试使用模拟器时收到错误消息?

:您无法使用模拟器测试已部署的 smart home Action。如果您希望将模拟器用于生产环境中的家居自动化项目,则需要创建新项目进行测试。


报告状态

:实现报告状态有什么前提条件吗?

:项目需要使用 Smart Home API、支持 OAuth2,并且需要具有要报告状态的特征。


:我们需要多久报告一次设备上的状态?

:Google 关注转换和终止状态,但如果在短时间内有大量状态变化(例如用户在一分钟内开关冰箱三次或滑动调光器),那么我们只需要报告的最终状态。


:在调用报告状态时,是否需要发送设备的完整状态?

:系统不支持部分状态更新,因此 Report State 调用应始终包含已更新的特定特征的所有数据。如果两个特征会导致不一致,请将它们一并报告。


:Google 能否通过查询我的设备来获取状态(即轮询设备)?

:这是一种后备机制,我们不建议使用。如果我们需要回退到为这些用户频繁轮询设备,我们无法保证会产生多少额外的负载。这种需求来自新的视觉平台。除了未知负载的问题之外,用户体验也会大打折扣。我们认为 Report State 对于平台至关重要。


:目前哪些特征支持报告状态?

:支持已关联状态的所有公共特征。还应报告设备在线状态发生的任何变化。

请注意,场景没有状态。不过,它们可能会导致设备的状态发生变化。如果 Google Home Graph 中的任何设备有变更状态,则需要报告此状态。


:报告状态是否要求发送时间戳?

:我们不要求提供时间戳;上次发送的状态将替换之前的调用。


:如果我已经在 Query 和/或 Execute 中发送了状态,是否需要单独报告状态?

Home Graph 仅存储通过 Report State 发送的状态。作为对 EXECUTE intent 和 QUERY intent 的响应而返回的状态仅用于对用户的语音响应,不会被存储。因此,即使设备的新状态已经作为对 EXECUTE intent 或 QUERY intent 的响应而返回,也应调用 Report State


:如果在规定的期限内没有完全实现报告状态,会有什么后果?

:这会导致用户体验下降,例如在 GHA 和视觉 surface 中。这意味着,系统会发送许多 QUERY intent 来轮询状态,并且我们无法保证这是否会给合作伙伴云带来额外负载。


:如何测试报告状态实现情况?

:使用 Home Graph Viewer,这是一款自助测试工具,可向您显示 Home Graph 中存储的当前设备状态。


:我们可以将随机 requestId 用于报告状态吗?

:如果 Report State 由 EXECUTE 请求触发,我们建议合作伙伴使用从 EXECUTE 请求收到的相同 requestId,否则你只需使用随机 requestId。


:如果一名用户有多台设备,而其中一台设备的状态有变,我们是否需要报告所有设备的最新状态?

:不需要。你只需报告该特定设备的状态。


最佳实践

:多久的延迟在可接受范围内?

:理想情况下,不超过 200 毫秒,2-5 秒之间也可以。如果延迟时间停留在 5 秒左右,请与我们联系。


:如何让声控音响设备在离线状态下也能正确地做出响应?

:在设备处于离线状态时返回离线状态。对于此错误,我们会以 TTS 形式返回“目前不可用”。如需了解详情,请参阅错误和异常