我制作了一个小型 Google Home 应用程序,我的服务通过 SimpleMessage + Card 返回响应。
在 console.actions.google.com 模拟器中运行应用程序时,它可以完美运行。我拿到卡了。
但是当我测试与 Google Home 通话时,它只发送文本,任何地方都没有卡片的踪迹。
但是,如果我与手机上的 Google Home 应用通话,它会正确发送卡片。
有没有什么东西可以接收 Google Home 发送的卡片?有可能吗?
最佳答案
无法让用户在通过 Google Home 通话时发送的卡片可见,但作为开发者,如果需要卡片,您可以使用多种技术。
首先 - 好的设计建议卡片应该用来补充对话,而不是成为对话的焦点。确保语音对话本身很重要,并且仅在必要时才使用视觉元素。如果您的操作过于视觉化 - 它可能更适合作为移动或网络应用程序,而不是操作。
如果您的设备需要屏幕,那么您可以在配置问题时在操作控制台中进行设置。但是,这将阻止它在 Google Home 设备上使用。
如果您不想走这条路,并想让它在智能扬声器上使用,但仍要利用它可用的屏幕,您有几个选择。
首先,您可以直接发送卡片。正如您所发现的,它们不会出现,但不会造成任何问题。
如果您希望在屏幕可用时采取稍微不同的操作,您可以检查 surface capabilities用户的助手此时能够执行的操作。如果您使用的是 node.js 库,则可以使用如下命令:
let hasScreen = app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)
确定屏幕是否可用并根据变量hasScreen
采取行动。如果您使用的是 JSON,则需要检查 surface.capabilities
或 data.google.surface.capabilities
中的数组,以查看是否 "actions.capability. SCREEN_OUTPUT"
是可用表面之一。
如果没有,并且您在对话中到了需要发送视觉结果的地步,您还可以请求在支持屏幕输出的设备上继续对话。
首先,您需要确保他们有可用的屏幕。您将使用 node.js 库执行此操作,例如
const screenAvailable = app.hasAvailableSurfaceCapabilities(app.SurfaceCapabilities.SCREEN_OUTPUT);
或通过检查 JSON 中的 availableSurfaces.capabilities
或 data.google.availableSurfaces.capabilities
参数。
如果有人可用,您可以请求在那里继续对话,例如
app.askForNewSurface(context, notif, [app.SurfaceCapabilities.SCREEN_OUTPUT]);
context
是将在 Google Home 上说出的消息,notif
是将出现在他们的移动设备(例如)上的通知,让他们继续谈话。如果使用 JSON,则需要使用 actions.intent.NEW_SURFACE
下一个 Intent 。
无论哪种方式,用户都会在他们的移动设备上收到通知。选择通知将启动该设备上的智能助理,您的操作将再次调用,并使用参数让您检查它们是否在新表面上。如果是这样 - 您可以发送卡片。
关于android - Google home 发送卡片到 Google Home 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48417663/