כיצד אנו בונים בונה טפסים מותאם אישית על 1C-Bitrix לשילוב CRM גמיש
תארו לעצמכם: מנהל מבקש טופס משוב. אתם בונים אותו, אבל כעבור שבוע הם צריכים שדה "תאריך לידה" המקושר ל-CRM. וכך זה נמשך כל פעם. מודול 'טפסי האינטרנט' הסטנדרטי ב-1C-Bitrix מיושן — הממשק אינו רספונסיבי, האינטגרציה עם מערכות חיצוניות מסתמכת על פתרונות עוקפים, ושינוי שדות דורש מפתח. כתוצאה מכך, עד 40% מזמן הצוות מושקע בעבודה חוזרת, והעסק מאבד לידים עקב שינויים איטיים.
אנו בונים בונה טפסים מותאם אישית שבו המנהל יוצר שדות, מגדיר ולידציה, הפניות ואינטגרציה עם Bitrix24 — הכל דרך ממשק אינטרנט. ללא שינויי קוד לאחר השחרור. זה מקצר את פריסת הטפסים משבועות לשעות וחוסך עד 30% מתקציב התחזוקה. בונה מותאם אישית חוסך כ-$2,000 בחודש בעלויות עבודה חוזרת. המומחיות שלנו כוללת 9+ שנות פיתוח Bitrix ו-50+ פרויקטי התאמת טפסים. נתונים אלה מגובים בפרויקטים פנימיים של החברה.
מדוע טפסי אינטרנט סטנדרטיים אינם מתאימים לפרויקטים מורכבים
מודול ה-form ב-Bitrix הוא כמו חלקי חילוף: פונקציונלי, אך לא בנוי למהירות. בעיות:
- אין ממשק מובייל רספונסיבי.
- הוולידציה מוגבלת לכללים בסיסיים — אין regex מותאם אישית או תלות בין שדות.
- הנתונים נשמרים רק בטבלת המודול, לא ישירות ל-HL-blocks או לשירותי צד שלישי.
- אינטגרציית CRM דורשת handler מותאם אישית לאירוע
onFormResultAdd— אחד לכל טופס.
בונה מותאם אישית פותר את כל זה עם ארכיטקטורה אחת: מטא-דאטה של טופס → HL-block → renderer אוניברסלי → handler הגשה יחיד עם חיבור CRM. ב-90% מהמקרים, זה מספיק כדי לכסות כל דרישה עסקית ללא עבודה נוספת.
כיצד מטא-דאטה מאוחסן ב-HL-Blocks
כל תצורת הטופס חיה בשתי רשומות HL-block. הראשונה מחזיקה הגדרות שדות (JSON), השנייה מחזיקה הגדרות התנהגות (JSON). תוצאות ההגשה נשמרות בטבלה נפרדת. סכמה זו הוכחה על 50+ פרויקטים ומטפלת בעד 1000 הגשות ביום. תיעוד: HL-blocks ORM.
// Таблица форм b_hl_form_builder class FormBuilderTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_form_builder'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new StringField('TITLE'), new StringField('SLUG'), new TextField('FIELDS_JSON'), new TextField('SETTINGS_JSON'), new BooleanField('IS_ACTIVE', ['values' => [false, true]]), new IntegerField('SUBMISSIONS_COUNT'), new DatetimeField('CREATED_AT'), ]; } } // Таблица результатов b_hl_form_submissions class FormSubmissionTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_form_submissions'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('FORM_ID'), new TextField('DATA_JSON'), new StringField('USER_IP'), new StringField('USER_AGENT'), new IntegerField('USER_ID'), new IntegerField('CRM_ENTITY_ID'), new DatetimeField('CREATED_AT'), ]; } } // Таблица форм b_hl_form_builder class FormBuilderTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_form_builder'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new StringField('TITLE'), new StringField('SLUG'), new TextField('FIELDS_JSON'), new TextField('SETTINGS_JSON'), new BooleanField('IS_ACTIVE', ['values' => [false, true]]), new IntegerField('SUBMISSIONS_COUNT'), new DatetimeField('CREATED_AT'), ]; } } // Таблица результатов b_hl_form_submissions class FormSubmissionTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_form_submissions'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('FORM_ID'), new TextField('DATA_JSON'), new StringField('USER_IP'), new StringField('USER_AGENT'), new IntegerField('USER_ID'), new IntegerField('CRM_ENTITY_ID'), new DatetimeField('CREATED_AT'), ]; } } הוא מערך של אובייקטי שדה. כל אחד מכיל id, type, label, דגל required, ומאפיינים כמו מסכת טלפון או אפשרויות select.
[ { "id": "field_name", "type": "text", "label": "Ваше имя", "placeholder": "Иван Иванов", "required": true, "width": "half" }, { "id": "field_phone", "type": "tel", "label": "Телефон", "required": true, "mask": "+7 (000) 000-00-00", "width": "half" }, { "id": "field_service", "type": "select", "label": "Услуга", "options": ["Разработка", "Аудит", "Поддержка"], "required": true }, { "id": "field_message", "type": "textarea", "label": "Сообщение", "rows": 4, "required": false } ] FIELDS_JSON שולט בהתנהגות: טקסט כפתור, הודעת הצלחה, הודעות דוא"ל, הגדרות CRM.
{ "submit_text": "Отправить заявку", "success_message": "Спасибо! Мы свяжемся с вами.", "redirect_url": null, "send_email": "[email protected]", "crm_integration": { "enabled": true, "entity_type": "LEAD", "source_id": "WEB", "responsible_id": 5 }, "notification_template": "FORM_SUBMIT" } כיצד להגדיר אינטגרציית CRM עם Bitrix24?
לאחר ההגשה, נוצר ליד באמצעות [ { "id": "field_name", "type": "text", "label": "Ваше имя", "placeholder": "Иван Иванов", "required": true, "width": "half" }, { "id": "field_phone", "type": "tel", "label": "Телефон", "required": true, "mask": "+7 (000) 000-00-00", "width": "half" }, { "id": "field_service", "type": "select", "label": "Услуга", "options": ["Разработка", "Аудит", "Поддержка"], "required": true }, { "id": "field_message", "type": "textarea", "label": "Сообщение", "rows": 4, "required": false } ] . שדות שם, טלפון ודוא"ל ממופים לפי סוג השדה. ניתן להגדיר אחראי ומקור. להלן handler טופס אוניברסלי שמקבל בקשת POST מכל טופס, מאמת שדות חובה, שומר נתונים ויוצר ליד.
// /local/ajax/form_builder_submit.php $data = json_decode(file_get_contents('php://input'), true); $formId = (int)($data['form_id'] ?? 0); $form = FormBuilderTable::getByPrimary($formId)->fetch(); if (!$form || !$form['IS_ACTIVE']) { echo json_encode(['error' => 'Form not found']); exit; } $fields = json_decode($form['FIELDS_JSON'], true) ?? []; $settings = json_decode($form['SETTINGS_JSON'], true) ?? []; // Валидация обязательных полей $errors = []; foreach ($fields as $field) { if ($field['required'] && empty($data[$field['id']])) { $errors[$field['id']] = 'Поле обязательно'; } } if ($errors) { echo json_encode(['errors' => $errors]); exit; } // Собрать данные для сохранения $submissionData = []; foreach ($fields as $field) { $submissionData[$field['label']] = htmlspecialchars($data[$field['id']] ?? ''); } // Сохранить результат $subId = FormSubmissionTable::add([ 'FORM_ID' => $formId, 'DATA_JSON' => json_encode($submissionData, JSON_UNESCAPED_UNICODE), 'USER_IP' => $_SERVER['REMOTE_ADDR'], 'CREATED_AT' => new \Bitrix\Main\Type\DateTime(), ])->getId(); // CRM-интеграция if ($settings['crm_integration']['enabled'] ?? false) { \Bitrix\Main\Loader::includeModule('crm'); $nameField = findFieldByType($fields, 'text'); $phoneField = findFieldByType($fields, 'tel'); $emailField = findFieldByType($fields, 'email'); $leadId = \CCrmLead::Add([ 'TITLE' => $form['TITLE'] . ': ' . ($data[$nameField['id']] ?? 'Новый лид'), 'NAME' => $data[$nameField['id']] ?? '', 'PHONE' => [['VALUE' => $data[$phoneField['id']] ?? '', 'VALUE_TYPE' => 'WORK']], 'EMAIL' => [['VALUE' => $data[$emailField['id']] ?? '', 'VALUE_TYPE' => 'WORK']], 'SOURCE_ID' => 'WEB', 'COMMENTS' => json_encode($submissionData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), ]); // Обновляем запись сабмита ID созданного лида FormSubmissionTable::update($subId, ['CRM_ENTITY_ID' => $leadId]); } echo json_encode(['success' => true]); כיצד ממשק הניהול בנוי
דף הניהול הוא SETTINGS_JSON או SPA נפרד ב-React/Vue ב-{ "submit_text": "Отправить заявку", "success_message": "Спасибо! Мы свяжемся с вами.", "redirect_url": null, "send_email": "[email protected]", "crm_integration": { "enabled": true, "entity_type": "LEAD", "source_id": "WEB", "responsible_id": 5 }, "notification_template": "FORM_SUBMIT" } . גרסה פשוטה ללא גרירה ושחרור משתמשת בכפתור "הוסף שדה" ומיון באמצעות חצים. זה מהיר יותר לפיתוח ומכסה 90% מהמשימות.
כיצד רינדור הטפסים עובד בצד הלקוח
הקומפוננטה CCrmLead::Add מקבלת SLUG של טופס, שולפת תצורה מה-HL-block, ומוציאה שדות. התבנית עוברת על מערך השדות ומייצרת HTML לפי סוג (text, tel, select, textarea). מסכות, שדות תלויים ו-captcha נתמכים.
השוואה: טפסי אינטרנט סטנדרטיים מול בונה מותאם אישית
| קריטריון | מודול סטנדרטי | בונה מותאם אישית |
|---|---|---|
| רספונסיביות | לא | כן, מסגרת CSS |
| סוגי שדות מותאמים אישית | רק מוגדרים מראש | כל סוג דרך JSON |
| אינטגרציית CRM | דרך event handler | מובנית, מיפוי שדות |
| אחסון נתונים | רק טבלאות סטנדרטיות | HL-blocks, כל סכמה |
| שינוי שדות | דרך קוד | דרך פאנל ניהול |
| זמן לטופס חדש | 1–2 ימים | 15–30 דקות (פי 10 מהר יותר) |
מה כלול בעבודה
- מתודולוגיה: ניתוח תהליכים עסקיים, אב-טיפוס שדות, הסכמת ולידציה.
- פיתוח: HL-blocks, ממשק ניהול, קומפוננטת רינדור ו-handler.
- אינטגרציה: שליחת דוא"ל, קישור CRM (Bitrix24), ייצוא ל-Excel.
- תיעוד: תיאור מבנה טבלאות, הוראות למנהלים.
- תמיכה: תיקוני באגים ושיפורים קלים בתוך חודש מהשחרור.
תהליך העבודה
- ניתוח — זיהוי סוגי שדות, כללי ולידציה, תרחישי אינטגרציה.
- עיצוב — ארכיטקטורת HL-block, סכמת נתונים, מוקאפ ממשק.
- יישום — קוד בונה, renderer, handler, חיבור CRM.
- בדיקות — אימות מול 10+ תרחישים: הגשה, שגיאות, XSS, עומס.
- פריסה והדרכה — העלאה לסביבת production, העברה למנהלים.
לוחות זמנים לפיתוח
| אפשרות | היקף | לוח זמנים |
|---|---|---|
| בונה בסיסי | ניהול שדות, שמירה, רינדור | 8–12 ימים |
| עם אינטגרציית CRM | + לידים, מיפוי שדות, התראות | 12–18 ימים |
| גרירה ושחרור + אנליטיקה | + עורך ויזואלי, סטטיסטיקות טפסים | 18–28 ימים |
למה לבחור בנו
- 9+ שנות ניסיון עם Bitrix ו-Bitrix24.
- 50+ פרויקטים מוצלחים של התאמת טפסים.
- גישה אישית: אנו קובעים דרישות, לוח זמנים ועלות לפני התחלה.
- אחריות על קוד ותמיכה לאחר מסירה.
בהשוואה לטפסי אינטרנט סטנדרטיים, הבונה שלנו מקצר את זמן הפריסה פי 10 ומוריד עלויות תחזוקה ב-80%. צרו קשר להערכת פרויקט חינם תוך יום אחד. קבלו ייעוץ עכשיו.







