我制作了一个小型Google Home应用程序,我的服务使用SimpleMessage +卡返回响应。
在console.actions.google.com模拟器中运行应用程序时,它非常有效。我得到的卡都很好。
但是,当我测试与Google Home的对话时,它只发送文字,没有任何卡片的痕迹。
但是,如果我在手机上与谷歌家庭应用程序通话,它会正确发送卡片。
是否有能够接收Google Home发送的卡片的内容?它有可能吗?
答案 0 :(得分:3)
当用户通过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
下一个意图。
无论哪种方式,用户都会在他们的移动设备上收到通知。选择通知将启动该设备上的助手,并再次使用参数调用您的操作,以便检查它们是否在新表面上。如果是这样 - 你可以发送卡片。