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

Блок выполняет ваш код на JavaScript: считает, преобразует данные, меняет переменные и теги контакта, решает, куда сценарию идти дальше. Сам по себе блок ничего не отправляет в чат — только то, что вы отправите из кода.

![Панель настроек блока «Интерпретатор JavaScript»](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/javascript.webp?v=1791781230)

## Настройки

В блоке одно поле — редактор кода. Начните набирать имя функции, и редактор предложит подсказку.

![Редактор кода с подсказкой: на «setCon» предложены setContactTag() и setContactVariable()](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/javascript-hint.webp?v=1791781230)

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

Данные контакта — готовые переменные. Все значения — строки. Если у контакта чего-то нет, переменной не будет — проверяйте через `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.ru/api/javascript).

Переменные и теги записываются контакту после того, как код отработал без ошибок. Внутри кода `getContactVariable` уже видит значение, которое вы только что записали.

Посчитать цену со скидкой и сохранить результат:

```js
var price = Number(getContactVariable('цена'));
var total = Math.round(price * 0.9);
setContactVariable('итог', total);
```

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

Отправить контакта с тегом в отдельную ветку:

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

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

## Выходы

- «Продолжить» — срабатывает после выполнения кода, если код не вызвал `disableContinue()`.

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

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

## Если код не работает

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

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

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