管理上下文

在大多数情况下,您可在设计时(构建代理时)配置上下文。 例如,当您有“我想将披萨添加到我的购物车中”之类的培训短语的时候。

在某些高级场景中,您可能还需要编写代码,以便在运行时(实时会话期间)获取和设置某些上下文。 例如,您检测到了设备位置,并将其添加到了上下文中,以便稍后引用该位置。

本文档介绍如何使用 Dialogflow 控制台APIfulfillment,在设计时和运行时获取和设置上下文。

上下文命名

以下规则适用于对上下文进行命名:

规则 示例
使用字母数字名称。 mycontext1
使用 -_ 代替空格。 my-context-1
名称不区分大小写。 Abc123abc123 视为等效名称。
使用 API 时,所有上下文名称均为小写。 abc123

设计时设置上下文

控制台

  1. 前往 Dialogflow ES 控制台
  2. 选择一个代理。
  3. 在左侧边栏菜单中选择意图 (Intents)。
  4. 展开意图数据的上下文部分。
  5. 点击意图数据中的添加输出上下文 (Add output context) 或添加输入上下文 (Add input context) 字段。
  6. 输入上下文的名称,然后按 Return
  7. 对于输出上下文,可以选择点击有效期圆圈更改有效期。有效期界面快照
  8. 根据需要添加更多上下文。
  9. 点击保存

API

请参阅意图参考

运行时设置上下文

Fulfillment

当您的网络钩子服务发送 WebhookResponse 后,请将 outputContexts 字段设置为所需的活跃上下文。

API

Sessions 类型 detectIntent 调用的请求包含 queryParameters.contexts 字段,用于设置活跃上下文。

以下是 detectIntent 请求的 REST JSON 示例:

POST https://dialogflow.googleapis.com/v2/{session=projects/*/agent/sessions/*}:detectIntent

{
  "queryInput": {
    "text": {
      "languageCode": "en-US",
      "text": "I would like to add pizza to my shopping cart."
    }
  },
  "queryParams": {
    "contexts": [{
        "name": "projects/project-id/agent/sessions/session-id/contexts/product-chosen",
        "lifespanCount": 5,
        "parameters": {
          "product": "Pizza",
          "device-location" "@52.3377871,4.8698096,17z"
        }
      }]
  }
}

您也可以随时对 Contexts 类型调用 create、delete 和 update 方法。

运行时获取上下文

Fulfillment

网络钩子服务收到 WebhookRequest 后,queryResult.outputContexts 字段将包含相应活跃上下文。

API

Sessions 类型 detectIntent 调用的响应包含 queryResult.outputContexts 字段,提供相应活跃上下文的列表。

以下是 detectIntent 响应的 REST JSON 示例:

{
  "responseId": "response-id",
  "queryResult": {
    "queryText": "I would like to add pizza to my shopping cart.",
    "parameters": {
      "product": "pizza"
    },
    "allRequiredParamsPresent": true,
    "fulfillmentText": "The product has been added.",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "The product has been added."
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/project-id/agent/sessions/session-id/contexts/product-chosen",
        "lifespanCount": 5,
        "parameters": {
          "product": "Pizza",
          "device-location" "@52.3377871,4.8698096,17z"
        }
      }
    ],
    "intent": {
      "name": "projects/project-id/agent/intents/intent-id",
      "displayName": "buy-product"
    },
    "intentDetectionConfidence": 0.8057143,
    "languageCode": "en",
  }
}

您也可以随时对 Contexts 类型调用 get 和 list 方法。