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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля обратной связи 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля обратной связи 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": "+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 рендерит форму из схемы без изменения шаблона при добавлении полей.

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

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.ru/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) уточняется на этапе оценки.