会话存储空间

您可以将对话内特定用户的参数值存储在会话存储中。然后,您的 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"