# Variables del contacto

Estos métodos leen, escriben y eliminan [variables del contacto](https://support.jetbot24.ru/es/chatbots/contacts/tags-variables#variables-del-contacto), las mismas que el bot rellena durante un flujo y muestra en la ficha del contacto. Por ejemplo, tu sitio web puede guardar un número de pedido en una variable, y el bot puede insertarlo en un mensaje como `{{ $order_number }}` (consulta [Plantillas](https://support.jetbot24.ru/es/chatbots/templates) para más detalles).

El ID del contacto (`contact_id`) aparece en el encabezado de la [ficha del contacto](https://support.jetbot24.ru/es/chatbots/contacts/card) y en la primera columna de la lista de contactos.

## getContactVariables

Devuelve todas las variables de un contacto.

```endpoint
GET POST https://app.jetbot24.ru/api/v1/getContactVariables
```

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `contact_id` | entero | sí | ID del contacto |

```bash title="Solicitud"
curl -X POST "https://app.jetbot24.ru/api/v1/getContactVariables" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"contact_id": 678}'
```
```json title="Respuesta 200"
{
  "data": [
    {
      "id": 17594321098765,
      "name": "city",
      "value": "Denver",
      "deletable": false,
      "variable": {
        "id": 17594321098765,
        "name": "Denver"
      }
    },
    {
      "id": 17594321112233,
      "name": "order_number",
      "value": "A-1024",
      "deletable": false,
      "variable": {
        "id": 17594321112233,
        "name": "A-1024"
      }
    }
  ]
}
```

| Campo | Descripción |
|---|---|
| `id` | ID de la variable para este contacto |
| `name` | Nombre de la variable |
| `value` | Valor |
| `deletable` | `true`: la variable se elimina después de enviar el bloque [Solicitud](https://support.jetbot24.ru/es/chatbots/blocks/notifications/notification) |
| `variable` | Campo heredado para integraciones antiguas: `id` es el ID de la variable y `name` es su **valor**. No lo uses en código nuevo |

Las variables se listan en el orden en que se crearon. Si no hay ninguna, `data` es un array vacío.

## setContactVariable

Escribe un valor en una variable del contacto. Si no hay ninguna variable con ese nombre, se crea; si la hay, se reemplaza su valor.

```endpoint
POST https://app.jetbot24.ru/api/v1/setContactVariable
```

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `contact_id` | entero | sí | ID del contacto |
| `name` | cadena | sí | Nombre de la variable, hasta 255 caracteres: letras, dígitos, `_` y espacios |
| `value` | cadena | sí | Valor, hasta 4096 caracteres. Pasa los números como cadenas: `"150"`, no `150` |
| `deletable` | `0` o `1` | no | `1`: eliminar la variable después de enviar el bloque «Solicitud». Por defecto, `0` |

```bash title="Solicitud"
curl -X POST "https://app.jetbot24.ru/api/v1/setContactVariable" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"contact_id": 678, "name": "order_number", "value": "A-1024"}'
```
```json title="Respuesta 200"
{
  "data": {
    "id": 17594321112233,
    "name": "order_number",
    "value": "A-1024",
    "deletable": false,
    "variable": {
      "id": 17594321112233,
      "name": "A-1024"
    }
  }
}
```
```json title="Respuesta 422"
{
  "message": "The contact already has 5000 variables — a new one cannot be added.",
  "error": "The contact already has 5000 variables — a new one cannot be added.",
  "code": "variables_limit",
  "errors": {
    "name": ["The contact already has 5000 variables — a new one cannot be added."]
  }
}
```

Detalles:

- No se puede escribir un valor vacío: `value` es obligatorio. Para vaciar una variable, elimínala con `deleteContactVariable`.
- Al escribir en una variable existente, también se sobrescribe `deletable`: si se omite el parámetro, pasa a ser `false`.
- El nombre de una variable nueva se añade a la lista «Sugerencias de variables de usuario» del bot, de modo que aparece en las sugerencias de la cuenta y en la [exportación de contactos](https://support.jetbot24.ru/es/chatbots/contacts/import-export). Si la lista ya tiene 5000 nombres, el nombre nuevo no se añade, pero la variable del contacto se escribe igualmente.
- Un contacto puede tener como máximo 5000 variables. Por encima de eso, el método no crea una nueva y responde con `422` y `code: "variables_limit"`. Escribir en una variable existente siempre funciona.
- Contacto no encontrado o eliminado, o su bot eliminado: `404`; contacto de un bot ajeno: `403`.

## deleteContactVariable

Elimina una variable del contacto por ID o por nombre.

```endpoint
POST https://app.jetbot24.ru/api/v1/deleteContactVariable
```

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `contact_id` | entero | sí | ID del contacto |
| `id` | entero | si falta `name` | ID de la variable obtenido de `getContactVariables` |
| `name` | cadena | si falta `id` | Nombre de la variable, hasta 255 caracteres |

Si se pasan ambos, se usa `name`; si no hay ninguna variable con ese nombre, se usa `id`.

```bash title="Solicitud"
curl -X POST "https://app.jetbot24.ru/api/v1/deleteContactVariable" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"contact_id": 678, "name": "order_number"}'
```

La respuesta tiene el estado `204` y no tiene cuerpo.

Detalles:

- Si el contacto no tiene esa variable, el método responde igualmente con `204`.
- El nombre no se quita de la lista de sugerencias del bot.
- Contacto no encontrado o eliminado, o su bot eliminado: `404`; contacto de un bot ajeno: `403`.

Los errores generales de la API se describen en [Errores](https://support.jetbot24.ru/es/api#errores).
