# Datos: Guardar variable, HTTP Request y Nodo código

> Datos: Guardar variable, HTTP Request y Nodo código

Source: https://docs.plazbot.com/kb/datos-guardar-variable-http-request-y-nodo-codigo

En el catálogo de nodos, la categoría **Datos** reúne tres herramientas para trabajar con información dentro de un flujo.

Nodo

Para qué sirve

**Guardar variable**

Crea o actualiza variables del contacto

**HTTP Request**

Hace una petición HTTP a una API externa

**Nodo código**

Ejecuta JavaScript (HTTP, API, lógica propia)

**Guardar variable** y **HTTP Request** son nodos de acciones con la acción ya puesta: _Editar campos_ y _Solicitud HTTP_. Puedes agregar más acciones en el mismo nodo.

[Watch the video on YouTube](https://www.youtube.com/watch?v=hLpvLPB7KWM)

## Guardar variable

1. Agrega **Guardar variable** y ábrelo.
2. En la acción **Editar campos**, presiona **Abrir configuracion**.
3. Presiona **Agregar asignacion** (o **Agregar** si ya tienes alguna).
4. Elige el **Campo a editar**: campos del contacto (nombres, email…) o variables personalizadas.
5. Escribe el **Nuevo valor**. Para usar variables escribe `{{` y elige una de la lista.
6. Presiona **Guardar**.

Por cada asignación también puedes dejar el campo vacío o, en campos de fecha, sumar o restar minutos, horas o días a otra fecha.

### Sacar un valor de un JSON

Si una variable guarda un JSON (por ejemplo la respuesta de una API), activa el **modo JSON** con el botón de llaves `{ }`:

- **Variable JSON**: la variable que contiene el JSON.
- **Ruta de mapeo**: el camino hasta el dato, empezando con `/`. Ejemplo: con `{"usuario": {"nombre": "Ana"}}`, la ruta `/usuario/nombre` devuelve `Ana`.

## HTTP Request

1. Agrega **HTTP Request** y abre la acción **Solicitud HTTP**.
2. Elige el método: **GET**, **POST**, **PUT**, **PATCH** o **DELETE**.
3. Escribe la URL. Acepta variables: `https://api.tienda.com/clientes?email={{email}}`.
4. **Encabezados**: con **Agregar cabecera** defines pares _Key / Value_, por ejemplo `Authorization: Bearer {{ctc_token_crm}}`.
5. **Cuerpo** (POST, PUT, PATCH): el JSON que envías, con variables. En **Formato del cuerpo** eliges _JSON_ o _Formulario_ (x-www-form-urlencoded, solo clave/valor plano).
6. **Mapeo de Respuesta**: con **Agregar mapeo** indicas la **Ruta JSON** del dato (`/data/estado`) y la **Variable destino**. Usa `*` para recorrer listas (`/list/*/country`); en **Ver ejemplos de mapeo** tienes más casos.
7. Presiona **Guardar**.

Si la API responde con error o no responde, el flujo **sigue** con el siguiente nodo, pero las variables del mapeo no se actualizan. Si necesitas actuar ante un error, valida la variable con una **Condición**.

## Nodo código

Para lógica más compleja, usa el **Nodo código**:

1. Agrégalo y presiona **Escribir codigo**. Se abre el **Editor de codigo** (JavaScript).
2. Programa con el objeto `$`:

```javascript
// Consulta el plan del cliente
const email = $.contactData.email;
const res = await fetch(`https://api.tienda.com/plan?email=${email}`);
const data = await res.json();

console.log('Plan:', data.plan);
$.setVariable('ctc_plan', data.plan);
```

Lo más usado del SDK:

Acceso

Qué es

`$.contactData.fullname`, `.email`, `.variables`

Datos del contacto

`$.conversation.lastMessage`

Último mensaje

`$.workspaceData.id` / `.name`

Workspace

`$.setVariable(code, val)`

Crea o actualiza una variable (también acepta el nombre)

`$.utils.jsonparse` / `jsonstringify`

JSON seguro

### Probar el código

- **Plantillas**: ejemplos listos (fetch a un servicio, leer variables y generar un texto, rango de fecha de hoy).
- **Datos de prueba**: valores ficticios para `$` (último mensaje, nombre, email, variables). No afectan contactos reales.
- **Ejecutar**: en **Salida** ves los `console.log`, cada `fetch` (con **ver respuesta**) y las variables que guardarías.
- **Guia rapida**: referencia del SDK.

El código tiene un límite de **10 segundos** por ejecución.
