# Ошибки и ограничения

## Что видит контакт

Если выражение посчитать не удалось — например, в переменной текст вместо числа или такой функции нет, — контакт увидит на этом месте пустоту. Если в записи опечатка (не закрыта скобка), вставка останется в тексте как написана. В обоих случаях причина появится в превью бота и журнале блока, а остальной текст сообщения отправится как обычно.

Выражением бот считает текст, в котором есть переменная через `$` или вызов функции, например `round(`. Если ни того ни другого нет — скажем, `{{#each items}}`, — бот оставит текст как написано и ошибкой его не считает. Так не ломаются тексты, где фигурные скобки нужны для другого.

## Где найти причину

- **Редактор блока.** Пока вы печатаете, части автоподстановки подсвечиваются цветом, а та, что не сработает, подчёркивается красным — под полем появляется причина.
- **Превью бота.** Нажмите «Проверить бота» в конструкторе и пройдите сценарий. Если вставка не сработала, под чатом появится жёлтый блок: название блока (ссылка на него в схеме), сама вставка и причина.
- **Журнал блока.** У блоков с журналом (HTTP-запрос и другие) ошибки автоподстановок записываются в журнал прогона, в раздел «Template errors».

## Частые ошибки

| Как написано | Что не так | Как исправить |
|---|---|---|
| Имя переменной с пробелами записано через `$` | Бот читает имя после `$` только до пробела | `{{ var("Имя клиента") }}`, см. [имена с пробелами](https://support.watbot.ru/chatbots/templates/data#если-в-имени-переменной-есть-пробелы) |
| Глобальная переменная в выражении записана без `global` | В выражениях глобальные переменные читаются только через функцию | `{{ global("Курс (USD)") * 2 }}` |
| `{{ round($цена * 0.9 }}` | Не закрыта скобка | `{{ round($цена * 0.9) }}` |
| `{{ discount($цена, 10) }}` | Такой функции нет | Проверьте название в [справочнике функций](https://support.watbot.ru/chatbots/templates/functions) |
| `{{ $город * 2 }}` | В переменной текст, а не число | Проверьте, что в переменной число |
| `{{ phone + 1 }}` при пустом телефоне | Пустое значение | Задайте запасное: `{{ (phone ?? 0) + 1 }}` |
| `{{ upper(getInviteLink()) }}` в кнопке | В кнопках доступны только простые функции | Вынесите ссылку в текст сообщения |
| `{{ $a > 1 ? messageToTelegram("...") : "" }}` | Функции, которые отправляют сообщения или записывают переменные, нельзя ставить внутрь выражения | Используйте функцию отдельной вставкой |

## Ограничения

| Что | Предел |
|---|---|
| Длина выражения внутри `{{ ... }}` | 1000 символов. Длиннее — текст остаётся как написан |
| Результат одной вставки | 10 000 символов сверх длины прочитанных переменных. Значение переменной выводится целиком любой длины, в том числе через `var()`, с `trim`, `upper`, `len` над ним и с припиской: `{{ $x ~ "!" }}` |
| Выражений в одном тексте | 200 |
| Функций в одном тексте | 100 простых и 10 остальных. Сверх предела функции не выполняются: отдельная вставка вроде `{{ getInviteLink() }}` останется в тексте как написана, а внутри выражения на месте функции будет пустота и ошибка в журнале. Чтение переменной (`$имя`, `var()`, `global()`) функцией не считается |

В выражениях недоступны регулярные выражения (`matches`), диапазоны (`1..10`) и обращение к внутренним данным платформы.
