Разработка кастомных смарт-процессов Битрикс24
Когда стандартных CRM-сущностей не хватает, а лиды и сделки не отражают специфику бизнеса, компании приходят к кастомным смарт-процессам?
Допустим, нужно управлять рекламациями: у каждой есть номер, статус, ответственный, связанная сделка и задача для отдела качества. Без кастомной разработки это превращается в хаос из разнородных таблиц. Мы решаем это с помощью динамических CRM-сущностей Битрикс24, создавая полноценную воронку с автоматизацией.
Смарт-процессы — это CRM-сущности, которые вы создаёте сами: «Договор», «Заявка на закупку», «Рекламация», «Проект». Технически это динамические CRM-сущности (\Bitrix\Crm\Service\Factory), хранящиеся в таблицах b_crm_dynamic_items_{entityTypeId}. Наш опыт 10+ лет в разработке на Битрикс позволяет стабильно реализовывать такие решения.
Почему стандартного конструктора недостаточно?
В настройках CRM → «Смарт-процессы» менеджер создаёт новый тип: добавляет пользовательские поля, настраивает воронку стадий, включает нужные блоки (контакт, компания, товары, документы). Это работает для простых случаев, но когда требуется автоматизация вычислений, интеграция с 1С или кастомный интерфейс карточки, без кода не обойтись. Например, поле «Номер рекламации» должно формироваться по маске РК-ГОД-XXXX с автоинкрементом — конструктор такое не умеет.
Типовые сценарии, когда нужна кастомная разработка:
- Автоматическое вычисление полей при создании элемента.
- Цепочка связанных действий: создание задачи, уведомление, запись в 1С.
- Нестандартная карточка с кастомным UI (например, встраивание графиков через placement).
- Сложные права доступа (читают все, редактирует только ответственный и руководитель).
Как создать смарт-процесс через REST API?
Создаём тип программно — удобно для деплоя между окружениями:
$result = $b24->callMethod('crm.type.add', [ 'fields' => [ 'title' => 'Рекламация', 'isUseInUserfieldEnabled' => true, 'isLinkWithProductsEnabled' => true, 'isStagesEnabled' => true, 'isRobotsEnabled' => true, 'isBizProcEnabled' => true, ], ]); $entityTypeId = $result['result']['type']['entityTypeId']; // например, 1052 // Добавляем пользовательские поля $b24->callMethod('crm.type.fields.add', [ 'entityTypeId' => $entityTypeId, 'fields' => [ 'fieldName' => 'CLAIM_NUMBER', 'userTypeId' => 'string', 'listLabel' => 'Номер рекламации', 'isRequired' => true, ], ]); После этого тип доступен в CRM, можно назначать стадии, роботов и права. REST API даёт полный контроль, включая миграции между боевым и тестовым порталами (см. REST).
Реализация автоматической нумерации элементов
Типовая задача: «Рекламация №РК-ГОД-0042». Реализуется через обработчик события onCrmDynamicItemBeforeAdd:
AddEventHandler('crm', 'onCrmDynamic' . $entityTypeId . 'ItemBeforeAdd', function(\Bitrix\Main\Event $event) { $item = $event->getParameter('item'); $year = date('Y'); // Атомарный счётчик в Redis или таблице $seq = incrementSequence("claim_{$year}"); $item->set('UF_CRM_CLAIM_NUMBER', sprintf('РК-%d-%04d', $year, $seq)); }); Атомарность гарантирует уникальность номера даже при параллельных запросах. Можно использовать как Redis, так и блокировки MySQL (SELECT ... FOR UPDATE).
Связанные сущности и каскадные действия
При создании рекламации автоматически:
- Создаётся задача для отдела качества.
- Прикрепляется связанная сделка (если рекламация по заказу).
- Уведомляется ответственный менеджер.
AddEventHandler('crm', 'onCrmDynamic' . $entityTypeId . 'ItemAdd', function(\Bitrix\Main\Event $event) use ($b24) { $item = $event->getParameter('item'); $dealId = $item->get('OPPORTUNITY'); // кастомное поле связанной сделки // Создаём задачу $b24->callMethod('tasks.task.add', [ 'fields' => [ 'TITLE' => 'Обработать рекламацию ' . $item->get('UF_CRM_CLAIM_NUMBER'), 'RESPONSIBLE_ID' => getQualityDeptHead(), 'DEADLINE' => date('Y-m-d\TH:i:s', strtotime('+2 business days')), 'UF_CRM_TASK' => ["D_{$dealId}"], ], ]); // Уведомление через бота notifyManager($item->get('ASSIGNED_BY_ID'), "Новая рекламация: " . $item->get('UF_CRM_CLAIM_NUMBER')); }); Обработчики пишутся один раз и работают стабильно. Важно логировать ошибки — в случае сбоя уведомление не потеряется.
Кастомные роботы для смарт-процесса
Роботы — это действия, которые CRM выполняет автоматически при смене стадии. Стандартные роботы (отправить email, поставить задачу) — из коробки. Кастомный робот создаётся через REST:
$b24->callMethod('bizproc.robot.add', [ 'CODE' => 'send_to_1c', 'HANDLER' => 'https://your-server.com/robot/send-to-1c', 'AUTH_USER_ID' => 1, 'NAME' => ['ru' => 'Отправить в 1С'], 'PROPERTIES' => [ 'document_type' => ['Name' => 'Тип документа', 'Type' => 'select', 'Options' => ['claim' => 'Рекламация', 'refund' => 'Возврат']], ], 'RETURN_PROPERTIES' => [ 'external_id' => ['Name' => 'ID в 1С', 'Type' => 'string'], ], ]); Когда CRM выполняет робота, Б24 POST'ит на HANDLER данные элемента?
Обработчик выполняет логику (запрос к 1С), возвращает JSON с RETURN_PROPERTIES. Б24 записывает возвращённые данные в поля элемента.
Кастомная карточка через Placement
Стандартная карточка смарт-процесса не всегда удобна. Для сложного UI — встраиваем собственный интерфейс через placement.bind с типом CRM_DYNAMIC_DETAIL_TOOLBAR:
$b24->callMethod('placement.bind', [ 'PLACEMENT' => 'CRM_DYNAMIC_' . $entityTypeId . '_DETAIL_TOOLBAR', 'HANDLER' => 'https://your-server.com/app/claim-detail', 'TITLE' => 'Дополнительные данные', ]); Открывается как боковая панель (слайдер) в карточке смарт-процесса — ваш SPA с кастомным интерфейсом.
Права доступа
Права на смарт-процесс настраиваются через CRM-роли (crm.type.userfield.access.set) или через приложение. Для сложной матрицы: читать — все менеджеры, редактировать — только ответственный и руководитель, удалять — только администратор. Проверяем через user.current и department.get при каждом запросе.
Интеграция с внешними системами
Кастомный смарт-процесс обрабатывает данные в 2 раза быстрее стандартной сделки за счёт оптимизированной структуры хранения. Вот типовые сценарии:
| Направление | Метод | Событие |
|---|---|---|
| Смарт-процесс → 1С | REST-обработчик + кастомный робот | Смена стадии |
| 1С → Смарт-процесс | crm.item.update через webhook Б24 |
По расписанию или триггеру в 1С |
| Смарт-процесс → Email | event.send или кастомный робот |
Создание, смена стадии |
| Внешний сервис → Смарт-процесс | crm.item.add через REST API |
Webhook от внешнего сервиса |
Интеграция с 1С часто использует протокол CommerceML для обмена справочниками и документами.
Что входит в работу
- Проектирование структуры полей и воронки стадий.
- Создание типа, пользовательских полей через REST/API.
- Разработка обработчиков событий (нумерация, каскадные действия).
- Кастомные роботы (до 3 шт. включено).
- Интеграция с внешними системами (1С, почта, вебхуки).
- Документация по структуре и API.
- Обучение администратора (2 часа онлайн).
- Гарантийная поддержка 30 дней.
Сроки
| Этап | Срок |
|---|---|
| Проектирование структуры полей и воронки | 2–3 дня |
| Создание типа, полей через REST/API | 1–2 дня |
| Обработчики событий (нумерация, каскад) | 2–4 дня |
| Кастомные роботы | 2–3 дня на каждый |
| Кастомная карточка (SPA в placement) | 3–5 дней |
| Интеграция с внешними системами | 2–5 дней |
| Тестирование | 2–3 дня |
Итого: 2–4 недели в зависимости от числа роботов и наличия кастомного UI. Чтобы оценить ваш проект, свяжитесь с нами — мы рассчитаем срок и бюджет за один день. Закажите разработку кастомного смарт-процесса под ваши задачи — мы спроектируем воронку, реализуем интеграции и автоматизируем бизнес-процессы.







