A *session* represents a conversation between a Dialogflow agent and an end-user.
You can create special entities, called *session entities*, during a session.
Session entities can extend or replace custom entity types
and only exist during the session that they were created for.
All session data, including session entities, is stored by Dialogflow for 20 minutes.

For example, if your agent has a `@fruit` entity type
that includes "pear" and "grape",
that entity type could be updated to include "apple" or "orange",
depending on the information your agent collects from the end-user.
The updated entity type would have the "apple" or "orange" entity entry
for the rest of the session.

## Creating session entities with fulfillment

You can create session entities with
[fulfillment](https://docs.cloud.google.com/dialogflow/docs/fulfillment-overview).
The
[`WebhookResponse`](https://docs.cloud.google.com/dialogflow/docs/reference/common-types#webhookresponse)
type contains a field called `sessionEntityTypes`
that is used to set session entities.

The following examples show how to set a `fruit` entity type's
entity entries to `apple` and `orange` for the current session.

### Example WebhookResponse:

```
{
  "fulfillmentMessages": [
    {
      "text": {
        "text": [
          "Choose apple or orange"
        ]
      }
    }
  ],
  "sessionEntityTypes":[
    {
      "name":"projects/project-id/agent/sessions/session-id/entityTypes/fruit",
      "entities":[
        {
          "value":"APPLE_KEY",
          "synonyms":[
            "apple",
            "green apple",
            "crabapple"
          ]
        },
        {
          "value":"ORANGE_KEY",
          "synonyms":[
            "orange"
          ]
        }
      ],
      "entityOverrideMode":"ENTITY_OVERRIDE_MODE_OVERRIDE"
    }
  ]
}
```

### Example using the Actions on Google client library:

If you are using the
[Actions on Google client library](https://github.com/actions-on-google/actions-on-google-nodejs),
you can use the [Session Entities plugin](https://github.com/actions-on-google/dialogflow-session-entities-plugin-nodejs).

Your code would look similar to the following:

```
const { sessionEntitiesHelper } = require('actions-on-google-dialogflow-session-entities-plugin')

const app = dialogflow()
    .use(sessionEntitiesHelper())

app.intent('input.welcome', (conv) => {
  conv.ask('make your choice: apple or orange?');
  // Set the fruit session entity values to 'apple' and 'orange'.
  conv.sessionEntities.add({
    name: 'fruit',
    entities: [{
      value: 'APPLE_KEY',
      synonyms: [
        'apple', 'green apple', 'crabapple'
      ]
    }, {
      value: 'ORANGE_KEY',
      synonyms: ['orange']
    }]
  });
  conv.sessionEntities.send();
});
```

## Creating session entities with the API

> [!NOTE]
> **Note:** Session entity API methods do not work with Google Assistant integration. Use the fulfillment option for Google Assistant integration.

You create, manage, and update session entities using the
[`SessionEntityTypes`](https://docs.cloud.google.com/dialogflow/docs/reference/common-types#sessionentitytypes)
type.