如果你想要一个会话cookie的等价物,在一次对话中保留的信息,那么你的选择就是
>使用会话ID作为每次调用时发送给您的信息的一部分,并在您的履行中跟踪此信息.
>使用Dialogflow上下文存储要保留的信息
>如果您正在使用actions-on-google JavaScript库,请将其存储在为您创建的app.data对象中.
如果您希望等效的持久cookie可以在对话之间保留信息,那么您的选择就是
>使用匿名用户ID作为每次调用时发送给您的信息的一部分,并在您的履行中跟踪此信息.
>如果您正在使用actions-on-google javascript库,请将其存储在为您创建的app.userStorage对象中.
>将其存储为data.google.userStorage下JSON响应中字符串的一部分.
关于其中每一项的更多信息
会话ID
为您拥有的每个对话创建不同的会话ID.您可以通过检查sessionId参数中发送到您的webhook的JSON来获取此会话ID.
然后,您可以在您管理的某种数据存储中查找它.
Dialogflow上下文
上下文是Dialogflow提供的强大工具.您将上下文作为履行webhook的一部分返回,并指明上下文的名称,其生命周期(将将多少轮对话传递回您的webhook),以及与上下文关联的任何参数(字符串键/值)对).
上下文对于帮助确定可能调用的意图特别有用.您可以指示哪些上下文必须处于活动状态才能使Dialogflow识别Intent.
如果您正在使用actions-on-google node.js库,则可以使用以下内容设置上下文:
var contextParameters = { foo: "Something foothy", bar: "Your local bar." }; app.setContext( "remember_this", 5, contextParameters );
您需要在调用app.ask()或app.tell()之前执行此操作.
或者,您可以在JSON中执行等效操作,作为响应的contextOut块的一部分
"contextOut": [ { "name": "remember_this", "lifespan": 5, "parameters": { "foo": "Something foothy", "bar": "Your local bar." } } ]
下次调用webhook时,可以通过查看result.contexts数组或使用库中的app.getContext()或app.getContextArgument()方法来获取此上下文.
使用app.data
如果您正在使用该库,Google已经为您完成了一些工作. app.data对象是为您创建的.您在对象中设置的任何值都可用于会话的生命周期 – 您只需在以后调用webhook时阅读它们.
(在幕后,谷歌使用了一个上下文,所以没有魔法.两者一起工作,你可以自由地做两件事.)
匿名用户ID
当用户首次使用您的操作时,将生成用户ID.此ID不允许您访问有关它们的任何特定信息,并且不会用于任何其他操作,但每次您看到它时,您都可以放心,它是在之前的事件中使用它的用户.然而,就像cookie一样,用户可以重置它,并为他们的动作生成一个新的ID.
您可以通过originalRequest.user.userId中的JSON或使用app.getUser().userId获取此信息.获得后,您将使用某种数据存储来存储和检索有关此用户的信息.
使用app.userStorage
与app.data类似,还为每个用户创建了一个app.userStorage对象.您对此对象所做的任何更改都将保存在您与此用户的对话之间.
然而,与app.data不同,它不会存储在上下文中.它有自己的存储方法.这导致…
将其存储在JSON中
如果您没有使用Google Play操作,您仍然可以通过响应访问userStorage并直接请求JSON.您需要将其存储为字符串,但如果需要存储更复杂的对象,则常用方法是将其字符串化为JSON.
您将此值存储在响应中的data.google.userStorage下,并可以在您的webhook收到的请求中的originalRequest.data.user.userStorage下检索它.