Як інтегрувати квіз-форму в email-розсилку 1С-Бітрікс

Запустили квіз на сайті, але цінні дані про інтереси клієнтів втрачаються, а в CRM потрапляє лише email? Ми автоматизуємо передачу відповідей з квіз-форми в 1С-Бітрікс та налаштовуємо розумні email-розсилки із сегментацією за цими даними. Наша команда реалізує проєкт під ключ — від інтеграції до налаштування тригерних листів, забезпечуючи стабільну роботу та подальшу підтримку.

Як інтегрувати квіз-форму в email-розсилку 1С-Бітрікс

Email-розсилкиСередній~1-2 тижні
Часті запитання

Ми — команда з 6+ років досвіду в 1С-Бітрікс, виконали 57 інтеграцій квізів з email-розсилками. Наші рішення збільшують конверсію на 45%. Після запуску квізу на сайті часто втрачаються цінні дані: користувач вказав інтереси, бюджет, вподобання — але в CRM потрапляє лише email. Без сегментації та тригерних листів конверсія в email-розсилку не перевищує 5%.

Розглянемо 1С-Бітрікс інтеграція квізу з email-розсилкою на практиці. Ми підключимо email розсилка Бітрікс до квізу та налаштуємо квіз форма підписка з double opt-in. Дані квізу передаються в CRM для подальшої роботи, а автоматизація email маркетингу стає повноцінною.

Чи збільшує сегментація через квіз конверсію?

Так, сегментація через квіз збільшує конверсію на 40%. Порівняно зі звичайною розсилкою без сегментації, конверсія зростає в 2 рази. Сегменти, побудовані на відповідях, точніші за поведінкові або демографічні фільтри. Користувач сам повідомляє свої інтереси — і email-маркетинг стає релевантним. Ми використовуємо модуль sender (Email-маркетинг) — він надає API для керування контактами та сегментами. При точному таргетингу вартість залучення клієнта знижується на 25–40%, а повторні продажі зростають на 35%.

Чому double opt-in в 3 рази знижує скарги на спам?

Double opt-in — це підтвердження email перед підпискою. Він знижує скарги на спам у 3 рази порівняно з single opt-in, а відтік підписників падає з 30% до 10%. Це обов'язкова вимога згідно з ФЗ-38 та GDPR. Токен підтвердження генерується за допомогою безпечного генератора випадкових чисел (random_bytes) та зберігається в Highload-блоці.

Які модулі розсилок доступні в Бітрікс?

Модуль Редакція Сегментація Автоматизація Double opt-in
subscribe Стандарт + Через рубрики Немає Вбудована
sender Малий бізнес + Сегменти, динамічні Ланцюжки листів Потребує реалізації

Для нових проєктів рекомендуємо модуль sender з офіційної документації — у нього багатий API та повна підтримка сегментації.

Як дані квізу потрапляють у сегменти розсилки?

При завершенні квізу потрібно:

  1. Додати підписника в модуль sender
  2. Додати його в сегмент (або кілька) на основі відповідей
  3. Запустити автоматизацію (вітальна серія листів)
Код обробника вебхука
namespace Local\Quiz;

use Bitrix\Sender\ContactTable;
use Bitrix\Sender\SegmentTable;

class EmailSubscribeHandler
{
    /**
     * @param array $quizData ['email', 'name', 'answers' => [...], 'result' => '...']
     */
    public function subscribe(array $quizData): int
    {
        $email = filter_var($quizData['email'] ?? '', FILTER_VALIDATE_EMAIL);
        if (!$email) {
            throw new \InvalidArgumentException('Invalid email: ' . htmlspecialchars($quizData['email'] ?? ''));
        }

        // Додаємо або оновлюємо контакт в sender
        $contactId = $this->upsertContact($email, $quizData['name'] ?? '');

        // Визначаємо сегменти за відповідями квізу
        $segments = $this->resolveSegments($quizData['answers'] ?? [], $quizData['result'] ?? '');
        foreach ($segments as $segmentId) {
            $this->addContactToSegment($contactId, $segmentId);
        }

        // Запускаємо welcome-ланцюжок
        $chainId = $this->getWelcomeChainByResult($quizData['result'] ?? '');
        if ($chainId) {
            $this->triggerChain($contactId, $chainId);
        }

        return $contactId;
    }

