In most cases, you configure contexts at design-time (when you are building an agent). For example, when you have a training phrase like: "I would like to add pizza to my shopping cart."
In some advanced scenarios, you may also want to write code that gets and sets some contexts at runtime (during a live conversation). An example could be, you detected a device location and you have added it to the context, so you can refer to the location at a later moment.
This document describes how to get and set contexts at design-time and runtime by using the Dialogflow Console, the API, or fulfillment.
Context naming
The following rules apply to naming contexts:
Rule | Examples |
---|---|
Use alphanumeric names. | mycontext1 |
Use - or _ instead of spaces. |
my-context-1 |
Names are not case sensitive. | Abc123 and abc123 are considered equivalent. |
All context names are lowercase when using the API. | abc123 |
Set contexts at design-time
Console
- Go to the Dialogflow ES console.
- Select an agent.
- Select Intents in the left sidebar menu.
- Expand the Contexts section of the intent data.
- Click the Add output context or Add input context field in intent data.
- Enter a name for the context and press Return.
- For output contexts, optionally click the lifespan circle and change the lifespan.
- Add more contexts as needed.
- Click Save.
API
See the Intents reference.
Set contexts at runtime
Fulfillment
When your webhook service sends a
WebhookResponse
,
set the outputContexts
field to desired active contexts.
API
The request for a
Sessions
type detectIntent
call contains a queryParameters.contexts
field,
which is used to set active contexts.
The following is a REST JSON example of a detectIntent
request:
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" } }] } }
At any time,
you can also call the create, delete, and update methods on the
Contexts
type.
Get contexts at runtime
Fulfillment
When your webhook service receives a
WebhookRequest
,
the queryResult.outputContexts
field contains the active contexts.
API
The response to a
Sessions
type detectIntent
call contains a
queryResult.outputContexts
field,
which provides the list of active contexts.
The following is a REST JSON example of a detectIntent
response:
{ "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", } }
At any time,
you can also call the get and list methods on the
Contexts
type.