# Інтерпретатор JavaScript

Блок виконує ваш код на JavaScript: рахує, перетворює дані, змінює змінні й теги контакту, вирішує, куди сценарію йти далі. Сам по собі блок нічого не надсилає в чат — лише те, що ви надішлете з коду.

![Панель налаштувань блоку «Інтерпретатор JavaScript»](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/javascript.webp?v=1791781231)

## Налаштування

У блоці одне поле — редактор коду. Почніть набирати ім'я функції, і редактор запропонує підказку.

![Редактор коду з підказкою: на «setCon» запропоновано setContactTag() і setContactVariable()](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/javascript-hint.webp?v=1791781231)

## Що доступно коду

Дані контакту — готові змінні. Усі значення — рядки. Якщо в контакту чогось немає, змінної не буде — перевіряйте через `typeof phone !== 'undefined'`.

| Змінна | Що в ній |
|---|---|
| `id` | ID контакту на платформі |
| `name`, `first_name`, `last_name` | Ім'я цілком, перше слово імені, друге слово |
| `phone`, `email`, `address` | Телефон, пошта, адреса |
| `username` | Ім'я користувача в месенджері |
| `telegram_id`, `max_id` | ID людини в Telegram і MAX |
| `created_at` | Дата появи контакту у вигляді `2026-01-31 12:00:00` |
| `bot_id` | ID бота |

Функції:

| Функція | Що робить |
|---|---|
| `getContactVariable(name)` | Повертає значення змінної контакту або `undefined`, якщо її немає. Значення — рядок: для розрахунків огорніть у `Number()` |
| `setContactVariable(name, value)` | Записує змінну контакту. Значення — рядок, число або `true`/`false`. Об'єкт або масив спочатку перетворіть на рядок: `JSON.stringify(value)` |
| `deleteContactVariable(name)` | Видаляє змінну контакту |
| `getContactTags()` | Повертає масив тегів контакту |
| `hasContactTag(name)` | `true`, якщо в контакту є тег |
| `setContactTag(name)` | Додає тег |
| `deleteContactTag(name)` | Знімає тег |
| `getGlobalVariable(name)` | Повертає глобальну змінну бота |
| `setGlobalVariable(name, value)` | Записує глобальну змінну. Значення зберігається рядком |
| `deleteGlobalVariable(name)` | Видаляє глобальну змінну |
| `sendMessage(text)` | Надсилає контакту текст. За один запуск — до десяти повідомлень |
| `goToBlock(id)` | Переводить контакт у блок із зазначеним ID. Викликати можна один раз за запуск |
| `disableContinue()` | Вимикає зв'язок «Продовжити» для цього запуску |
| `hash_hmac(algo, text, key, format)` | Підпис HMAC. Алгоритм — `md5`, `sha1`, `sha256`, `sha512` або `md4`. Результат — у шістнадцятковому вигляді, а якщо четвертим параметром передати `'base64'` — у Base64 |
| `base64_encode(text)`, `base64_decode(text)` | Кодування та розкодування Base64 |

Параметри, значення, що повертаються, і приклади кожної функції — у розділі [«JavaScript API»](https://support.watbot.org/uk/api/javascript).

Змінні й теги записуються контакту після того, як код відпрацював без помилок. Усередині коду `getContactVariable` уже бачить значення, яке ви щойно записали.

Порахувати ціну зі знижкою і зберегти результат:

```js
var price = Number(getContactVariable('ціна'));
var total = Math.round(price * 0.9);
setContactVariable('підсумок', total);
```

Наступний блок покаже результат [автопідстановкою](https://support.watbot.org/uk/chatbots/templates) `{{ $підсумок }}`.

Відправити контакт із тегом в окрему гілку:

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

Замість `12345` підставте ID потрібного блоку — його видно в налаштуваннях блоку. `goToBlock` сам по собі не скасовує зв'язок «Продовжити»: без `disableContinue()` бот виконає і зазначений блок, і той, що підключений до «Продовжити».

## Виходи

- «Продовжити» — спрацьовує після виконання коду, якщо код не викликав `disableContinue()`.

## Обмеження

- Мова — JavaScript стандарту ES5: без `let` і `const`, стрілкових функцій і шаблонних рядків.
- Регулярні вирази — без перегляду вперед і назад і без зворотних посилань, докладніше — у розділі [«Мова»](https://support.watbot.org/uk/api/javascript#мова).
- Код — до 16 384 символів.
- На виконання — 5 секунд. Код, який не вклався, зупиняється з помилкою.
- Запитів у мережу з коду зробити не можна — для цього є блок «HTTP-запит».

## Якщо код не працює

Відкрийте «Лог виконання» в налаштуваннях блоку. У записі видно вихідний код, список виконаних дій і значення останнього виразу — його зручно використовувати для налагодження: допишіть у кінець коду ім'я змінної, і її значення потрапить у лог.

![«Лог виконання» блока JavaScript: вихідний код, значення останнього виразу і список дій](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/javascript-log.webp?v=1791781231)

> [!WARNING]
> Якщо код завершився з помилкою, її текст піде контакту в чат, а сценарій піде далі за зв'язком «Продовжити». Перевіряйте код у попередньому перегляді бота, перш ніж запускати його на людях.
