在大多数情况下,您可在设计时(构建代理时)配置上下文。 例如,当您有“我想将披萨添加到我的购物车中”之类的培训短语的时候。
在某些高级场景中,您可能还需要编写代码,以便在运行时(实时会话期间)获取和设置某些上下文。 例如,您检测到了设备位置,并将其添加到了上下文中,以便稍后引用该位置。
本文档介绍如何使用 Dialogflow 控制台及 API或 fulfillment,在设计时和运行时获取和设置上下文。
上下文命名
以下规则适用于对上下文进行命名:
| 规则 | 示例 |
|---|---|
| 使用字母数字名称。 | mycontext1 |
使用 - 或 _ 代替空格。 |
my-context-1 |
| 名称不区分大小写。 | Abc123 和 abc123 视为等效名称。 |
| 使用 API 时,所有上下文名称均为小写。 | abc123 |
设计时设置上下文
控制台
- 前往 Dialogflow ES 控制台。
- 选择一个代理。
- 在左侧边栏菜单中选择意图 (Intents)。
- 展开意图数据的上下文部分。
- 点击意图数据中的添加输出上下文 (Add output context) 或添加输入上下文 (Add input context) 字段。
- 输入上下文的名称,然后按 Return。
- 对于输出上下文,可以选择点击有效期圆圈更改有效期。

- 根据需要添加更多上下文。
- 点击保存。
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 方法。