Custom Bitrix24 Smart Process Development
With over 10 years of Bitrix24 experience and 50+ successful projects since 2015, our company delivers robust smart processes that automate your unique business workflows.
What Are Smart Processes in Bitrix24?
Smart processes are dynamic CRM entities that you create for your business needs: complaints, purchase requests, contracts. They are stored in separate tables with their own pipeline, fields, robots, and access permissions.
When Do You Need Custom Smart Processes?
Leads and deals don't always capture your business specifics. Custom dynamic entities — like "Complaint", "Purchase Request", or "Contract" — solve this. For example, managing complaints requires a number, status, assignee, linked deal, and a task for quality. Without custom development, this becomes chaotic. We create a full-fledged pipeline with automation using Bitrix24 dynamic CRM entities (\Bitrix\Crm\Service\Factory), stored in tables b_crm_dynamic_items_{entityTypeId}.
Limits of the Standard Constructor
In CRM settings → "Smart Processes", you can create a new type and add fields, stages, blocks. This works for simple cases, but fails when you need automation like automatic number generation (pattern RC-YEAR-XXXX with auto-increment), integration with 1C, or a custom card interface. Code is unavoidable.
Common scenarios requiring custom development:
- Automatic field calculation upon element creation.
- Chain of related actions: create a task, send notification, write to 1C.
- Non-standard card with custom UI (e.g., embedding charts via placement).
- Complex access rights (everyone can read, only assignee and manager can edit).
How to Create a Custom Smart Process via REST API?
Programmatic creation simplifies deployment between environments:
Code example: creating a type and fields
$result = $b24->callMethod('crm.type.add', [ 'fields' => [ 'title' => 'Complaint', 'isUseInUserfieldEnabled' => true, 'isLinkWithProductsEnabled' => true, 'isStagesEnabled' => true, 'isRobotsEnabled' => true, 'isBizProcEnabled' => true, ], ]); $entityTypeId = $result['result']['type']['entityTypeId']; // e.g., 1052 // Add user fields $b24->callMethod('crm.type.fields.add', [ 'entityTypeId' => $entityTypeId, 'fields' => [ 'fieldName' => 'CLAIM_NUMBER', 'userTypeId' => 'string', 'listLabel' => 'Complaint Number', 'isRequired' => true, ], ]); After that, the type is available in CRM; you can assign stages, robots, and permissions. The REST API gives full control, including migrations (see REST).
Implementing Automatic Element Numbering
A typical task: "Complaint No. RC-YEAR-0042". Implemented via the event handler onCrmDynamicItemBeforeAdd:
Code example: automatic numbering with atomic counter
AddEventHandler('crm', 'onCrmDynamic' . $entityTypeId . 'ItemBeforeAdd', function(\Bitrix\Main\Event $event) { $item = $event->getParameter('item'); $year = date('Y'); // Atomic counter in Redis or a table $seq = incrementSequence("claim_{$year}"); $item->set('UF_CRM_CLAIM_NUMBER', sprintf('RC-%d-%04d', $year, $seq)); }); Atomicity guarantees a unique number even with parallel requests. Use Redis or MySQL locks (SELECT ... FOR UPDATE).
Automation with Handlers and Custom Robots
When a complaint is created, automatically:
- A task is created for the quality department.
- The related deal is attached (if the complaint is for an order).
- The responsible manager is notified.
Code example: handler for task creation and notification
AddEventHandler('crm', 'onCrmDynamic' . $entityTypeId . 'ItemAdd', function(\Bitrix\Main\Event $event) use ($b24) { $item = $event->getParameter('item'); $dealId = $item->get('OPPORTUNITY'); // custom field for linked deal // Create task $b24->callMethod('tasks.task.add', [ 'fields' => [ 'TITLE' => 'Handle complaint ' . $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}"], ], ]); // Notification via bot notifyManager($item->get('ASSIGNED_BY_ID'), "New complaint: " . $item->get('UF_CRM_CLAIM_NUMBER')); }); Handlers are written once and work stably. Log errors to avoid lost actions. Custom automation handlers are created via REST for stage changes:
Code example: registering a custom robot
$b24->callMethod('bizproc.robot.add', [ 'CODE' => 'send_to_1c', 'HANDLER' => 'https://your-server.com/robot/send-to-1c', 'AUTH_USER_ID' => 1, 'NAME' => ['en' => 'Send to 1C'], 'PROPERTIES' => [ 'document_type' => ['Name' => 'Document type', 'Type' => 'select', 'Options' => ['claim' => 'Complaint', 'refund' => 'Return']], ], 'RETURN_PROPERTIES' => [ 'external_id' => ['Name' => 'ID in 1C', 'Type' => 'string'], ], ]); Custom Card via Placement
For a complex UI, embed your own interface through placement.bind with type CRM_DYNAMIC_DETAIL_TOOLBAR:
Code example: binding a placement application
$b24->callMethod('placement.bind', [ 'PLACEMENT' => 'CRM_DYNAMIC_' . $entityTypeId . '_DETAIL_TOOLBAR', 'HANDLER' => 'https://your-server.com/app/claim-detail', 'TITLE' => 'Additional data', ]); It opens as a side panel (slider) in the smart process card—your SPA with a custom interface.
Access Rights
Permissions are configured through CRM roles (crm.type.userfield.access.set) or the application. For a complex matrix: read—all managers, edit—only assignee and manager, delete—only administrator. Verify via user.current and department.get on each request.
Integration with External Systems
A custom dynamic entity processes data 2 times faster than a standard deal due to optimized storage structure. Typical scenarios:
| Direction | Method | Event |
|---|---|---|
| Smart process → 1C | REST handler + custom robot | Stage change |
| 1C → Smart process | crm.item.update via Bitrix24 webhook |
On schedule or trigger in 1C |
| Smart process → Email | event.send or custom robot |
Creation, stage change |
| External service → Smart process | crm.item.add via API |
Webhook from external service |
Integration with 1C often uses the CommerceML protocol for exchanging directories and documents.
Deliverables and Timeline
What is included
- Detailed documentation of the entity structure and API endpoints.
- Custom robot code (up to 3 robots included).
- Integration scripts for 1C, email, webhooks.
- Access to the development sandbox and test environment.
- Administrator training (2 hours online).
- 30-day warranty support.
Timeline
| Stage | Duration |
|---|---|
| Designing field structure and pipeline | 2–3 days |
| Creating type and fields via REST/API | 1–2 days |
| Event handlers (numbering, cascading) | 2–4 days |
| Custom robots | 2–3 days each |
| Custom card (SPA in placement) | 3–5 days |
| Integration with external systems | 2–5 days |
| Testing | 2–3 days |
Total: 2–4 weeks depending on the number of robots and presence of custom UI. Typical budget ranges from $1500 to $8000, with clients reporting 30–50% reduction in processing time. For instance, a logistics company reduced complaint handling time by 40%, saving over $10,000 annually. To evaluate your project, contact us—we will calculate the timeline and budget within one day.







