如何在Google Home中使用NodeJS设置会话variables(DialogFlow)

我正在为Google Home编写我的第一个NodeJS应用程序(使用DialogFlow – 以前的API.ai)。

我正在查看此页面上的文档: https : //developers.google.com/actions/reference/v1/dialogflow-webook

但我没有看到设置会话variables的方法。

我目前的testing程序设置这样的演讲:

speechText = "I'm not sure that character exists!"; callback(null, {"speech": speechText}); 

在DialogFlow中,运行后的JSON看起来像这样,看起来也许“上下文”是会话状态会去的地方?

 { "id": "3a66f4d1-830e-48fb-b72d-12711ecb1937", "timestamp": "2017-11-24T23:03:20.513Z", "lang": "en", "result": { "source": "agent", "resolvedQuery": "test word", "action": "MyAction", "actionIncomplete": false, "parameters": { "WordNumber": "400" }, "contexts": [], "metadata": { "intentId": "a306b829-7c7a-46fb-ae1d-2feb1c309124", "webhookUsed": "true", "webhookForSlotFillingUsed": "false", "webhookResponseTime": 752, "intentName": "MyIntentName" }, "fulfillment": { "messages": [{ "type": 0, "speech": "" }] }, "score": 1 }, "status": { "code": 200, "errorType": "success", "webhookTimedOut": false }, "sessionId": "fe0b7d9d-7a55-45db-9be9-75149ff084fe" } 

我刚刚从一个聊天机器人课程中注意到,我买了可以像这样设置上下文,但是仍然不确定上下文是如何设置的,并且在我的程序的一个调用的响应和下一个请求之间来回传递我的程序调用(通过“webhook”定义)。 在这里输入图像说明 当我添加上面的上下文时,DialogFlow不会再识别我的话语,并给我DefaultFallback响应。 当我删除它们时,我的AWS Lambda被调用。

对于初学者,您正在查看的文档页面是指API的已弃用版本。 谈论当前版本的api(v2)的页面是https://developers.google.com/actions/dialogflow/webhook 。 已弃用的版本将只支持另外6个月左右。

你正在使用上下文的正确轨道! 如果您正在使用Google的action-on-google node.js库,则会有一些其他选项 – 但它们都在场景下使用上下文。 (因为他们在场景中使用上下文 – 你应该确保select与他们不同的上下文名称)。你也可以使用sessionId并跟踪本地数据存储(比如DynamoDB)中的东西的SessionID。 但是还有其他的select

一个上下文包含三个元素:

  1. 一个名字。
  2. 一生 – 从用户那里得到多less条消息,将这个上下文发回给你。 (但请参阅下面有关重新发送上下文的信息。)
  3. 键值string的对象。

您将设置JSON中的任何上下文作为名为contextOut的附加参数contextOut 。 这将是一个上下文的数组。 所以你的回应可能是这样的:

 var speechText = "I'm not sure that character exists!"; var sessionContext = { name: "session_variables", lifespan: 5, parameters: { "remember": "one", "something": "two" } }; var contextOut = [sessionContext]; var response = { speech: speechText, contextOut: context }; callback(null, response); 

这将包括一个名为“session_variables”的上下文,它存储两个这样的variables。 它将被返回给下一个发送到你的webhook的5条消息。 但是,您可以将其添加到您发送的每条消息中,并且最近的生命周期和参数将是下次发送的消息。

您将在result.contexts数组中发送给您的JSON中获取这些上下文。

意图屏幕上的“上下文”字段除了仅保留会话信息外,还用于Dialogflow中的其他目的。 这表示当指定的上下文存在(生存期> 0)时, 才会触发Intent,当该短语尝试与其匹配(或处理回退意图时)。 如果你使用webhook,如果你自己发回上下文,“Context Out”字段将被忽略。

这可以让你做一些事情,比如询问一个特定的问题,设置一个Context(可能带有参数)来表示一些答案应该被理解为对你刚刚问的问题的答复。