在大多数情况下,您可在设计时(构建代理时)配置上下文。 例如,当您有“我想将披萨添加到我的购物车中”之类的培训短语的时候。
在某些高级场景中,您可能还需要编写代码,以便在运行时(实时会话期间)获取和设置某些上下文。 例如,您检测到了设备位置,并将其添加到了上下文中,以便稍后引用该位置。
本文档介绍如何使用 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 方法。