# Intérprete de JavaScript

El bloque ejecuta tu código JavaScript: hace cálculos, transforma datos, cambia las variables y etiquetas del contacto y decide por dónde sigue el flujo. El bloque en sí no envía nada al chat, solo lo que envíes desde el código.

![Panel de configuración del bloque «Intérprete de JavaScript»](https://support.jetbot24.ru/_media/es/01-chatbots/03-blocks/06-developer/_images/javascript.webp?v=1792562451)

## Configuración

El bloque tiene un solo campo: el editor de código. Empieza a escribir el nombre de una función y el editor te propondrá cómo completarlo.

![Editor de código con una sugerencia: para «setCon» propone setContactTag() y setContactVariable()](https://support.jetbot24.ru/_media/es/01-chatbots/03-blocks/06-developer/_images/javascript-hint.webp?v=1792562451)

## Qué puede usar el código

Los datos del contacto llegan como variables ya preparadas. Todos los valores son cadenas. Si al contacto le falta algún dato, la variable no existe: compruébalo con `typeof phone !== 'undefined'`.

| Variable | Qué contiene |
|---|---|
| `id` | El ID del contacto en la plataforma |
| `name`, `first_name`, `last_name` | El nombre completo, la primera palabra del nombre, la segunda palabra |
| `phone`, `email`, `address` | Teléfono, email, dirección |
| `username` | El nombre de usuario en el canal |
| `telegram_id`, `max_id` | El ID de la persona en Telegram y en MAX |
| `created_at` | La fecha en que apareció el contacto, con el formato `2026-01-31 12:00:00` |
| `bot_id` | El ID del bot |

Funciones:

| Función | Qué hace |
|---|---|
| `getContactVariable(name)` | Devuelve el valor de una variable del contacto, o `undefined` si no existe. El valor es una cadena: envuélvelo en `Number()` para hacer cálculos |
| `setContactVariable(name, value)` | Escribe una variable del contacto. El valor es una cadena, un número o `true`/`false`. Convierte antes un objeto o un array en cadena: `JSON.stringify(value)` |
| `deleteContactVariable(name)` | Elimina una variable del contacto |
| `getContactTags()` | Devuelve un array con las etiquetas del contacto |
| `hasContactTag(name)` | `true` si el contacto tiene la etiqueta |
| `setContactTag(name)` | Añade una etiqueta |
| `deleteContactTag(name)` | Quita una etiqueta |
| `getGlobalVariable(name)` | Devuelve una variable global del bot |
| `setGlobalVariable(name, value)` | Escribe una variable global. El valor se guarda como cadena |
| `deleteGlobalVariable(name)` | Elimina una variable global |
| `sendMessage(text)` | Envía un texto al contacto. Hasta diez mensajes por ejecución |
| `goToBlock(id)` | Lleva al contacto al bloque con el ID indicado. Se puede llamar una vez por ejecución |
| `disableContinue()` | Desactiva la conexión «Continuar» en esta ejecución |
| `hash_hmac(algo, text, key, format)` | Una firma HMAC. El algoritmo es `md5`, `sha1`, `sha256`, `sha512` o `md4`. El resultado es hexadecimal, o Base64 si pasas `'base64'` como cuarto parámetro |
| `base64_encode(text)`, `base64_decode(text)` | Codificación y decodificación Base64 |

Los parámetros, los valores devueltos y ejemplos de cada función están en la sección [API de JavaScript](https://support.jetbot24.ru/es/api/javascript).

Las variables y las etiquetas se escriben en el contacto cuando el código termina sin errores. Dentro del código, `getContactVariable` ya ve el valor que acabas de escribir.

Calcular un precio con descuento y guardar el resultado:

```js
var price = Number(getContactVariable('price'));
var total = Math.round(price * 0.9);
setContactVariable('total', total);
```

El siguiente bloque mostrará el resultado con la [plantilla](https://support.jetbot24.ru/es/chatbots/templates) `{{ $total }}`.

Enviar a un contacto con una etiqueta por otra rama:

```js
if (hasContactTag('vip')) {
    goToBlock(12345);
    disableContinue();
}
```

Sustituye `12345` por el ID del bloque que necesites: se muestra en la configuración del bloque. `goToBlock` por sí solo no cancela la conexión «Continuar»: sin `disableContinue()`, el bot ejecuta tanto el bloque indicado como el conectado a «Continuar».

## Salidas

- «Continuar»: se activa cuando el código se ha ejecutado, salvo que el código haya llamado a `disableContinue()`.

## Límites

- El lenguaje es JavaScript del estándar ES5: sin `let` ni `const`, sin funciones flecha ni plantillas literales.
- Las expresiones regulares no admiten lookahead, lookbehind ni referencias inversas; los detalles están en [Lenguaje](https://support.jetbot24.ru/es/api/javascript#lenguaje).
- El código tiene hasta 16 384 caracteres.
- El código dispone de 5 segundos para ejecutarse. Si no termina a tiempo, se detiene con un error.
- El código no puede hacer solicitudes de red: para eso está el bloque «Solicitud HTTP».

## Si el código no funciona

Abre el «Registro de ejecución» en la configuración del bloque. Cada entrada muestra el código fuente, la lista de acciones realizadas y el valor de la última expresión. Esto ayuda a depurar: añade el nombre de una variable al final del código y su valor aparecerá en el registro.

![«Registro de ejecución» del bloque JavaScript: código fuente, valor de la última expresión y lista de acciones](https://support.jetbot24.ru/_media/es/01-chatbots/03-blocks/06-developer/_images/javascript-log.webp?v=1792562451)

> [!WARNING]
> Si el código termina con un error, su texto se envía al contacto en el chat y el flujo sigue por la conexión «Continuar». Prueba el código en la vista previa del bot antes de usarlo con personas reales.
