您可以将对话内特定用户的参数值存储在会话存储中。然后,您的 Action 稍后可以在提示和条件中使用这些存储的值,并且您的网络钩子代码可以在必要时访问会话存储空间中的值。
在对话期间,使用 types 收集的所有数据都会存储在会话存储空间中。您还可以使用网络钩子调用与会话存储空间中的数据进行交互。对于网络钩子调用,会话存储的状态会在 app.handle()
请求中传递,并存储在 session
对象中。
对话结束时,会话存储空间中存储的数据会过期。
读取和写入会话存储空间的数据
如需在会话存储空间中更新或设置新值,请将该值分配给网络钩子调用中 session
对象的 params
字段。以下示例在会话存储中将“exampleColor”设为“red”:
Node.js
// Assign color to session storage app.handle('storeColor', conv => { let color = 'red'; conv.session.params.exampleColor = color; });
JSON
{ "responseJson": { "session": { "id": "12345678901234567890", "params": { "exampleColor": "red" } }, "prompt": { "override": false } } }
如需访问存储在会话存储空间中的数据,请将其分配给网络钩子调用中的变量。以下示例从会话存储空间的“exampleColor”中检索一个值:
Node.js
// Retrieve color from session storage app.handle('getStoredColor', conv => { let color = conv.session.params.exampleColor; });
JSON
{ "responseJson": { "session": { "id": "12345678901234567890", "params": { "exampleColor": "red" } }, "prompt": { "override": false } } }
如需清除之前保存的值,请在 webhook 调用中将该值设置为 null
。以下示例会清除会话存储中“exampleColor”的值:
Node.js
// Clear color from session storage app.handle('clearStoredColor', conv => { conv.session.params.exampleColor = null; });
JSON
{ "responseJson": { "session": { "id": "12345678901234567890", "params": {} }, "prompt": { "override": false } } }
在提示中引用存储的值
您可以在提示中引用存储在会话存储空间中的值。如需引用该值,请使用 $session.params.PARAMETER_NAME
语法,其中 PARAMETER_NAME
是设置参数时在 webhook 中指定的名称。
例如,您之前将颜色值作为参数 exampleColor
存储在会话存储空间中。如需在提示中访问该值,您可以使用 $session.params.exampleColor
引用该值:
JSON
{ "candidates": [{ "first_simple": { "variants": [{ "speech": "Your favorite color is $session.params.exampleColor." }] } }] }
在条件中引用存储的值
您还可以在 conditions 中引用存储在会话存储空间中的值。如需引用该值,请使用 session.params.PARAMETER_NAME
语法,其中 PARAMETER_NAME
是设置该参数时在 webhook 中指定的名称。
例如,您之前将颜色值作为参数 exampleColor
存储在会话存储空间中,并且希望将其与条件中的值“red”匹配。在条件中,您将使用 session.params.exampleColor
引用存储的值。您的条件表达式应如下所示:
条件语法
session.params.exampleColor == "red"