> For the complete documentation index, see [llms.txt](https://docs.suvvy.ai/ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.suvvy.ai/ru/osnovnye-nastroiki/prompts/peremennye-v-deistviyakh.md).

# Переменные в действиях

Как передать в действие номер сделки, телефон и другие данные диалога — и почему без вызова по триггеру это не сработает

Номер сделки `{lead_id}`, ссылка на диалог `{chat_link}`, телефон звонящего `{customer_phone}`, ваши пользовательские переменные — всё это хранится в диалоге. Подставляет их Савви не везде, и в действиях всё решает то, кто действие запускает: модель или триггер.

{% hint style="danger" %}
**В действие, которое вызывает модель, Савви переменные не подставляет.** Значения его аргументов пишет сама модель, а номера сделки или контакта она не знает. В шаг уходит пустое или неверное значение, и шаг CRM или веб-хук завершается ошибкой.

Если шагу нужен идентификатор из канала, значение должно прийти через действие **по триггеру**.
{% endhint %}

### Где переменные подставляются

| Где написана переменная                                              | Подставится ли значение                                                                          |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Инструкция агента                                                    | **Да**, если записать в двойных скобках: `{{ lead_id }}`. Модель получает уже готовое значение   |
| Блок **Задать значения переменных** в действии с вызовом по триггеру | **Да**, в одинарных скобках: `{lead_id}`                                                         |
| Аргументы действия, которое вызывает модель                          | **Нет.** Значения пишет модель                                                                   |
| **Описание аргумента**                                               | **Нет.** Модель прочитает описание буквально, вместе со скобками                                 |
| Поля шагов: URL и тело веб-хука, текст сообщения и другие            | **Нет.** Переменная уйдёт текстом — и в одинарных, и в двойных скобках                           |
| **Константы действия**                                               | **Нет.** Значение уходит как есть                                                                |
| Действие, которое запустил динамический фоллоу-ап                    | **Нет.** Даже значения из блока **Задать значения переменных** придут текстом в фигурных скобках |

В поле шага подставляется только то, что есть у самого действия: его аргументы, константы и переменные, которые записали предыдущие шаги этого же действия. Переменных канала в этом списке нет — в шаг они попадают только через аргумент.

### Почему модель не знает номер сделки

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

Вписать `{lead_id}` в описание аргумента не поможет: описание модель читает буквально, вместе со скобками, и номера сделки там не увидит.

### Какой способ выбрать

| Задача                                                                                                  | Способ                                                       |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| Действие запускается событием: новый диалог, конец звонка, фраза в сообщении клиента                    | Способ 1. Действие по триггеру                               |
| Момент выбирает модель: данные собраны, пора передать менеджеру                                         | Способ 2. Сигнал от модели и действие по триггеру            |
| Модель должна передать свои данные (комментарий, выбранный тариф, итог разговора) вместе с ID из канала | Способ 3. Данные от модели через пользовательскую переменную |

### Способ 1. Действие по триггеру

Подходит, когда действие запускает событие, а не решение модели.

{% stepper %}
{% step %}

#### Создайте аргумент

Откройте действие → вкладка **Переменные действия** → добавьте аргумент, например `lead_id`.
{% endstep %}

{% step %}

#### Включите вызов по триггеру

Вкладка **Условия срабатывания** → переключатель **Вызов по триггеру**. Выберите **Обязательное условие** и, если нужно, дополнительные. Подробнее об условиях — в статье Вызов действий по триггеру.
{% endstep %}

{% step %}

#### Задайте значение аргумента

Вернитесь на вкладку **Переменные действия**. Под списком аргументов появится блок **Задать значения переменных**. Напротив `lead_id` впишите `{lead_id}` или выберите переменную из списка: в нём системные, канальные и пользовательские переменные агента.

<figure><img src="https://1280958077-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCfQs1g1wTlkieX5CuhTI%2Fuploads%2FSyM4Z7obEpYPSlSodONF%2Fimage.png?alt=media&amp;token=7b1f86e6-4717-4736-9731-ae7b79f564e2" alt=""><figcaption></figcaption></figure>

Для аргументов не строкового типа значение обязательно: без него действие не сохранится.
{% endstep %}

{% step %}

#### Подставьте аргумент в шаг

Вкладка **Шаги действий** → в нужном поле шага, например **ID сделки** или URL веб-хука, выберите аргумент `lead_id`.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
Значение пишется в блоке **Задать значения переменных**, а не в **Описании аргумента**. Если вписать `{lead_id}` в описание, а значение оставить пустым, шаг получит пустой ID.
{% endhint %}

### Способ 2. Сигнал от модели и действие по триггеру

Подходит, когда момент выбирает модель, а шагу нужен ID из канала. Работу делят два действия. Первое вызывает модель, и оно ничего не делает в CRM — только служит сигналом. Второе запускается само сразу после ответа агента, получает ID из канала и выполняет шаги.

Пример для amoCRM: агент собрал данные клиента и передаёт обращение менеджеру. Нужно добавить в сделку саммари диалога и перевести её на этап «Согласование КП».

#### Действие 1 — сигнал

1. **Условия срабатывания** → **Вызов LLM-моделью**. Название функции, например `handoff_to_manager`. В описании — когда её вызывать.
2. **Шаги действий** → **Базовый шаг**. В текст результата впишите, что агент должен ответить клиенту:

```
Передано. Напиши клиенту только: Спасибо, детали передал специалисту. Он свяжется с вами.
```

Шагов CRM в этом действии нет.

#### Действие 2 — шаги в CRM

1. **Переменные действия** → аргумент `lead_id`.
2. **Условия срабатывания** → **Вызов по триггеру**:
   * **Обязательное условие** — «Новый ответ от агента»;
   * дополнительное условие — «Вызвана функция» равно `handoff_to_manager`.
3. **Переменные действия** → **Задать значения переменных**: `lead_id` = `{lead_id}`.
4. **Шаги действий** → два шага AmoCRM: «Отправить summary-примечание в заметки сделки» и «Изменить сделку» с нужными воронкой и статусом. В поле **ID сделки** обоих шагов выберите аргумент `lead_id`.

<figure><img src="https://1280958077-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCfQs1g1wTlkieX5CuhTI%2Fuploads%2FF5B2NUnY51ulD6qCbSrc%2Fimage.png?alt=media&amp;token=a557fc2c-085d-4dba-99c3-ccd888677942" alt=""><figcaption></figcaption></figure>

«Вызвана функция» проверяет только текущий ход. Действие 2 сработает один раз — сразу после ответа, в котором модель вызвала сигнал. При следующих ответах агента оно не повторится.

Если добавляете другие условия, которые должны выполняться вместе, ставьте их в ту же группу: отдельные группы работают через ИЛИ.

{% hint style="danger" %}
**Не включайте «Не отвечать при вызове» в действии-сигнале.** С этой настройкой агент не отвечает клиенту, событие «Новый ответ от агента» не наступает, и действие 2 не запускается. Сообщение, которое отправил шаг «Отправить сообщение», ответом агента тоже не считается.
{% endhint %}

{% hint style="info" %}
**Действие 2 выполняется уже после ответа агента.** Если оно завершится ошибкой, клиент об этом не узнает: агент уже написал, что передал детали специалисту. Чтобы ошибка не прошла незамеченной, проверьте, что в действии 2 на вкладке **Доп. настройки** включено **Уведомлять при ошибке**.
{% endhint %}

{% hint style="info" %}
**Если действие 2 само пишет клиенту** (например, присылает ссылку на оплату), клиент получит два сообщения: ответ агента и сообщение действия. Чтобы осталось одно, обойдитесь без сигнала: у действия по триггеру выберите обязательное условие «Новое сообщение от клиента», дополнительное — «LLM-инструкция» с описанием момента («клиент подтвердил, что готов оплатить») и включите **Не отвечать при вызове**. Цена — отдельный запрос к модели на проверку условия при каждом сообщении клиента, а решение о запуске принимает модель по вашему описанию.
{% endhint %}

{% hint style="warning" %}
Шаги AmoCRM доступны, когда amoCRM подключена к агенту в режиме интеграции: **Интеграции → CRM-системы → AmoCRM**. Это нужно сделать, даже если amoCRM уже подключена как канал. Подробнее — в статье amoCRM.
{% endhint %}

{% hint style="success" %}
Чтобы записать данные клиента в поля текущей сделки, ID не нужен: это делает сам канал, раздел **Заполнение сделки** в настройках канала amoCRM. Подробнее — в статье amoCRM.
{% endhint %}

### Способ 3. Данные от модели через пользовательскую переменную

Подходит, когда второму действию нужен не только ID из канала, но и то, что сформулировала модель: комментарий для менеджера, выбранный тариф, итог разговора. Модель кладёт данные в пользовательскую переменную, а действие по триггеру забирает их вместе с ID.

1. Создайте пользовательскую переменную, например `manager_note`.
2. В действии-сигнале из способа 2 добавьте аргумент `note` с описанием, что в него записать. Перед **Базовым шагом** добавьте шаг «Установить значения пользовательских переменных»: `manager_note` = аргумент `note`.
3. В действии по триггеру создайте аргументы `lead_id` и `note`. В блоке **Задать значения переменных**: `lead_id` = `{lead_id}`, `note` = `{manager_note}`.
4. Условия срабатывания — как в способе 2.

Текст пишет модель, а ID подставляет платформа, поэтому модель не может передать чужой или пустой номер сделки.

### Через инструкцию

Значение переменной модель видит, если вставить переменную в инструкцию. Тогда она может сама передать его в аргумент функции:

```
# ПРОВЕРКА ЗАПИСЕЙ
Телефон клиента: {{ customer_phone }}

Если клиент спрашивает про свою запись — вызови функцию yc_get_client_seances_by_phone и передай в неё телефон клиента. Повторно телефон не спрашивай.
```

{% hint style="danger" %}
**В инструкции — только двойные скобки.** По умолчанию в агентах включены шаблоны в инструкциях, и переменная в одинарных скобках `{customer_phone}` остаётся текстом. Модель видит буквально «{customer\_phone}», передаёт это в функцию и может написать клиенту. В блоке **Задать значения переменных**, наоборот, пишутся одинарные: `{customer_phone}`.
{% endhint %}

{% hint style="warning" %}
Здесь значение в аргумент переписывает модель, и она может его пропустить или передать другое число — такое случалось с номером контакта. Для номера сделки, контакта или чата используйте способы 1–3: в них значение подставляет платформа.
{% endhint %}

### Как проверить

**Значения вызова.** С какими значениями сработало действие, видно в экспорте диалога. Пустое значение (`lead_id=""`) значит, что значение не задано или действие вызвала модель. Текст в фигурных скобках (`{lead_id}`) значит, что такой переменной в этом диалоге нет или действие запустил динамический фоллоу-ап.

**Переменные канала.** Какие переменные передаёт канал, видно в шапке экспорта диалога. Подробнее — в статье [Переменные](/ru/osnovnye-nastroiki/prompts/prompts-1.md).

**Тестовый чат.** Канала в тестовом чате нет, поэтому нет и канальных переменных. Значения можно задать вручную: в шапке тестового чата нажмите значок **Переменные**, выберите канал и заполните поля. Для шагов CRM подставляйте ID настоящей тестовой сделки, а надёжнее всего проверять на ней же в самом канале.

### Частые ошибки

| Симптом                                                                 | Причина                                                                                                | Что сделать                                                                  |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| В вызове `lead_id=""`, шаг AmoCRM вернул «Неверные настройки»           | Действие вызывает модель, номера сделки она не знает                                                   | Способ 2                                                                     |
| `{lead_id}` записан в **Описании аргумента**, значение пустое           | Описание — подсказка для модели, значением оно не становится                                           | Перенести `{lead_id}` в блок **Задать значения переменных**                  |
| Во внешнюю систему уходит текст `{lead_id}`                             | Переменная вписана прямо в поле шага или в константу                                                   | Создать аргумент, задать ему значение по триггеру, подставить аргумент в шаг |
| Модель передала в функцию или написала клиенту текст `{lead_id}`        | Переменная записана в инструкции в одинарных скобках                                                   | Записать в двойных: `{{ lead_id }}`                                          |
| В значении аргумента пришёл текст `{lead_id}`                           | В этом диалоге такой переменной нет: другой канал, тестовый чат, запуск из динамического фоллоу-апа    | Проверить по шапке экспорта диалога, какие переменные передаёт канал         |
| Агент вызвал сигнал, но действие по триггеру не запустилось             | В сигнале включено **Не отвечать при вызове**: агент не ответил, и «Новый ответ от агента» не наступил | Выключить **Не отвечать при вызове** в сигнале                               |
| Действие по триггеру срабатывает, когда не должно                       | Условия стоят в разных группах, а группы работают через ИЛИ                                            | Условия, которые должны выполняться вместе, поставить в одну группу          |
| Модель не вызывает действие, функции нет в её списке                    | Действие переключено на **Вызов по триггеру**, такие действия модели не видны                          | Способ 2: модель вызывает отдельное действие-сигнал                          |
| Для аргумента нельзя выбрать тип «Изображение», «Документ» или «Список» | Вызов по триггеру эти типы не поддерживает                                                             | Аргументы этих типов — только у действий с вызовом моделью                   |

### Смотрите также

{% content-ref url="/pages/Q8TRNdBr9HxbBPclEDH2" %}
[Функции](/ru/osnovnye-nastroiki/prompts/prompts-2.md)
{% endcontent-ref %}

{% content-ref url="/pages/sCWveOyYFOpg0woAkf0K" %}
[Вызов действий по триггеру](/ru/deistviya/vyzov-deistvii-po-triggeru.md)
{% endcontent-ref %}

{% content-ref url="/pages/hGIUdcTIrwrwiUmpG21l" %}
[Переменные](/ru/osnovnye-nastroiki/prompts/prompts-1.md)
{% endcontent-ref %}

{% content-ref url="/pages/7h2JHBEnH8Sh4oyjG94N" %}
[Пользовательские переменные](/ru/osnovnye-nastroiki/dopolnitelnye-nastroiki/less-than-greater-than-polzovatelskie-peremennye.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.suvvy.ai/ru/osnovnye-nastroiki/prompts/peremennye-v-deistviyakh.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
