# User storage

In a webhook call, you can store parameter values for a specific user across
sessions in user storage. Your Action can then use those stored values later in
prompts and conditions, and your webhook code can access values in user storage
for a specific user when necessary.

The state of user storage is passed in an `app.handle()` request and is stored
in the [`user`](https://developers.google.com/assistant/conversational/reference/rest/v1/TopLevel/fulfill#User) object.

> [!WARNING]
> **Important: Obtain user consent prior to using user storage.** Some
> countries have regulations that require developers to obtain consent from
> the user before they can access or save certain information (like personal
> information) in user storage.
>
> If you operate in one of these countries and you want to access or save
> such information in user storage, you must first ask and obtain
> consent from the user. Do so by creating a scene that asks for consent and
> matches intents for *yes* and *no* responses.

## Read and write data across conversations

To update or set a new value in user storage, assign the value to the `params`
field of the `user` object in a webhook call. The following example sets
"exampleColor" to "red" in user storage:

### Node.js

```javascript
// Assign color to user storage
app.handle('storeColor', conv => {
  let color = 'red';
  conv.user.params.exampleColor = color;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "1234567890123456789",
      "params": {}
    },
    "prompt": {
      "override": false
    },
    "user": {
      "locale": "en-US",
      "params": {
        "verificationStatus": "VERIFIED",
        "exampleColor": "red"
      }
    }
  }
}
    
```

To access data stored in user storage, assign it to a variable in a webhook
call. The following example retrieves a value from "exampleColor" in user
storage:

### Node.js

```javascript
// Retrieve color from user storage
app.handle('getStoredColor', conv => {
  let color = conv.user.params.exampleColor;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "1234567890123456789",
      "params": {}
    },
    "prompt": {
      "override": false
    },
    "user": {
      "locale": "en-US",
      "params": {
        "verificationStatus": "VERIFIED",
        "exampleColor": "red"
      }
    }
  }
}
    
```

To clear a previously saved value, set the value to `null` in a webhook call.
The following example clears the value of "exampleColor" in user storage:

### Node.js

```javascript
// Clear color from user storage
app.handle('clearStoredColor', conv => {
  conv.user.params.exampleColor = null;
});
    
```

### JSON

```
{
  "responseJson": {
    "session": {
      "id": "1234567890123456789",
      "params": {}
    },
    "prompt": {
      "override": false
    },
    "user": {
      "locale": "en-US",
      "params": {
        "verificationStatus": "VERIFIED"
      }
    }
  }
}
    
```

## Reference stored values within prompts

You can reference values stored in user storage in a [prompt](https://developers.google.com/assistant/conversational/prompts). To reference the
value, use `$user.params.PARAMETER_NAME` syntax, where
`PARAMETER_NAME` is the name given in the webhook when the
parameter was set.

For example, you previously stored a color value in user storage as the
parameter `exampleColor`. To access that value in a prompt, you reference that
value using `$user.params.exampleColor`:

### JSON

```
{
  "candidates": [{
    "first_simple": {
      "variants": [{
        "speech": "Your favorite color is $user.params.exampleColor."
      }]
    }
  }]
}
    
```

## Reference stored values within conditions

You can also reference values stored in user storage in [conditions](https://developers.google.com/assistant/conversational/conditions). To
reference the value, use the `user.params.PARAMETER_NAME`
syntax, where `PARAMETER_NAME` is the name given in the
webhook when the parameter was set.

For example, you previously stored a color value in user storage as the
parameter `exampleColor`, and you want to match it with the value "red" in a
condition. In your condition, you reference the stored value using
`user.params.exampleColor`. Your condition expression then looks like this:

### Condition syntax

```
user.params.exampleColor == "red"
    
```

## Expiration of user storage data

For verified users, data stored in user storage expires based on their
[Web \& App Activity](https://support.google.com/googlenest/answer/7382500) settings and can also be cleared by the Action itself.
For users who aren't verified, Assistant clears the contents of user storage at
the end of the conversation.

Actions on Google sets the user's verification status at the start of each
conversation based on a variety of indicators when the conversation starts. As
one example, a user logged in to Google Assistant on their mobile device has a
verification status of `VERIFIED`.

The following are possible reasons for a user to have a verification status of
`GUEST`:

- The user has [personal results](https://support.google.com/googlehome/answer/7684543) turned off.
- The user disabled their [Web \& App Activity](https://support.google.com/googlenest/answer/7382500). Keep in mind that some users may have this setting disabled at the domain level.
- If a device has Voice Match enabled, and the match fails or the user invokes the Assistant without using their voice (such as a long press on a Nest Home device).
- The user isn't signed in.

Always check the user's verification status before storing data with user
storage to prevent guest users from interacting with a feature that will fail
for them.

## Visibility to users

As a user, you can view data stored in your user storage for Actions you invoke.
You can also remove data stored in your user storage from a specific Action or
stop the service from remembering you.

To view your stored data or to stop a service from remembering you, follow these
steps:

1. Go to the [Assistant directory](https://assistant.google.com/explore).
2. Find and select the Action you want to view or clear your user storage for.
3. Scroll to the bottom of the page:
   - To view the contents of your user storage, click **\[View stored data\]**.
   - To reset data stored in your user storage for the service, click **Reset**.
   - To remove data stored in your user storage and stop the service from remembering you, click **Stop *action_name* from remembering me**.