在网络钩子调用中,您可以将同一家庭中多个会话的参数值(基于 Home Graph)存储在主存储空间中。然后,您的 Action 稍后就可以在提示和条件中使用这些存储的值,并且您的网络钩子代码可以在必要时访问特定家庭的住宅存储空间中的值。
主存储空间的状态通过 app.handle()
请求传递,并存储在 home
对象中。
限制
Home Storage 无法用于移动设备,因为它们不属于 Home Graph。在您的网络钩子代码中,使用 HOME_STORAGE
设备功能根据用户设备的功能来分支业务逻辑。
您必须选择使用家庭存储空间:
- 在 Actions 控制台中,依次点击 Deploy > Directory information。
- 在其他信息部分中,勾选家庭存储空间对应的复选框。
读取和写入家庭数据
如需更新主存储空间中的值或设置新值,请将该值分配给网络钩子调用中 home
对象的 params
字段。以下示例将主存储空间中的“exampleColor”设置为“red”:
Node.js
// Assign color to home storage app.handle('storeColor', conv => { let color = 'red'; conv.home.params.exampleColor = color; });
JSON
{ "responseJson": { "session": { "id": "1234567890123456789", "params": {} }, "prompt": { "override": false }, "home": { "params": { "exampleColor": "red" } } } }
如需访问存储在主存储空间中的数据,请将其分配给网络钩子调用中的变量。以下示例从主存储空间的“exampleColor”检索值:
Node.js
// Retrieve color from home storage app.handle('getStoredColor', conv => { let color = conv.home.params.exampleColor; });
JSON
{ "responseJson": { "session": { "id": "1234567890123456789", "params": {} }, "prompt": { "override": false }, "home": { "params": { "homeColor": "red" } } } }
如需清除之前保存的值,请在 webhook 调用中将该值设置为 null
。以下示例会清除主存储空间中“exampleColor”的值:
Node.js
// Clear color from home storage app.handle('clearStoredColor', conv => { conv.home.params.exampleColor = null; });
JSON
{ "responseJson": { "session": { "id": "1234567890123456789", "params": {} }, "prompt": { "override": false }, "home": { "params": {} } } }
在提示中引用存储的值
您可以在提示中引用存储在主存储空间中的值。如需引用该值,请使用 $home.params.PARAMETER_NAME
语法,其中 PARAMETER_NAME
是设置相应参数时在 webhook 中指定的名称。
例如,您之前将颜色值作为参数 exampleColor
存储在 Home Storage 中。如需在提示中访问该值,您可以使用 $home.params.exampleColor
引用该值:
JSON
{ "candidates": [{ "first_simple": { "variants": [{ "speech": "Your favorite color is $home.params.exampleColor." }] } }] }
在条件中引用存储的值
您还可以在 conditions 中引用存储在主存储空间中的值。如需引用该值,请使用 home.params.PARAMETER_NAME
语法,其中 PARAMETER_NAME
是设置相应参数时在 webhook 中指定的名称。
例如,您之前将颜色值作为参数 exampleColor
存储在 Home Storage 中,并且希望将其与条件中的值“red”匹配。在条件中,您将使用 home.params.exampleColor
引用存储的值。您的条件表达式应如下所示:
条件语法
home.params.exampleColor == "red"
主存储空间数据的到期
如果连续 90 天未调用 Action,系统会擦除主屏幕存储数据。在与 Home Graph 结构关联的任何设备上调用 Action 会重置 90 天计时器。如果删除了 Home Graph 结构,相应的主屏幕存储空间数据也会被清除。
对于使用主屏幕存储空间的 Action,Home Graph 结构管理员可以在 Google 助理目录的 Action 页面中清除其管理的结构的主存储空间:
- 找到并选择您要查看或清除用户存储空间的操作。
- 滚动到页面底部:
- 如需移除存储在家庭存储空间中的数据,请点击停止 action_name 记住我。
当设备管理员解除设备与结构之间的关联时,住宅存储空间也会解除。即使结构管理员发生变化,住宅存储空间数据也会继续与设备关联,除非结构管理员将其清除。
模拟器中的主存储空间数据
使用 Actions 控制台中的模拟器测试您的 Action 时,存储在家庭存储空间中的数据的行为方式与实体设备上的数据略有不同。模拟器被视为其自己的 Home Graph 的一部分,因此数据不会持久保留在您网络中可能拥有的其他设备中。此外,启用模拟未验证的用户模拟器设置后,主屏幕存储空间数据不会跨会话保留。
互动示例
下面是已登录用户首次调用 Action 时的交互示例:
用户查询 | Ok Google,跟 ExampleAction 对话。 |
---|---|
Google 助理的回复 | 获取 ExampleAction。 |
Google 助理的回复 | 提醒一下,你每次玩游戏时,ExampleAction 都会保存下来,这样你家里的其他人就可以从你上次停下的地方继续。 |
ExampleAction 响应 | 尊敬的经过验证的用户:您现在已经是第 0 级了。说“下一步”“重置”或者说“取消”。 |
用户查询 | 下一步。 |
ExampleAction 响应 | 您现在已升至第 1 级。 |
用户查询 | 退出。 |
然后,当同一经过验证的用户在一段时间后返回该 Action 时:
用户查询 | Ok Google,跟 ExampleAction 对话。 |
---|---|
Google 助理的回复 | 获取 ExampleAction。 |
ExampleAction 响应 | 尊敬的经过验证的用户:您现在已升至第 1 级。说“下一步”“重置”或者说“取消”。 |
用户查询 | 下一步。 |
ExampleAction 响应 | 您现在是第 2 级。 |
用户查询 | 退出。 |
第二天,未经验证的用户在同一家庭中的其他设备上(在 Home Graph 上指定)与 Action 互动。
用户查询 | Ok Google,跟 ExampleAction 对话。 |
---|---|
Google 助理的回复 | 获取 ExampleAction。 |
Google 助理的回复 | 提醒一下,你每次玩游戏时,ExampleAction 都会保存下来,这样你家里的其他人就可以从你上次停下的地方继续。 |
ExampleAction 响应 | 尊敬的访客用户:您现在是第 2 级。说“下一步”“重置”或者说“取消”。 |
用户查询 | 下一步。 |
ExampleAction 响应 | 您现在已升到第 3 级。 |
用户查询 | 退出。 |