> For the complete documentation index, see [llms.txt](https://book.microcrm.online/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.microcrm.online/konstruktor-chat-botov/tipy-uzlov/naiti-sotrudnika.md).

# Найти сотрудника

Автоматически находит сотрудника компании по различным критериям и сохраняет его ID для дальнейшего использования.

<figure><img src="https://2761604671-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBnmghAGVwptospVllo8n%2Fuploads%2FjNspmLsWGOcwniJGUM9x%2Fimage.png?alt=media&amp;token=a2c94258-3228-4472-a200-cc1ca30ee525" alt=""><figcaption></figcaption></figure>

## **Когда использовать**

* ✅ Автоматическое распределение новых клиентов между менеджерами
* ✅ Поиск наименее загруженного менеджера
* ✅ Назначение ответственного по имени или роли
* ✅ Отправка уведомлений конкретному сотруднику
* ✅ Создание системы балансировки нагрузки

## **Настройки**

<figure><img src="https://2761604671-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBnmghAGVwptospVllo8n%2Fuploads%2FwMLbPiyApN4a991oBwUG%2Fimage.png?alt=media&amp;token=0a7455b7-f526-43d7-9ad6-176a69d309db" alt=""><figcaption></figcaption></figure>

## **Тип поиска**

Выберите критерий поиска сотрудника:

### **По ФИО**

Ищет сотрудника по имени или фамилии.

**Режим поиска:**

* **Точное совпадение** — полное совпадение имени
* **Содержит** — имя содержит указанный текст
* **Начинается с** — имя начинается с указанного текста

**Значение:** Введите имя или используйте переменную `{{context.name}}`

#### **Пример:**

```
Тип: По ФИО
Режим: Содержит
Значение: Иванов
→ Найдет: "Иван Иванов", "Иванова Мария"
```

### **По Email**&#x20;

Ищет сотрудника по адресу электронной почты.

**Режим поиска:** Точное совпадение / Содержит / Начинается с

#### **Пример:**

```
Тип: По Email
Режим: Точное совпадение
Значение: manager@company.com
```

### **По Telegram**&#x20;

Ищет сотрудника по username в Telegram.

**Важно:** Сотрудник должен привязать свой Telegram к профилю в системе.

**Пример:**

```
Тип: По Telegram
Режим: Точное совпадение
Значение: @ivan_manager
```

### **По количеству клиентов**

#### **Самый полезный тип для автоматического распределения**

Ищет сотрудника по количеству назначенных ему клиентов.

#### **Режим поиска:**

* **Минимум клиентов** — найдет менеджера с наименьшей загрузкой (идеально для распределения)
* **Максимум клиентов** — найдет самого загруженного менеджера
* **Равно** — найдет менеджера с точным количеством клиентов

### **Примеры использования**

#### **Автоматическое распределение новых клиентов:**

```
[Триггер: Новый клиент написал /start]
     ↓
[Найти сотрудника]
Тип: По количеству клиентов
Режим: Минимум клиентов
Сохранить в: free_manager
     ↓
[Управление клиентом]
Действие: Обновить информацию
Поля:
  - Назначить менеджера: {{context.free_manager}}
     ↓
[Уведомление]
Получатели: {{context.free_manager}}
Сообщение: "Вам назначен новый клиент!"
```

#### **Найти самого опытного менеджера:**

```
Тип: По количеству клиентов
Режим: Максимум клиентов
→ Для сложных VIP клиентов
```

### **По роли**

Ищет сотрудника с указанной ролью в компании.

**Доступные роли:**

* Владелец
* Директор
* Главный менеджер
* Менеджер
* Сотрудник

**Важно:** Если несколько сотрудников имеют эту роль, вернется случайный из них.

#### **Пример:**

```
Тип: По роли
Роль: Главный менеджер
→ Для эскалации сложных вопросов
```

### **Случайный**

Выбирает случайного активного сотрудника.

**Когда использовать:**

* Равномерное распределение без учёта загрузки
* Для тестирования
* Ротация ответственных

**Сохранить результат в**

**Обязательное поле!** Имя переменной для сохранения `user_id` найденного сотрудника.

**Примеры:**

* `manager_id` — для назначения менеджера
* `support_id` — для отправки в поддержку
* `responsible_person` — для ответственного лица

**Использование результата:**

```
{{context.manager_id}} — в ноде "Управление клиентом"
{{context.support_id}} — в ноде "Уведомление"
```

### **Если не найден**

Что делать, если сотрудник по критериям не найден:

* **Пропустить и продолжить** ✅ (рекомендуется) — выполнение продолжается, переменная остаётся пустой
* **Остановить выполнение** — сценарий прекращается
* **Установить null** — переменная получает значение `null`, выполнение продолжается

#### **Только активные**

**По умолчанию включено** — ищет только среди активных сотрудников (не уволенных, не заблокированных).

***

### **Примеры сценариев**

**Сценарий 1: Автоматическое распределение лидов**

```
[Триггер: Команда /newlead]
     ↓
[Отправить сообщение ⏳]
Текст: "Укажите имя клиента:"
Ожидать ответ: ВКЛ
Сохранить в: client_name
     ↓ 💬
     ↓
[Найти сотрудника]
Тип: По количеству клиентов
Режим: Минимум клиентов
Сохранить в: assigned_manager
Если не найден: Пропустить
     ↓
[Управление клиентом]
Целевой клиент: Текущий пользователь
Действие: Обновить информацию
Поля:
  - Имя: {{context.client_name}}
  - Назначить менеджера: {{context.assigned_manager}}
  - Категория: "Новый лид"
     ↓
[Создать сделку]
Название: "Новый лид: {{context.client_name}}"
Статус: Новая
     ↓
[Уведомление]
Канал: Telegram
Получатели: {{context.assigned_manager}}
Сообщение: "🎯 Вам назначен новый лид!
Имя: {{context.client_name}}
Telegram: @{{client.telegram}}"
```

**Сценарий 2: Эскалация в поддержку**

```
[Триггер: Кнопка "Проблема"]
     ↓
[Найти сотрудника]
Тип: По роли
Роль: Главный менеджер
Сохранить в: support_manager
     ↓
[Уведомление]
Канал: Telegram
Получатели: {{context.support_manager}}
Сообщение: "⚠️ Клиент сообщил о проблеме
Клиент: {{client.name}}
Контакт: {{client.phone}}"
     ↓
[Отправить сообщение]
Текст: "Ваш запрос передан менеджеру. Ожидайте ответа."
```

**Сценарий 3: Проверка перед назначением**

```
[Найти сотрудника]
Тип: По количеству клиентов
Режим: Минимум клиентов
Сохранить в: new_manager
Если не найден: Установить null
     ↓
[Условие: Менеджер найден?]
Тип: Сравнение переменных
Переменная: {{context.new_manager}}
Оператор: Не равно
Значение: null
     ↓ true
     ├─→ [Назначить менеджера]
     │
     ↓ false
     └─→ [Отправить сообщение]
         Текст: "Извините, все менеджеры заняты. Мы свяжемся с вами позже."
```

***

### **Советы по использованию**

**✅ Лучшие практики:**

1. **Используйте "Минимум клиентов" для распределения**

   ```
   Это автоматически балансирует нагрузку между менеджерами
   ```
2. **Всегда проверяйте результат**

   ```
   После find_employee → добавьте condition для проверки найден ли сотрудник
   ```
3. **Комбинируйте с уведомлениями**

   ```
   Найденный сотрудник должен получить уведомление о назначении
   ```
4. **Используйте "Только активные"**

   ```
   Избегайте назначения уволенным или неактивным сотрудникам
   ```

**❌ Чего избегать:**

1. Не забывайте указывать имя переменной для сохранения
2. Не используйте "Остановить выполнение" без необходимости
3. Не полагайтесь на случайный выбор для важных клиентов
4. Не забывайте про режим "Если не найден"

***

### **Интеграция с другими нодами**

**С управлением клиентом:**

```
[Найти сотрудника] → [Управление клиентом]
Результат поиска → Поле assigned_manager_id
```

**С уведомлениями:**

```
[Найти сотрудника] → [Уведомление]
Результат поиска → Получатели уведомления
```

**С условиями:**

```
[Найти сотрудника] → [Условие: Найден?] 
                          ├─ true → [Продолжить]
                          └─ false → [Альтернативный путь]
```
