谷歌家庭将卡发送到谷歌主页应用程序

时间:2018-01-24 08:14:14

标签: android actions-on-google google-home

我制作了一个小型Google Home应用程序,我的服务使用SimpleMessage +卡返回响应。

在console.actions.google.com模拟器中运行应用程序时,它非常有效。我得到的卡都很好。

但是,当我测试与Google Home的对话时,它只发送文字,没有任何卡片的痕迹。

但是,如果我在手机上与谷歌家庭应用程序通话,它会正确发送卡片。

是否有能够接收Google Home发送的卡片的内容?它有可能吗?

1 个答案:

答案 0 :(得分:3)

当用户通过Google Home进行通话时,无法制作已发送的卡片,但如果需要卡片,您可以使用多种技术作为开发人员。

首先 - 良好的设计表明,卡片应该用于补充对话,而不是对话的焦点。确保语音对话本身很重要,并仅在必要时使用可视元素。如果您的行为过于直观 - 它可能更适合作为移动应用或网络应用,而不是行动。

如果您的设备需要屏幕,则可以在配置问题时在操作控制台中进行设置。但是,这会阻止它在Google Home设备上使用。

enter image description here

如果您不想走这条路线,并希望允许它在智能扬声器上使用,但仍然可以利用可用的屏幕,那么您有几个选择。

首先,你可以发送卡片。正如您所发现的那样,他们不会出现,但他们不会引起任何问题。

如果您希望屏幕可用时略有不同,则可以检查当时用户助手能够使用的surface capabilities。如果您正在使用node.js库,则可以使用

等命令
let hasScreen = app.hasSurfaceCapability(app.SurfaceCapabilities.SCREEN_OUTPUT)

确定屏幕是否可用并根据变量hasScreen采取措施。如果您正在使用JSON,则需要在surface.capabilitiesdata.google.surface.capabilities检查数组,看看"actions.capability.SCREEN_OUTPUT"是否是可用曲面之一。

如果没有,并且您在对话中找到了您认为需要发送可视结果的点,您还可以请求在支持屏幕输出的设备上继续对话。

首先,您需要确保他们有可用的屏幕。您可以使用类似

的node.js库执行此操作
const screenAvailable = app.hasAvailableSurfaceCapabilities(app.SurfaceCapabilities.SCREEN_OUTPUT);

或检查JSON中的availableSurfaces.capabilitiesdata.google.availableSurfaces.capabilities参数。

如果有一个可用,您可以请求继续使用

之类的对话
app.askForNewSurface(context, notif, [app.SurfaceCapabilities.SCREEN_OUTPUT]);

其中context是将在Google Home上显示的消息,而notif是将显示在其移动设备上的通知(例如),以便让他们继续对话。如果使用JSON,您需要使用actions.intent.NEW_SURFACE下一个意图。

无论哪种方式,用户都会在他们的移动设备上收到通知。选择通知将启动该设备上的助手,并再次使用参数调用您的操作,以便检查它们是否在新表面上。如果是这样 - 你可以发送卡片。