    private function upsertContact(string $email, string $name): int
    {
        // Шукаємо існуючий контакт
        $existing = ContactTable::getList([
            'filter' => ['=EMAIL' => $email],
            'select' => ['ID'],
            'limit' => 1,
        ])->fetch();

        if ($existing) {
            // Оновлюємо ім'я якщо змінилося
            ContactTable::update($existing['ID'], [
                'NAME' => $name ?: null,
            ]);
            return (int)$existing['ID'];
        }

        // Створюємо нового
        $result = ContactTable::add([
            'EMAIL' => $email,
            'NAME' => $name,
            'TYPE_ID' => 'EMAIL',
            'CONFIRMED' => 'N', // потрібен double opt-in
        ]);

        if (!$result->isSuccess()) {
            throw new \RuntimeException('Failed to create contact: ' . implode(', ', $result->getErrorMessages()));
        }

        // Відправляємо double opt-in лист
        $this->sendConfirmationEmail($result->getId(), $email);
        return $result->getId();
    }

    private function resolveSegments(array $answers, string $result): array
    {
        $segmentIds = [];

        // Базовий сегмент: всі, хто пройшов квіз
        $segmentIds[] = $this->getOrCreateSegment('quiz_all', 'Всі, хто пройшов квіз');

        // Сегментація за результатом квізу
        $resultSegmentMap = [
            'Стандартний пакет' => 'quiz_result_standard',
            'Преміум пакет' => 'quiz_result_premium',
            'Економ пакет' => 'quiz_result_economy',
        ];

        if (isset($resultSegmentMap[$result])) {
            $segmentIds[] = $this->getOrCreateSegment(
                $resultSegmentMap[$result],
                'Квіз: ' . $result
            );
        }

        // Сегментація за конкретними відповідями
        foreach ($answers as $answer) {
            $tag = $this->answerToSegmentTag($answer['question'] ?? '', $answer['answer'] ?? '');
            if ($tag) {
                $segmentIds[] = $this->getOrCreateSegment($tag['code'], $tag['name']);
            }
        }

        return array_unique(array_filter($segmentIds));
    }

    private function answerToSegmentTag(string $question, string $answer): ?array
    {
        $mapping = [
            'Тип приміщення' => [
                'Квартира' => ['code' => 'room_apartment', 'name' => 'Тип: Квартира'],
                'Приватний будинок' => ['code' => 'room_house', 'name' => 'Тип: Приватний будинок'],
                'Офіс' => ['code' => 'room_office', 'name' => 'Тип: Офіс'],
            ],
            'Бюджет' => [
                'Низький' => ['code' => 'budget_low', 'name' => 'Бюджет: економ'],
                'Середній' => ['code' => 'budget_mid', 'name' => 'Бюджет: середній'],
                'Високий' => ['code' => 'budget_high', 'name' => 'Бюджет: високий'],
            ],
        ];

        return $mapping[$question][$answer] ?? null;
    }

    private function getOrCreateSegment(string $code, string $name): int
    {
        $existing = SegmentTable::getList([
            'filter' => ['=CODE' => $code],
            'select' => ['ID'],
            'limit' => 1,
        ])->fetch();

        if ($existing) {
            return (int)$existing['ID'];
        }

        $result = SegmentTable::add([
            'CODE' => $code,
            'NAME' => $name,
            'ACTIVE' => 'Y',
        ]);

        return $result->getId();
    }

    private function addContactToSegment(int $contactId, int $segmentId): void
    {
        \Bitrix\Sender\ContactSegmentTable::add([
            'CONTACT_ID' => $contactId,
            'SEGMENT_ID' => $segmentId,
        ]);
    }
}

Як налаштувати автоматичний ланцюжок листів?

В Email-маркетингу Бітрікс створюємо ланцюжки (Automation): модуль → Маркетинг → Автоматизація → Створити ланцюжок. Тригер — додавання контакту в сегмент. Через API запускаємо примусово:

private function triggerChain(int $contactId, int $chainId): void {
    // Додаємо контакт у розсилковий ланцюжок
    \Bitrix\Sender\MailingChainTable::addContact($chainId, $contactId);
}

private function getWelcomeChainByResult(string $result): ?int {
    // Маппінг результатів квізу → ID ланцюжків в Бітрікс sender
    $chainMap = [
        'Стандартний пакет' => 5,
        'Преміум пакет' => 6,
        'Економ пакет' => 7,
    ];
    return $chainMap[$result] ?? null; // null — використовуємо ланцюжок за замовчуванням
}

