כיצד אנו בונים בונה טפסים מותאם אישית על 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%. צרו קשר להערכת פרויקט תוך יום אחד. קבלו ייעוץ עכשיו.

