> ## Documentation Index
> Fetch the complete documentation index at: https://mozdocs.mozartfintech.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Establecer variable

El bloque "Establecer variable" te permite asignar un valor particular a una variable.

<Frame>
  <img src="https://mintlify.s3-us-west-1.amazonaws.com/mozartfintech/images/blocks/logic/set-variable.png" alt="Establecer variable" />
</Frame>

## Personalizado

Puedes establecer tu variable con cualquier valor usando `Personalizado`. Puede ser cualquier tipo de texto plano, pero también **código Javascript**.

### Expresiones con variables existentes

Esto significa que puedes aplicar operaciones sobre variables existentes.

Agregar un valor a tu variable:

```
{{Puntaje}} + 5
```

Calcular una suma de variables:

```
{{Puntaje}} + {{Respuesta}}
```

Multiplicar dos variables:

```
{{Puntaje}} * {{Multiplicador}}
```

Calcular un porcentaje:

```
{{Puntaje}} * 100 / {{Maximo Puntaje}}
```

Extraer el primer nombre de un nombre completo:

```
{{Nombre completo}}.split(' ')[0]
```

Transformar una variable existente a mayúsculas o minúsculas:

```
{{Nombre}}.toUpperCase()
```

```
{{Nombre}}.toLowerCase()
```

Esto también puede ser código Javascript. Leerá el valor devuelto del código y lo asignará a tu variable.

```js
const nombre = 'John' + 'Smith'
return nombre
```

Si no proporcionas la palabra clave `return`, esta se añadirá automáticamente al comienzo de tu código.

```js
'John' + 'Smith'
```

es lo mismo que

```js
return 'John' + 'Smith'
```

<Info>
  Las variables en el script no se analizan, se evalúan. Por lo tanto, deben tratarse como si fueran variables reales de Javascript.

  Entonces, si escribes `"{{Mi variable}}"`, analizará el ID de la variable (algo como `vclfqgqkdf000008mh3r6xakty`). Necesitas eliminar las comillas dobles para obtener correctamente el valor del contenido de la variable.

  Por ejemplo,

  * ❌ `"{{URL base}}/path"` => `vclfqgqkdf000008mh3r6xakty/path`
  * ✅ `{{URL base}} + '/path'` => `https://domain.com/path`
  * ✅ `` `${{{URL base}}}/path` `` => `https://domain.com/path`
</Info>

<Info>
  El contenido de las variables puede ser una cadena o una lista de cadenas.
  Consulta [Tipos de valores válidos](../../variables#valid-value-types) para
  más información.
</Info>

## Vaciar

Restablece tu variable como si nunca hubiera sido inicializada.

## Agregar valor(es)

Un valor conveniente que transforma automáticamente tu variable en una lista de cadenas. Agregará el/los valor(es) a la lista.

3 casos posibles aquí:

* Si la variable está vacía, creará un nuevo array con el/los valor(es) proporcionado(s).
* Si la variable no es un array, creará un nuevo array con el valor existente seguido del/los valor(es) proporcionado(s).
* Si la variable es un array, concatenará el/los valor(es) proporcionado(s) al array existente.

## Nombre del entorno

Esto establecerá tu variable con `web` o `whatsapp` dependiendo del entorno.

## Transcripción

Este valor preestablecido guardará toda la transcripción de la conversación en una variable. Es muy útil para proporcionar contexto a un bloque de IA o para enviarlo como un resumen con el bloque [Enviar correo electrónico](../integrations/send-email).

## ID del resultado

Esto establecerá tu variable con el ID del resultado actual. El ID del resultado es el ID que corresponde a una fila de tu tabla de [Resultados](../../../results/overview.mdx). Puede considerarse como un ID de usuario para el usuario que está chateando actualmente.

## Ayer, Ahora, Mañana

Esto establecerá tu variable con la fecha y hora especificadas en formato ISO. Opcionalmente, puedes proporcionar una zona horaria para convertir la fecha a la zona horaria especificada.

## ID aleatorio

Esto establecerá tu variable con un ID aleatorio usando el algoritmo CUID.

## Momento del día

Establecerá tu variable con uno de estos valores según la hora del día del usuario: `mañana`, `tarde`, `noche`.

Luego puedes usar esta variable para mostrar contenido condicionalmente:

<Frame style={{ maxWidth: '400px' }}>
  <img src="https://mintlify.s3-us-west-1.amazonaws.com/mozartfintech/images/blocks/logic/moment-condition.png" alt="Condición de momento del día" />
</Frame>

## Mapear elemento con el mismo índice

Este es un bloque de valor conveniente que te permite obtener fácilmente un elemento de una lista que tiene el mismo índice que un elemento de otra lista.

Cuando estás obteniendo datos de otro servicio, a veces tendrás 2 listas: `Etiquetas` e `Ids`. Las etiquetas son los datos mostrados al usuario y los Ids son los datos utilizados para otras solicitudes a ese servicio externo.

Este bloque de valor te permite encontrar el `Id` de `Ids` con el mismo índice que `Etiqueta` en `Etiquetas`.

<Frame>
  <img src="https://mintlify.s3-us-west-1.amazonaws.com/mozartfintech/images/blocks/logic/set-variable-map-item.png" alt="Mapear elemento con el mismo índice" />
</Frame>

## Número de teléfono

Solo disponible en WhatsApp. Esto establecerá tu variable con el número de teléfono del usuario.

## Nombre del contacto

Solo disponible en WhatsApp. Esto establecerá tu variable con el nombre del usuario.

## Guardar en resultados

Por defecto, las nuevas variables no se persisten en la tabla de [Resultados](../../../results). Solo se almacenan para la sesión de chat del usuario actual. Habilitar esta opción guardará la variable en la tabla `Resultados`.

## Ejecutar en el cliente

Esta opción es útil cuando deseas ejecutar el código personalizado en el lado del cliente. Esto solo es necesario cuando necesitas acceder a la información del navegador del usuario. Por lo tanto, si necesitas acceso a `window`, `document`, `navigator`, etc., debes habilitar esta opción.

## Obtener la ubicación geográfica del usuario

Para esto puedes proporcionar el siguiente código personalizado:

```js
function obtenerUbicacion() {
  return new Promise((resolver) => {
    navigator.geolocation.getCurrentPosition(
      (posicion) =>
        resolver(`${posicion.coords.latitude}, ${posicion.coords.longitude}`),
      (error) => resolver('error'),
      { enableHighAccuracy: true, timeout: 5000 }
    )
  })
}

const coordenadas = await obtenerUbicacion()

// Verificar si hay error
if (coordenadas === 'error') {
  return 'No se pudo obtener la ubicación'
}

return coordenadas
```

Esta función personalizada solo puede funcionar cuando se ejecuta en el navegador del cliente, por lo que debes asegurarte de habilitar la opción "Ejecutar en el cliente".
