לעתים קרובות אנו רואים פרויקטים שמגיעים למגבלות של הרכיב הסטנדרטי bitrix:main.feedback. הוא יכול לשלוח דוא"ל ולשמור רשומה בלוק מידע — מספיק לדף נחיתה עם טופס יחיד. אבל ברגע שיש לך מספר טפסים עם שדות שונים, ניתוב לפי מחלקה, אינטגרציית CRM, אנטי-ספאם ולוח המרות, הפתרון הסטנדרטי קורס. אחד הלקוחות שלנו, חנות מקוונת עם 50,000 מוצרים, איבד כ-30% מהלידים כי בקשות מחלקים שונים של האתר לא הובחנו. לאחר הטמעת המודול שלנו, ההמרה עלתה ב-40% תוך חודש אחד בלבד. מודול המשוב שלנו הוא מערכת ניהול טפסים מלאה עם אנליטיקה, ואנו מפתחים אותו בהתאמה אישית כבר למעלה מ-7 שנים. בתקופה זו השלמנו יותר מ-50 פרויקטים, וחסכנו ללקוחות בממוצע עד $1.8k–2.6k בשנה על עיבוד לידים.
למה הרכיב הסטנדרטי לא מספיק
בפרויקטים אמיתיים, לעתים קרובות אתה צריך:
- מערכי שדות שונים לדפים שונים (למשל, טופס הזמנה לעומת טופס התקשרות חוזרת);
- ניתוב בקשות לפי המחלקה או השירות שנבחרו;
- אינטגרציית CRM — יצירת לידים ועסקאות ישירות;
- אנטי-ספאם ברמת דבש (honeypot), חותמות זמן והגבלת קצב;
- אנליטיקת המרות, פילוח UTM ומפות חום.
הרכיב הסטנדרטי אינו תומך בסכמות שדות גמישות ובפעולות מותאמות אישית. כתוצאה מכך, מפתחים כותבים פתרונות עוקפים, והפרויקט צובר חוב טכני. אנו מציעים ארכיטקטורה מוכנה שמתרחבת ללא שכתוב.
איך המודול פותר את בעיית ריבוי הטפסים
מודול vendor.feedback מבוסס על ארבע טבלאות ORM:
-
b_vendor_feedback_form— טפסים: id, code, name, fields_schema (JSON), submit_action (JSON: email/crm/webhook), success_message, redirect_url, is_active, spam_protection (JSON) -
b_vendor_feedback_submission— הגשות: id, form_id, data (JSON), user_id, ip, user_agent, page_url, utm_source, utm_medium, utm_campaign, status (new/processed/spam), created_at -
b_vendor_feedback_attachment— קבצים המצורפים להגשות: id, submission_id, file_id -
b_vendor_feedback_stat— סטטיסטיקת טפסים (חתכים יומיים): form_id, date, views, submissions, conversion
מבנה זה מאפשר הרחבה גמישה של הפונקציונליות ללא שינויי סכמה. לכל טופס יש סכמת שדות JSON משלו, מה שמאפשר מספר בלתי מוגבל של טפסים שונים ללא תכנות נוסף.
בונה הטפסים
סכמת שדות הטופס מאוחסנת ב-fields_schema כ-JSON. דוגמה:
[
{"type": "text", "name": "name", "label": "Имя", "required": true},
{"type": "phone", "name": "phone", "label": "Телефон", "required": true, "mask": "+7 (999) 999-99-99"},
{"type": "email", "name": "email", "label": "Email", "required": false},
{"type": "select", "name": "dept", "label": "Отдел", "options": ["Продажи", "Поддержка", "Бухгалтерия"]},
{"type": "file", "name": "doc", "label": "Документ", "accept": ".pdf,.doc,.docx", "max_size_mb": 5},
{"type": "textarea", "name": "message", "label": "Сообщение", "required": true}
]הרכיב [ {"type": "text", "name": "name", "label": "Имя", "required": true}, {"type": "phone", "name": "phone", "label": "Телефон", "required": true, "mask": "+7 (999) 999-99-99"}, {"type": "email", "name": "email", "label": "Email", "required": false}, {"type": "select", "name": "dept", "label": "Отдел", "options": ["Продажи", "Поддержка", "Бухгалтерия"]}, {"type": "file", "name": "doc", "label": "Документ", "accept": ".pdf,.doc,.docx", "max_size_mb": 5}, {"type": "textarea","name": "message","label": "Сообщение", "required": true} ] מציג את הטופס מהסכמה ללא שינוי בתבנית בעת הוספת שדות. זה מאפשר לשנות שדות דרך ממשק הניהול ללא מעורבות מפתח.
איך עובד ניתוב הבקשות
השדה vendor:feedback.form קובע מה קורה לאחר שליחת הטופס:
{
"email": {
"to": ["[email protected]"],
"template": "feedback_sales"
},
"crm": {
"type": "lead",
"responsible_id": 42,
"fields_map": {
"name": "TITLE",
"phone": "PHONE"
}
},
"webhook": {
"url": "https://n8n.company.ru/webhook/feedback",
"method": "POST"
}
}פעולות מרובות מבוצעות ברצף. אם פעולה אחת נכשלת (למשל, CRM לא זמין), השאר ממשיכות, והשגיאה מתועדת. זה מבטיח שהבקשה לא תיאבד גם במהלך תקלות זמניות. אמינות המשלוח הממוצעת היא 99.9%.
עיבוד בקשות
class SubmissionHandler {
public function handle(int $formId, array $postData, array $files): HandleResult {
$form = FormTable::getById($formId)->fetch();
// Валидация по схеме полей
$validator = new FormValidator($form['FIELDS_SCHEMA']);
if (!$validator->validate($postData)) {
return HandleResult::validationError($validator->getErrors());
}
// Антиспам
if (!$this->spamChecker->check($postData, $form['SPAM_PROTECTION'])) {
return HandleResult::spam();
}
// Сохраняем заявку
$submissionId = SubmissionTable::add([
'FORM_ID' => $formId,
'DATA' => $postData,
'IP' => $_SERVER['REMOTE_ADDR'],
'PAGE_URL' => $_SERVER['HTTP_REFERER'] ?? '',
'UTM_SOURCE' => $_COOKIE['utm_source'] ?? '',
// ...
])->getId();
// Загружаем файлы
foreach ($files as $fieldName => $file) {
$fileId = \CFile::SaveFile(\CFile::MakeFileArray($file['tmp_name']), 'feedback');
AttachmentTable::add(['SUBMISSION_ID' => $submissionId, 'FILE_ID' => $fileId]);
}
// Выполняем действия (email, CRM, webhook)
$this->dispatchActions($form['SUBMIT_ACTION'], $submissionId, $postData);
return HandleResult::success();
}
} למה גישת אנטי-ספאם זו?
אנו משתמשים בשלוש שכבות הגנה (לפרטים נוספים, ראה ויקיפדיה):
- דבש (Honeypot) — שדה נסתר בטופס שבוטים ממלאים אוטומטית.
- בדיקת זמן — לא ניתן לשלוח את הטופס מהר יותר מ-3 שניות לאחר הטעינה (JavaScript + צד שרת).
-
הגבלת קצב — לא יותר מ-3 הגשות מכתובת IP אחת בשעה; נבדק מול
submit_action(ראה הגבלת קצב).
reCAPTCHA v3 זמין כמודול אופציונלי. לפי המדידות שלנו, שילוב זה מסנן למעלה מ-98% מהספאם עם פחות מ-0.5% תוצאות חיוביות שגויות. החיסכון בסינון ספאם מגיע עד $450–650 בחודש.
אנליטיקה והמרות
מוני צפיות בטפסים מתעדכנים באמצעות AJAX (בקשת פיקסל אחד כשהטופס נכנס לאזור התצוגה). המרה = { "email": {"to": ["[email protected]"], "template": "feedback_sales"}, "crm": {"type": "lead", "responsible_id": 42, "fields_map": {"name": "TITLE", "phone": "PHONE"}}, "webhook": {"url": "https://n8n.company.ru/webhook/feedback", "method": "POST"} } . לוח הניהול כולל:
- משפך טפסים: צפיות → התחלת מילוי → נשלח → ספאם
- פילוח UTM: מאיפה מגיעות הגשות בעלות המרה גבוהה
- זמן מילוי טופס ממוצע
- מפת חום שעתית: מתי מגיעות רוב ההגשות
זה מאפשר לייעל טפסים ולשפר המרות. לדוגמה, אחד הלקוחות שלנו הגדיל את ההמרה מ-12% ל-25% לאחר ניתוח מפת החום.
תצורה אופיינית
לחנות מקוונת טיפוסית, אנו ממליצים על 3-5 טפסים (הזמנה, התקשרות חוזרת, משוב, הרשמה, ביקורת) עם אינטגרציית CRM (Bitrix24 או amoCRM), אנטי-ספאם תלת-שכבתי ואנליטיקה בסיסית (משפך ו-UTM). תצורה זו מכסה 80% מהצרכים ומפותחת ב-10 ימים.
מה כלול בפיתוח המודול
| תוצר | תיאור |
|---|---|
| מודל ORM ומיגרציות | טבלאות לטפסים, הגשות, קבצים וסטטיסטיקות |
| בונה שדות | סכמת JSON עם ולידציה, רכיב תצוגה |
| מטפל בהגשות | ולידציה, אנטי-ספאם, שמירה, פעולות |
| פעולות (דוא"ל/CRM/webhook) | תבניות דוא"ל, אינטגרציית REST, webhook |
| ממשק ניהול | צפייה בהגשות, לוח אנליטיקה |
| תיעוד ותמיכה | מדריך התקנה, 3 חודשי תמיכה טכנית |
לוח זמנים לפיתוח
| שלב | משך |
|---|---|
| טבלאות ORM, בונה סכמת טפסים | יום אחד |
| הצגת טופס מהסכמה, ולידציה | יום אחד |
| מטפל בהגשות, העלאת קבצים | יום אחד |
| פעולות דוא"ל, CRM, Webhook | יומיים |
| אנטי-ספאם (honeypot, הגבלת קצב) | יום אחד |
| מונה צפיות, סטטיסטיקות | יום אחד |
| ממשק ניהול, צפייה בהגשות | יומיים |
| בדיקות | יום אחד |
סה"כ: 10 ימי עבודה. אינטגרציה עם CRM ספציפי (Bitrix24, amoCRM, RetailCRM) מתבררת בשלב הערכת העלויות. בקש ייעוץ — נחשב את לוח הזמנים המדויק לפרויקט שלך.
צור קשר כדי לדון בפרטים. אנו מבטיחים איכות: במשך למעלה מ-7 שנות עבודה, השלמנו יותר מ-50 פרויקטים של פיתוח מודולים עבור 1C-Bitrix. מומחים מוסמכים, הערכות שקופות ומפת דרכים. קבל ייעוץ — ומודול המשוב שלך יפעל תוך 10 ימים בלבד.

