# Помилки та обмеження

## Що бачить контакт

Якщо вираз не вдалося порахувати — наприклад, у змінній текст замість числа або такої функції немає, — контакт побачить на цьому місці порожнечу. Якщо в записі помилка (не закрита дужка), вставка залишиться в тексті як написано. В обох випадках причина з'явиться в попередньому перегляді бота та журналі блоку, а решта тексту повідомлення надішлеться як завжди.

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

## Де знайти причину

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

## Поширені помилки

| Як написано | Що не так | Як виправити |
|---|---|---|
| Назву змінної з пробілами записано через `$` | Бот читає назву після `$` лише до пробілу | `{{ var("Ім'я клієнта") }}`, див. [назви з пробілами](https://support.watbot.org/uk/chatbots/templates/data#якщо-в-назві-змінної-є-пробіли) |
| Глобальну змінну у виразі записано без `global` | У виразах глобальні змінні читаються лише через функцію | `{{ global("Курс (USD)") * 2 }}` |
| `{{ round($ціна * 0.9 }}` | Не закрита дужка | `{{ round($ціна * 0.9) }}` |
| `{{ discount($ціна, 10) }}` | Такої функції немає | Перевірте назву в [довіднику функцій](https://support.watbot.org/uk/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`) і звернення до внутрішніх даних платформи.
