当前位置 : 主页 > 网络推广 > seo >

api.ai – 如何在Dialogflow中跨代理的调用保存和检索信息?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我希望我在Google代理上的操作能够跨调用存储和检索某些信息 – 比如cookie.我该怎么做呢? 根据您的具体操作,您可以根据自己的需要选择很多选项.虽然有相似之处,但它并不完全像网络
我希望我在Google代理上的操作能够跨调用存储和检索某些信息 – 比如cookie.我该怎么做呢? 根据您的具体操作,您可以根据自己的需要选择很多选项.虽然有相似之处,但它并不完全像网络cookie.

如果你想要一个会话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下检索它.

网友评论