# Управление переменными в функциях и сценариях

Действие **Управление переменными** позволяет автоматически менять пользовательские переменные во время работы агента.

Это основной способ поддерживать значения в актуальном состоянии без ручного редактирования. Например, через это действие можно сохранить имя клиента, записать номер заказа, округлить стоимость, обновить JSON с данными заявки или очистить служебную переменную до значения по умолчанию.

## Где доступно это действие

Действие **Управление переменными** можно использовать:

* в функциях;
* в сценариях.

С его помощью можно изменять и переменные области `Агент`, и переменные области `Диалог`.

<figure><img src="/files/wv8w4zLfy5iDk2JumrkE" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ccmkG8qCMpdyI0AfHjii" alt=""><figcaption></figcaption></figure>

## Что настраивается в действии

В каждом блоке изменения настраиваются четыре основные части:

1. какую переменную изменить;
2. что с ней сделать;
3. откуда взять значение;
4. при каких условиях выполнять изменение.

## 1. Какую переменную изменить

В этом поле вы выбираете нужную пользовательскую переменную из списка.

Можно выбрать:

* переменную агента;
* переменную диалога.

## 2. Что сделать с переменной

Набор доступных операций зависит от типа переменной.

Не обязательно запоминать весь список действий. Достаточно понимать общий принцип: для каждого типа доступны только те изменения, которые логичны именно для него.

### Строка

Для строковых переменных обычно используются такие операции:

* заменить значение;
* очистить переменную;
* дописать текст к текущему значению.

### Число

Для числовых переменных обычно используются такие операции:

* заменить значение;
* прибавить или вычесть число;
* округлить значение.

### Логическое значение

Для логических переменных обычно используются такие операции:

* установить `Да`;
* установить `Нет`;
* переключить текущее значение.

### JSON

Для JSON-переменных обычно используются такие операции:

* изменить поле;
* добавить новое поле;
* добавить элементы в массив;
* удалить значение или поле.

### Дата и время

Для переменных даты и времени обычно используются такие операции:

* поставить текущую дату или время;
* сдвинуть значение вперёд;
* сдвинуть значение назад.

{% hint style="info" %}
Если в действии используется очистка переменной, она возвращается к значению по умолчанию.
{% endhint %}

## 3. Откуда взять значение

В поле **Откуда взять значение** доступны четыре основных источника:

1. **Ввести вручную** — вы сами вводите нужное значение.
2. **Взять из параметра функции** — значение подставляется из параметра функции.
3. **Взять из системной переменной** — значение берётся из системных данных платформы.
4. **Взять из пользовательской переменной** — в выбранную переменную записывается значение другой пользовательской переменной.

Это позволяет строить не только простые записи, но и целые цепочки изменений внутри одного действия.

## 4. Дополнительные условия

Блок **Дополнительные условия** нужен, чтобы менять переменную не всегда, а только при нужной ситуации.

Например, изменение можно выполнять:

* если переменная пустая;
* если в переменной уже что-то есть;
* если значения равно чему-то.

Условия работают как фильтр перед выполнением действия.

Что важно:

* условий можно добавить несколько;
* изменение выполнится только тогда, когда соблюдены все добавленные условия.

<figure><img src="/files/xZH2znUMVO42wICFpkUu" alt=""><figcaption></figcaption></figure>

## Можно менять несколько переменных за одно действие

В одном действии можно добавить сразу несколько изменений переменных.

Это удобно, когда после одной функции или одного сценария нужно:

* записать имя клиента;
* сохранить номер заказа;
* обновить JSON с деталями заявки;
* передать нужные данные администратору в мессенджер.

## Порядок изменений имеет значение

Блоки изменения переменных можно менять местами перетягиванием.

Это важно, когда результат одного изменения должен использоваться в следующем.

Пример:

1. Сначала вы округляете числовое значение.
2. Потом записываете уже округлённый результат в нужную переменную.

Если поменять блоки местами, логика сработает по-другому.

## Практические примеры

### Сохранить имя клиента в переменную диалога

Подходит, если функция получает имя клиента отдельным параметром.

Логика:

1. Выберите переменную диалога `ClientName`.
2. В поле **Что сделать** выберите замену значения.
3. В поле **Откуда взять значение** выберите `Параметр функции`.
4. Укажите параметр с именем клиента.

После этого имя сохранится в конкретном диалоге и его можно будет использовать в промпте, отчётах, `Custom API` и `Python`.

### Не перезаписывать уже заполненную переменную

Подходит, если вы хотите записать значение только один раз.

Логика:

1. Выберите нужную переменную.
2. Настройте источник значения.
3. В **Дополнительных условиях** укажите `Если переменная пустая`.

Теперь значение будет записано только в том случае, если переменная ещё не заполнена.

### Очистить служебную переменную агента до значения по умолчанию

Подходит для сброса временных или служебных значений.

Логика:

1. Выберите переменную агента.
2. В поле **Что сделать** выберите очистку переменной.
3. Сохраните действие.

После выполнения переменная вернётся к значению по умолчанию.

### Сначала округлить цену, потом сохранить её в основную переменную

Подходит для сценариев, где нужно подготовить значение перед отправкой в CRM, `Custom API` или отчёт.

Один из удобных вариантов:

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

Тогда второе изменение будет работать уже с подготовленным значением.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.nextbot.ru/functional/setting-up-agent/polzovatelskie-peremennye/upravlenie-peremennymi-v-funkciyakh-i-scenariyakh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
