> For the complete documentation index, see [llms.txt](https://docs.fstrk.io/knowledge_base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fstrk.io/knowledge_base/intagrations/macrocrm/macrocrm-procedury.md).

# MacroCRM: Процедуры

## MacroCRM: Процедуры для настройки сценариев

***

* [Контакты](#kontakty)
  * [Создание контакта](#sozdanie-kontakta)
  * [Поиск контакта](#poisk-kontakta)
  * [Редактирование контакта](#redaktirovanie-kontakta)
* [Заявки](#zayavki-na-pokupku-nedvizhimosti)
  * [Создание заявки](#sozdanie-zayavki)
  * [Поиск заявок](#poisk-zayavki)
  * [Изменение статуса заявки](#izmenenie-statusa-zayavki)
  * [Добавить заметку к заявке](#dobavit-zametku-k-zayavke)
* [Задачи](#zadachi)
  * [Создание задачи](#sozdanie-zadachi)
* [Интересы, брони и сделки](#interesy-broni-i-sdelki)
  * [Получение списка интересов, броней и сделок](#poluchenie-spiska-interesov-bronei-i-sdelok)

***

{% hint style="warning" %}
Символом <mark style="color:$danger;">\*</mark> обозначены обязательные параметры
{% endhint %}

## Контакты

**Контакт** — верхнеуровневая сущность CRM, к которой привязываются заявки на покупку, звонки, заметки и сделки

Процедуры для работы с контактами в MacroCRM:

### Создание контакта

Создаёт контакт (клиента — ФЛ или ЮЛ). Работает как upsert[^1]: если контакт с таким телефоном/email уже существует в текущей или партнёрской компании, возвращается его `id` с флагом `created: false`, новой записи не появляется. Иначе создаётся новый контакт с `created: true`

{% code overflow="wrap" lineNumbers="true" %}

```jinja
	{% macro.create_user phone_number="+79998887766" name="Иванов И." _type=0 first_name="Иван" last_name="Иванов" middle_name="Иванович" email="ivan@example.com" as contact %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `phone_number`<mark style="color:$danger;">\*</mark> (str) - номер телефона в международном формате. Может быть как с символом +, так и без него
* &#x20;`name`<mark style="color:$danger;">\*</mark> (str) - краткое имя контакта
* `_type`<mark style="color:$danger;">\*</mark> (int) - тип субъекта. Допустимые значения:
  * <kbd>*0*</kbd> - физическое лицо
  * <kbd>*1*</kbd> - юридическое лицо
* `first_name` (str) - имя
* `last_name` (str) - фамилия
* `middle_name` (str) - отчество
* `email` (str) - почта
* `birthdate` (datetime) - дата рождения
* `gender` (int) - пол. Допустимые значения:
  * <kbd>*0*</kbd> - не указан
  * <kbd>*1*</kbd> - мужской
  * <kbd>*2*</kbd> - женский
* `fl_inn` (str) - ИНН физического лица
* `snils` (str) - СНИЛС контакта
* `description` (str) - личная информация о клиенте
* `passport_type` (str) - тип документа удостоверяющего личность. Допустимые значения:&#x20;
  * <kbd>*пустое значение (пустые кавычки "")*</kbd> - паспорт РФ
  * <kbd>*birth*</kbd> - свидетельство о рождении&#x20;
  * <kbd>*foreign*</kbd> - иностранный паспорт&#x20;
  * <kbd>*residency*</kbd> - вид на жительство
  * <kbd>*idcard*</kbd> - ID-карта
* `passport_number` (str) - номер паспорта
* `passport_date` (datetime) - дата выдачи паспорта
* `passport_organ` (str) - орган, выдавший паспорт
* `passport_organ_code` (str) - код подразделения, выдавшего паспорт
* `passport_birthplace` (str) - место рождения по паспорту
* `passport_address` (str) - адрес регистрации по паспорту

</details>

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
"contact": {
  "uid": 1234567,
  "name": "Иван И.",
  "type": 0,
  "gender": null,
  "is_found": true,
  "full_name": "",
  "last_name": "",
  "first_name": "",
  "middle_name": "",
  "is_black_listed": 0
}
```

{% endcode %}

### Поиск контакта

Ищет контакт в текущей и партнёрских компаниях. Возвращает первый найденный контакт

{% code overflow="wrap" lineNumbers="true" %}

```jinja
	{% macro.get_user phone_number="+79998887766" as contact %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* <kbd>phone\_number</kbd><mark style="color:$danger;">\*</mark> (str) - номер телефона в международном формате. Может быть как с символом +, так и без него

</details>

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
"contact": {
  "uid": 1234567,
  "name": "Иван И.",
  "type": 0,
  "gender": null,
  "is_found": true,
  "full_name": "",
  "last_name": "",
  "first_name": "",
  "middle_name": "",
  "is_black_listed": 0
}
```

{% endcode %}

### Редактирование контакта

Обновляет поля существующего контакта по `id`, полученного при [создании](#sozdanie-kontakta) или [поиске](#poisk-kontakta) контакта. Передавайте только те поля, которые нужно изменить — остальные остаются как есть.&#x20;

{% hint style="warning" %}
Телефон и email с помощью данной процедуры изменить нельзя
{% endhint %}

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.edit_user uid=1234567 first_name="Иван" last_name="Петров" email="new@example.com" as contact %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `uid`<mark style="color:$danger;">\*</mark> (int) - идентификатор контакта для обновления
* `name` (str) - краткое имя контакта
* `first_name` (str) - имя
* `last_name` (str) - фамилия
* `middle_name` (str) - отчество
* `birthdate` (datetime) - дата рождения
* `gender` (int) - пол. Допустимые значения:
  * <kbd>*0*</kbd> - не указан
  * <kbd>*1*</kbd> - мужской
  * <kbd>*2*</kbd> - женский
* `email` (str) - email клиента
* `fl_inn` (str) - ИНН физического лица
* `snils` (str) - СНИЛС контакта
* `description` (str) - личная информация о клиенте
* `passport_type` (str) - тип документа удостоверяющего личность. Допустимые значения:&#x20;
  * <kbd>*пустое значение (пустые кавычки "")*</kbd> - паспорт РФ
  * <kbd>*birth*</kbd> - свидетельство о рождении&#x20;
  * <kbd>*foreign*</kbd> - иностранный паспорт&#x20;
  * <kbd>*residency*</kbd> - вид на жительство
  * <kbd>*idcard*</kbd> - ID-карта
* `passport_number` (str) - номер паспорта
* `passport_date` (datetime) - дата выдачи паспорта
* `passport_organ` (str) - орган, выдавший паспорт
* `passport_organ_code` (str) - код подразделения, выдавшего паспорт
* `passport_birthplace` (str) - место рождения по паспорту
* `passport_address` (str) - адрес регистрации по паспорту

</details>

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
"contact": {
  "uid": 1234567,
  "name": "Иван И.",
  "type": 0,
  "gender": null,
  "is_found": true,
  "full_name": "",
  "last_name": "",
  "first_name": "",
  "middle_name": "",
  "is_black_listed": 0
}
```

{% endcode %}

***

## Заявки на покупку недвижимости

### Создание заявки

Создаёт лид (заявку) на покупку недвижимости. Контакт клиента ищется по `phone_number`/`email`; если не найден — создаётся новый (отдельное [создание](#sozdanie-kontakta) контакта перед этим вызовом не нужно). Если у контакта уже есть активная заявка — вернётся её `id` без создания новой, кроме случая `is_force: true`.

Новая заявка попадает в воронку в статус «Неразобранное» и далее движется по этапам (Проверка → Подбор → Резерв → Сделка в работе → Сделка завершена; либо Отказ/Отложено/Нецелевое). Смена статуса происходит с помощью процедуры [изменения статуса заявки](#izmenenie-statusa-zayavki)

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.create_buy_request phone_number="+79199479156" full_name="Иванов Иван Иванович" action="buy" as result %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `phone_number`<mark style="color:$danger;">\*</mark> (str) - номер телефона в международном формате. Может быть как с символом +, так и без него
* `full_name`<mark style="color:$danger;">\*</mark> (str) - имя контакта
* `action`<mark style="color:$danger;">\*</mark> (str) - тип действия. Допустимые значения:
  * <kbd>*buy*</kbd> - заявка на покупку <mark style="background-color:$info;">(default)</mark>
  * <kbd>*sell*</kbd> - заявка на продажу
  * <kbd>*callback*</kbd> - запрос обратного звонка; если передан номер телефона, то будет осуществлена попытка связать клиента со случайным менеджером колл-центра, находящимся "онлайн"
  * <kbd>*question*</kbd> - подача вопроса от посетителя сайта; вопрос будет добавлен к заметкам заявки; обязательна передача вопроса в параметре message
  * <kbd>*reserve*</kbd> - заявка на бронь; обязателен параметр estate\_sell\_id, при этом создаваемый лид будет связан с указанным объектом недвижимости
  * <kbd>*askprice*</kbd> - запрос информации о цене; после получения лида клиенту будет выслано письмо с презентацией объекта; обязателен параметр estate\_sell\_id, при этом создаваемый лид будет связан с указанным объектом недвижимости
  * <kbd>*meet*</kbd> - запрос на встречу; добавление задачи с типом «Встреча в офисе»; если у клиента отсутствуют заявки, то будет создана в том числе и заявка; обязательны параметры manager\_id и meet\_date
  * <kbd>*lead*</kbd> - базовое действие для отправки заявки
  * <kbd>*rate*</kbd> - заявка на оценку
* `email` (str) - email контакта
* `client_msg` (str) - сообщение от клиента
* `is_force` (boolean) - принудительно создать новую заявку, игнорируя существующие по этому клиенту
* `estate_uid` (int) - ID объекта недвижимости, если заявка привязана к конкретному объекту
* `category` (str) - категория недвижимости
* `manager_uid` (str) - ID менеджера, если требуется назначить заявку конкретному менеджеру
* `meet_date` (datetime) - дата встречи (требуется при `action=meet`)
* `tags` (str) - Теги заявки. Можно передавать одной строкой через запятую
* `buy_interests_uids` (list\[str]) - ID дома или массив с ID домов. При передаче параметра заявке будет присвоен интерес к указанным домам
* `buy_source` (str) -&#x20;

  источник денег для покупки. Допустимые значения:

  * <kbd>*1*</kbd> - Ипотека
  * <kbd>*2*</kbd> - Наличные
  * <kbd>*3*</kbd> - Продажа своего имущества
  * <kbd>*4*</kbd> - Мат.капитал
  * <kbd>*5*</kbd> - Обмен (Трейд-ин)
  * <kbd>6</kbd> - Другие субсидии (воен., многодет. и др.)
  * <kbd>*7*</kbd> - Зачет
  * <kbd>*8*</kbd> - Рассрочка
* `priority` (str) -&#x20;
* `reserve_sum` (float) - сумма платной брони (при action=reserve и включенной настройке платной брони)
* `domain` (str) - домен, с которого поступила заявка, для применения специфических настроек домена
* `is_allow_sms` (boolean) - согласие на SMS уведомления
* `is_allow_email` (boolean) - согласие на Email уведомления
* `is_allow_phone` (boolean) - согласие на Звонки
* `is_allow_personal_data` (boolean) - Согласие на обработку персональных данных
* `utm` (dict\[str, str]) - UTM-метки

</details>

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
{
  "result": {
    "estate_uid": 5512,
    "contact_uid": 41823,
    "manager_uid": 102,
    "is_contact_created": false,
    "is_estate_created": true
  }
}
```

{% endcode %}

### Поиск заявок

### Изменение статуса заявки

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

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.get_statuses as res %}
```

{% endcode %}

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
{
  "statuses": [
    {
      "uid": 3,
      "name": "Нецелевой",
      "custom_statuses": []
    },
    {
      "uid": 4,
      "name": "Отказ",
      "custom_statuses": []
    },
    {
      "uid": 5,
      "name": "Неразобранное",
      "custom_statuses": []
    }
}
```

{% endcode %}

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

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.edit_request_status request_uid=100 status_uid=20 as res %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `request_uid`<mark style="color:$danger;">\*</mark> (int) - ID заявки на покупку недвижимости
* `status_uid`<mark style="color:$danger;">\*</mark> (int) - ID базового статуса, в который нужно перевести заявку

</details>

### Добавить заметку к заявке

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.create_buy_request_note request_uid=9901 note="Клиент перезвонит в пятницу после 15:00" as res %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `request_uid`<mark style="color:$danger;">\*</mark> (int) - ID заявки на покупку недвижимости
* `note`<mark style="color:$danger;">\*</mark> (str) - текст заметки

</details>

## Задачи

### Создание задачи

Создаёт задачу для сотрудника от имени постановщика

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.create_task manager_uid=102 assigner_uid=102 title="Связаться с клиентом" description="Уточнить детали по заявке №9901" date_finish=date_finish task_type="call" as res %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `manager_uid`<mark style="color:$danger;">\*</mark> (int) - ID менеджера, которому назначается задача
* `assigner_uid`<mark style="color:$danger;">\*</mark> (int) - ID постановщика задачи (может совпадать с manager\_uid)
* `title`<mark style="color:$danger;">\*</mark> (str) - название задачи
* `description`<mark style="color:$danger;">\*</mark> (str) - описание задачи
* `date_finish`<mark style="color:$danger;">\*</mark> (datetime) - срок исполнения задачи (дата и время)
* `task_type`<mark style="color:$danger;">\*</mark> (str) - тип задачи. Игнорируется, если передан types\_uid
  * <kbd>*call*</kbd>
  * <kbd>*other*</kbd> (default)
  * <kbd>*project*</kbd>
* `estate_uid` (int) - ID заявки, к которой привязывается задача
* `categroy_uid` (int) - ID категории задачи
* `types_uid` (int) - ID кастомного типа задачи из каталога (используется для системных типов meeting, meeting\_house). При передаче task\_type игнорируется
* `priority` (int) - Приоритет задачи
  * <kbd>*-1*</kbd> - низкий
  * <kbd>*0*</kbd> (default) - обычный
  * <kbd>*1*</kbd> - высокий
  * <kbd>*2*</kbd> - высочайший
* `hours_plan` (int) - плановое количество часов на задачу
* `project_uid` (int) - ID проекта, связанного с задачей
* `project_task_uid` (int) - ID задачи в рамках проекта

</details>

## Интересы, брони и сделки

### Получение списка интересов, броней и сделок

Возвращает плоский список записей жизненного цикла клиент ↔ объект: интересы, бесплатные/платные брони, сделки в работе и завершённые

{% code overflow="wrap" lineNumbers="true" %}

```jinja
{% macro.get_deals_by_contact contact_uid=67890 as deals %}
```

{% endcode %}

<details>

<summary>Параметры процедуры:</summary>

* `contact_uid`<mark style="color:$danger;">\*</mark> (int) - ID клиента внутри CRM

</details>

Пример ответа:

{% code overflow="wrap" lineNumbers="true" %}

```json
[
  {
    "id": 555,
    "type": "reserve",
    "status": 20,
    "estate_id": 12345,
    "manager_id": 123,
    "date_added": "2024-03-01 12:00:00",
    "date_modified": "2024-03-10 15:30:00"
  }
]
```

{% endcode %}

[^1]: **Upsert** (от англ. **Up**date + In**sert**) — это операция в базах данных, которая автоматически обновляет существующую запись, если она уже есть (по первичному ключу), или создает новую, если запись отсутствует


---

# 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 dynamically by asking a question.

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

```
GET https://docs.fstrk.io/knowledge_base/intagrations/macrocrm/macrocrm-procedury.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