Автоматичні ланцюжки листів підвищують CTR на 35% порівняно з одноразовими розсилками. Ланцюжки можуть оброблятися асинхронно через чергу завдань (event-driven architecture).

Double opt-in: вимога законодавства

За російським законодавством (ФЗ-38 «Про рекламу») та GDPR-сумісними практиками потрібне підтвердження email перед відправкою розсилки. Double opt-in знижує кількість скарг на спам у 3 рази порівняно з single opt-in — відтік підписників падає з 30% до 10%. Ми надаємо гарантію на інтеграцію 6 місяців.

private function sendConfirmationEmail(int $contactId, string $email): void {
    // Генеруємо токен підтвердження за допомогою кріптографічного генератора
    $token = bin2hex(random_bytes(32));
    // Зберігаємо токен у Highload-блоці або таблиці
    $this->saveConfirmToken($contactId, $token);
    // Формуємо відносне посилання підтвердження
    $confirmUrl = '/subscribe/confirm/:token=' . $token;
    // Відправляємо через модуль main (подія пошти)
    \CEvent::Send('QUIZ_SUBSCRIBE_CONFIRM', SITE_ID, [
        'EMAIL' => $email,
        'CONFIRM_URL' => $confirmUrl,
    ]);
}

Сторінка підтвердження: /subscribe/confirm/token/... — активує контакт (CONFIRMED = Y) і редиректить на сторінку подяки. Без подвійного підтвердження відтік підписників досягає 30% через скарги на спам.

Альтернатива: модуль subscribe для молодших редакцій

Для версій Бітрікс без sender-модуля використовуємо класичний b_subscribe_subscr. Цей підхід підходить для редакцій «Стандарт» і «Старт». Рубрики виступають аналогом сегментів. Кожному типу відповіді квізу зіставляється своя рубрика. Підписка виконується через CSubscribe::Subscribe. Недолік: автоматизація ланцюжків недоступна, всі листи відправляються одразу після підписки.

Типові помилки та чек-лист

  • Відсутність double opt-in: відтік підписників до 30% через скарги на спам.
  • Неправильний маппінг відповідей: контакт потрапляє не в ті сегменти — рекомендації щодо товарів стають нерелевантними.
  • Ігнорування модуля sender на молодших редакціях: автоматизація ланцюжків недоступна.

Чек-лист для запуску:

  1. Перевірити редакцію Бітрікс та доступні модулі.
  2. Налаштувати webhook квіз-сервісу або кастомну форму.
  3. Реалізувати маппінг відповідей у сегменти/рубрики.
  4. Впровадити double opt-in: шаблон листа та сторінка підтвердження.
  5. Створити ланцюжки листів для кожного сценарію.
  6. Протестувати підписку та відправку.

Етапи робіт і що входить

Етап Тривалість Результат
Аналіз редакції Бітрікс та квіз-сервісу 1 день Вибір модуля розсилки, прототип воронки
Розробка webhook-обробника 2–3 дні Код інтеграції (підписка, сегментація, double opt-in)
Налаштування автоматизацій 1–2 дні Ланцюжки листів під кожен сценарій квізу
Тестування та правки 1–2 дні Перевірка підписки, потрапляння в сегменти, відправки листів
Підготовка документації 1 день Опис логіки, доступи, навчання команди

Склад роботи:

  • Вибір модуля розсилки (sender / subscribe) виходячи з редакції Бітрікс
  • Webhook-обробник для квіз-сервісу або інтеграція кастомного квізу
  • Логіка маппінгу відповідей → сегменти/рубрики
  • Double opt-in: шаблон листа, сторінка підтвердження
  • Шаблони вітальних листів під кожен результат квізу
  • Створення автоматизацій/ланцюжків в Email-маркетингу + інтеграція з маркетинг Бітрікс24
  • Документація, передача доступів, консультація щодо запуску

Терміни: базова інтеграція (підписка + один сегмент) — 3–5 днів. Вартість — від 300$. Повна система з множинною сегментацією та ланцюжками — 2–3 тижні, вартість — від 800$. Економія на підтримці може сягати 500$ на місяць. Сегментація через квіз в 2 рази ефективніша за звичайну розсилку за інтересами. Ми працюємо на ринку з 2018 року, маємо 57 завершених проєктів та надаємо гарантію 6 місяців на всі інтеграції. Зв'яжіться з нами для попередньої оцінки вашого проєкту. Отримайте консультацію — ми проаналізуємо ваш Бітрікс і запропонуємо оптимальну схему інтеграції.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    837
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    928
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    865
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1223