# Errores y límites

## Qué ve el contacto

Si una expresión no se puede calcular (por ejemplo, una variable contiene texto en lugar de un número o la función no existe), el contacto ve un espacio vacío en ese lugar. Si hay una errata (un paréntesis sin cerrar), la inserción se queda en el texto tal como está escrita. En ambos casos, el motivo aparece en la vista previa del bot y en el registro del bloque, y el resto del mensaje se envía con normalidad.

El bot trata un texto como expresión cuando contiene una variable con `$` o una llamada a una función, como `round(`. Si no tiene ninguna de las dos (por ejemplo, `{{#each items}}`), el bot deja el texto tal como está escrito y no lo cuenta como error. Así no se rompen los textos que usan llaves para otra cosa.

## Dónde encontrar el motivo

- **Editor del bloque.** Mientras escribes, las partes de una inserción se resaltan en colores, y la que no va a funcionar se subraya en rojo con el motivo debajo del campo.
- **Vista previa del bot.** Haz clic en «Probar el bot» en el constructor y recorre el flujo. Si una inserción falla, debajo del chat aparece un recuadro amarillo con el nombre del bloque (un enlace a él en el lienzo), la propia inserción y el motivo.
- **Registro del bloque.** En los bloques que guardan un registro (Solicitud HTTP y otros), los errores de las plantillas se anotan en el registro de ejecución, en la sección «Errores de plantilla».

## Errores frecuentes

| Qué se escribió | Qué está mal | Cómo corregirlo |
|---|---|---|
| Un nombre de variable con espacios escrito con `$` | Después de `$` el bot lee el nombre solo hasta el espacio | `{{ var("Nombre del cliente") }}`, consulta [nombres con espacios](https://support.cleverapp.pro/es/chatbots/templates/data#si-el-nombre-de-una-variable-tiene-espacios) |
| Una variable global escrita sin `global` en una expresión | En las expresiones, las variables globales solo se leen con la función | `{{ global("Tasa (USD)") * 2 }}` |
| `{{ round($precio * 0.9 }}` | El paréntesis no está cerrado | `{{ round($precio * 0.9) }}` |
| `{{ discount($precio, 10) }}` | Esa función no existe | Comprueba el nombre en la [referencia de funciones](https://support.cleverapp.pro/es/chatbots/templates/functions) |
| `{{ $ciudad * 2 }}` | La variable contiene texto, no un número | Asegúrate de que la variable contiene un número |
| `{{ phone + 1 }}` sin teléfono | Valor vacío | Añade una alternativa: `{{ (phone ?? 0) + 1 }}` |
| `{{ upper(getInviteLink()) }}` en un botón | Los botones solo admiten funciones simples | Pasa el enlace al texto del mensaje |
| `{{ $a > 1 ? messageToTelegram("...") : "" }}` | Las funciones que envían mensajes o escriben variables no pueden ir dentro de una expresión | Usa la función como una inserción aparte |

## Límites

| Qué | Límite |
|---|---|
| Longitud de la expresión dentro de `{{ ... }}` | 1000 caracteres. Un texto más largo se queda tal como está escrito |
| Resultado de una inserción | 10 000 caracteres además de la longitud de las variables leídas. El valor de una variable se muestra completo, sea cual sea su longitud, también con `var()`, con `trim`, `upper` o `len` aplicados y con texto añadido: `{{ $x ~ "!" }}` |
| Expresiones en un texto | 200 |
| Funciones en un texto | 100 simples y 10 de las demás. Por encima del límite, las funciones no se ejecutan: una inserción aislada como `{{ getInviteLink() }}` se queda en el texto tal como está escrita y, dentro de una expresión, la función da un espacio vacío y un error en el registro. Leer una variable (`$nombre`, `var()`, `global()`) no cuenta como función |

Las expresiones no admiten expresiones regulares (`matches`), rangos (`1..10`) ni el acceso a los datos internos de la plataforma.
