Розробка модуля зворотного зв'язку 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка модуля зворотного зв'язку 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка модуля зворотного зв'язку 1С-Бітрікс

Стандартний компонент bitrix:main.feedback вміє відправляти листа і зберігати запис в інфоблок. Цього достатньо для лендингу з однією формою. Як тільки з'являється кілька форм з різними полями, маршрутизацією по відділах, прив'язкою до CRM, антиспамом і дашбордом з конверсією — штатне рішення ламається. Модуль зворотного зв'язку — це повноцінна система управління формами з аналітикою.

Модель даних

Модуль vendor.feedback:

  • 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

Конструктор форм

Схема полів форми зберігається в fields_schema як JSON. Приклад:

[
  {"type": "text",   "name": "name",    "label": "Ім'я",      "required": true},
  {"type": "phone",  "name": "phone",   "label": "Телефон",   "required": true, "mask": "+380 (99) 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 рендерить форму зі схеми без зміни шаблону при додаванні полів.

Обробка заявки

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();
    }
}

Маршрутизація та дії

Поле submit_action визначає, що відбувається після відправлення форми:

{
  "email": {"to": ["[email protected]"], "template": "feedback_sales"},
  "crm": {"type": "lead", "responsible_id": 42, "fields_map": {"name": "TITLE", "phone": "PHONE"}},
  "webhook": {"url": "https://n8n.company.ua/webhook/feedback", "method": "POST"}
}

Кілька дій виконуються послідовно. При помилці однієї дії (наприклад, CRM недоступна) решта продовжують виконуватися, помилка логується.

Антиспам

Три рівні захисту:

  1. Honeypot — приховане поле у формі, автоматично заповнене ботом
  2. Часова перевірка — форма не може бути відправлена швидше 3 секунд після завантаження (JavaScript + server-side)
  3. Rate limiting — не більше 3 заявок з однієї IP на годину: перевірка по b_vendor_feedback_submission

reCAPTCHA v3 підключається як опціональний модуль.

Аналітика та конверсія

Лічильник переглядів форми інкрементується через AJAX (1 піксель-запит при завантаженні форми у viewport). Конверсія = submissions / views:

У дашборді адміністратора:

  • Воронка по формі: перегляди → почали заповнювати → відправили → потрапили в спам
  • UTM-розбивка: звідки приходять заявки з високою конверсією
  • Середній час заповнення форми
  • Теплова карта по годинах: коли приходить більше заявок

Терміни розробки

Етап Термін
ORM-таблиці, конструктор схеми форм 1 день
Рендер форми зі схеми, валідація 1 день
Обробник заявок, завантаження файлів 1 день
Email, CRM, Webhook дії 2 дні
Антиспам (honeypot, rate limit) 1 день
Лічильник переглядів, статистика 1 день
Адміністративний інтерфейс, перегляд заявок 2 дні
Тестування 1 день

Разом: 10 робочих днів. Інтеграція з конкретною CRM (Bitrix24, amoCRM, RetailCRM) уточнюється на етапі оцінки.