# Змінні

Змінні контакту зберігають дані однієї людини: місто, вибраний букет, суму замовлення. Глобальні змінні спільні для всього бота: адреса магазину, курс валюти, лічильник замовлень. Докладніше про те, де їх видно і як підставити в повідомлення, — у розділі [«Дані для підстановки»](https://support.watbot.org/uk/chatbots/templates/data).

Те, що записали функції, зберігається після того, як код завершився без помилки. Усередині коду читання вже бачить записане.

## getContactVariable

```js
getContactVariable(name)
```

Повертає значення змінної контакту.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я змінної, як у картці контакту. Пробіли й кириличні літери допустимі |

**Повертає** значення рядком або `undefined`, якщо в контакту немає такої змінної. Для розрахунків обгорніть значення в `Number()`.

```js
var count = Number(getContactVariable('кількість_троянд') || 0);

if (count >= 11) {
    setContactVariable('знижка', 10);
}
```

Якщо змінну записав цей самий код, функція поверне значення в тому вигляді, у якому його записали: число лишиться числом.

## setContactVariable

```js
setContactVariable(name, value)
```

Записує змінну контакту. Якщо змінної немає, вона з'явиться.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я змінної |
| `value` | Рядок, число, `true` або `false` | Значення |

**Нічого не повертає.**

Об'єкт, масив, `null` і `undefined` не зберігаються як є — змінна отримає порожнє значення. Щоб зберегти об'єкт або масив, перетворіть його на рядок, а під час читання розберіть назад:

```js
setContactVariable('кошик', JSON.stringify(['Троянди', 'Тюльпани']));

var cart = JSON.parse(getContactVariable('кошик') || '[]');
```

Логічні значення краще зберігати рядками, наприклад `'так'` і `'ні'`: `true` і `false` під час наступного читання в іншому блоці надійдуть рядками `'1'` і `''`.

## deleteContactVariable

```js
deleteContactVariable(name)
```

Видаляє змінну контакту.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я змінної |

**Нічого не повертає.** Після видалення `getContactVariable` з цим ім'ям поверне `undefined`.

```js
deleteContactVariable('промокод');
```

## getGlobalVariable

```js
getGlobalVariable(name)
```

Повертає значення глобальної змінної бота.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я глобальної змінної |

**Повертає** значення рядком або `undefined`, якщо такої змінної немає.

```js
var freeDelivery = Number(getGlobalVariable('безкоштовна_доставка_від') || 0);
var sum = Number(getContactVariable('сума_замовлення') || 0);

if (sum >= freeDelivery) {
    sendMessage('Доставка для вас безкоштовна.');
}
```

## setGlobalVariable

```js
setGlobalVariable(name, value)
```

Записує глобальну змінну бота. Якщо змінної немає, вона з'явиться. Значення одразу видно всім контактам бота.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я глобальної змінної |
| `value` | Будь-який | Значення. Зберігається рядком: число `5` стане `'5'`, а об'єкт — `'[object Object]'`, тому об'єкти перетворюйте на рядок через `JSON.stringify` |

**Нічого не повертає.**

```js
var orders = Number(getGlobalVariable('замовлень_сьогодні') || 0);
setGlobalVariable('замовлень_сьогодні', orders + 1);
```

> [!WARNING]
> Якщо код із таким записом виконується в кількох контактів одночасно, кожен прочитає те саме старе значення, і частина додавань загубиться. Для точного підрахунку такий лічильник не підходить.

## deleteGlobalVariable

```js
deleteGlobalVariable(name)
```

Видаляє глобальну змінну бота.

| Параметр | Тип | Що передати |
|---|---|---|
| `name` | Рядок | Ім'я глобальної змінної |

**Нічого не повертає.**

```js
deleteGlobalVariable('акція_дня');
```
