Менеджер получает в CRM просто контакт, а ответы квиза (бюджет, сроки, предпочтения) остаются в нечитаемом комментарии или вообще не попадают в систему. В результате квалификация лида затягивается на часы, а рекламные каналы — без атрибуции. Мы решаем эту задачу: настраиваем передачу каждого ответа квиза в отдельное пользовательское поле Битрикс24, создаём лид с UTM-метками и автоматической задачей-колбеком. Интеграция выполняется под ключ с гарантией 6 месяцев и опытом 10+ лет на Битрикс.
Почему стандартные формы заявок уступают квизам?
Обычная форма из трёх полей (имя, телефон, комментарий) даёт менеджеру минимум информации. Клиент не всегда знает, что написать в комментарии, и часто оставляет пустым. Квиз-форма структурирует диалог: задаёт конкретные вопросы (бюджет, сроки, предпочтения) и фиксирует выбор из вариантов. В результате в CRM попадают не просто контакт, а готовая квалификация лида. Это сокращает время обработки в 2–3 раза.
Три подхода к интеграции: сравнение
| Подход | Сложность | Кастомизация | Время внедрения | Требует разработки |
|---|---|---|---|---|
| Webhook от квиз-сервиса -> посредник -> Битрикс24 | Средняя | Высокая (свой маппинг) | 3–7 дней | Да (PHP-обработчик) |
| Кастомный квиз на сайте -> REST API | Высокая | Максимальная | 1–2 недели | Да (фронт + бэк) |
| CRM-форма Битрикс24 (мультишаг) | Низкая | Низкая (дизайн) | 1–2 часа | Нет |
Мы рекомендуем первый вариант как оптимальный по соотношению цена/качество. Он подходит для большинства бизнесов, уже использующих готовые квиз-платформы.
Как интеграция квиз-формы с Битрикс24 ускоряет обработку лидов?
При ручной обработке менеджер тратит время на перезвон и уточнение потребностей. С интеграцией все ответы уже есть в карточке лида: бюджет, срочность, тип помещения — отдельными полями. Менеджер сразу видит, звонить ли срочно или отправить коммерческое предложение. Дополнительно мы создаём задачу-активность «Позвонить через 2 часа» — это автоматизирует follow-up и снижает риск потери лида.
Webhook-обработчик: Marquiz → Битрикс24
Marquiz отправляет POST с JSON-пейлоадом при завершении квиза:
Пример пейлоада Marquiz
{
"quiz_id": "abc123",
"quiz_name": "Подбор окон",
"contact": {
"name": "Иван",
"phone": "+79161234567",
"email": "[email protected]"
},
"answers": [
{"question": "Тип помещения", "answer": "Квартира"},
{"question": "Количество окон", "answer": "3"},
{"question": "Срочность", "answer": "В течение месяца"},
{"question": "Бюджет", "answer": "50 000 – 100 000 руб."}
],
"result": "Стандартный пакет",
"utm": {
"utm_source": "yandex",
"utm_campaign": "windows_brand"
}
}
Обработчик на стороне вашего сервера (посредника между Marquiz и Битрикс24):
// /local/api/quiz-webhook.php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
header('Content-Type: application/json');
$payload = json_decode(file_get_contents('php://input'), true);
// Верификация по секретному токену в заголовке
$token = $_SERVER['HTTP_X_QUIZ_TOKEN'] ?? '';
$secret = \Bitrix\Main\Config\Option::get('local.quiz', 'webhook_secret_marquiz');
if (!hash_equals($secret, $token)) {
http_response_code(403);
exit(json_encode(['error' => 'Unauthorized']));
}
$integrator = new \Local\Quiz\Bx24Integrator();
$result = $integrator->createLeadFromQuiz($payload);
echo json_encode(['success' => true, 'lead_id' => $result]);
Создание лида в Битрикс24 через REST
namespace Local\Quiz;
use Local\Bx24\RestClient;
class Bx24Integrator
{
private RestClient $bx24;
public function __construct()
{
// Входящий вебхук Битрикс24 с правами crm.lead.add
$webhookUrl = \Bitrix\Main\Config\Option::get('local.quiz', 'bx24_webhook_url');
$this->bx24 = new RestClient($webhookUrl);
}
public function createLeadFromQuiz(array $data): int
{
$contact = $data['contact'] ?? [];
$answers = $data['answers'] ?? [];
// Формируем блок комментария с ответами квиза
$comments = $this->buildQuizComment($data['quiz_name'] ?? '', $answers, $data['result'] ?? '');
$leadFields = [
'TITLE' => ($data['quiz_name'] ?? 'Квиз') . ': ' . ($contact['phone'] ?? ''),
'NAME' => $contact['name'] ?? '',
'PHONE' => [['VALUE' => $contact['phone'] ?? '', 'VALUE_TYPE' => 'WORK']],
'EMAIL' => [['VALUE' => $contact['email'] ?? '', 'VALUE_TYPE' => 'WORK']],
'SOURCE_ID' => 'WEB',
'STATUS_ID' => 'NEW',
'COMMENTS' => $comments,
'UF_QUIZ_ID' => $data['quiz_id'] ?? '',
'UF_QUIZ_RESULT' => $data['result'] ?? '',
'UF_UTM_SOURCE' => $data['utm']['utm_source'] ?? '',
'UF_UTM_CAMPAIGN'=> $data['utm']['utm_campaign'] ?? '',
];
// Добавляем отдельные поля под конкретные вопросы квиза
$leadFields = $this->mapAnswersToFields($leadFields, $answers);
$result = $this->bx24->call('crm.lead.add', ['fields' => $leadFields]);
$leadId = (int)($result['result'] ?? 0);
if ($leadId) {
// Добавляем задачу менеджеру
$this->bx24->call('crm.activity.add', [
'fields' => [
'TYPE_ID' => 2, // звонок
'SUBJECT' => 'Позвонить по квизу: ' . ($contact['phone'] ?? ''),
'OWNER_TYPE_ID' => 1, // лид
'OWNER_ID' => $leadId,
'DEADLINE' => date('c', strtotime('+2 hours')),
],
]);
}
return $leadId;
}
private function buildQuizComment(string $quizName, array $answers, string $result): string
{
$lines = ["=== Квиз: {$quizName} ==="];
foreach ($answers as $answer) {
$lines[] = ($answer['question'] ?? '?') . ': ' . ($answer['answer'] ?? '—');
}
if ($result) {
$lines[] = '';
$lines[] = "Результат квиза: {$result}";
}
return implode("\n", $lines);
}
private function mapAnswersToFields(array $fields, array $answers): array
{
// Маппинг конкретных вопросов в пользовательские поля Битрикс24
$mapping = [
'Количество окон' => 'UF_WINDOWS_COUNT',
'Тип помещения' => 'UF_ROOM_TYPE',
'Бюджет' => 'UF_BUDGET_RANGE',
'Срочность' => 'UF_URGENCY',
];
foreach ($answers as $answer) {
$question = $answer['question'] ?? '';
$fieldCode = $mapping[$question] ?? null;
if ($fieldCode) {
$fields[$fieldCode] = $answer['answer'] ?? '';
}
}
return $fields;
}
}
Кастомные поля в Битрикс24 для квиза
Поля создаются через REST API или в интерфейсе Битрикс24 (CRM → Настройки → Пользовательские поля):
// Создание пользовательского поля для лида через REST
$this->bx24->call('crm.userfield.add', [
'fields' => [
'ENTITY_ID' => 'CRM_LEAD',
'FIELD_NAME' => 'UF_QUIZ_RESULT',
'USER_TYPE_ID'=> 'string',
'XML_ID' => 'QUIZ_RESULT',
'EDIT_FORM_LABEL' => ['ru' => 'Результат квиза'],
'LIST_COLUMN_LABEL' => ['ru' => 'Результат квиза'],
'MANDATORY' => 'N',
],
]);
Маппинг вопросов квиза в пользовательские поля
| Вопрос квиза | Поле в CRM | Тип |
|---|---|---|
| Бюджет | UF_BUDGET_RANGE |
string |
| Тип помещения | UF_ROOM_TYPE |
string |
| Срочность | UF_URGENCY |
string |
| Количество окон | UF_WINDOWS_COUNT |
integer |
Интеграция через CRM-форму Битрикс24
Если квиз разрабатывается с нуля — альтернативный подход: CRM-форма Битрикс24 со скрытыми полями. Последний шаг квиза отправляет данные напрямую в форму через API:
// Финальный шаг квиза: отправляем данные в CRM-форму Битрикс24
async function submitQuizToBx24(answers, contact) {
const formData = new FormData();
// Поля CRM-формы
formData.append('fields[NAME]', contact.name);
formData.append('fields[PHONE][0][VALUE]', contact.phone);
formData.append('fields[UF_QUIZ_RESULT]', getQuizResult(answers));
formData.append('fields[COMMENTS]', formatAnswers(answers));
// ID формы из настроек Битрикс24
const formId = document.getElementById('quiz-container').dataset.bx24FormId;
await fetch(`https://your-domain.bitrix24.ru/crm/webform/import/form/${formId}/`, {
method: 'POST',
body: formData,
});
}
Этапы интеграции (пошагово)
- Анализ структуры квиза и требований к полям CRM.
- Создание пользовательских полей в Битрикс24 (через REST или интерфейс).
- Разработка webhook-обработчика или REST-скрипта для приёма данных.
- Настройка маппинга вопросов → поля лида.
- Создание автоматической задачи-активности (звонок через 2 часа).
- Тестирование полного сценария: заполнение квиза → появление лида в CRM.
- Документация и передача доступов.
Почему важно передавать UTM-метки в сделку?
Без UTM-меток вы не узнаете, какой канал привёл целевого клиента. В интеграции мы передаём utm_source и utm_campaign в отдельные поля лида. Это позволяет строить отчёты по эффективности рекламных кампаний прямо в CRM, без дополнительных систем аналитики. Для менеджеров это помогает понимать контекст: например, лид с дешёвого баннера требует другого подхода, чем с дорогой контекстной рекламы.
Типичные ошибки при интеграции
- Отсутствие верификации webhook-запроса (секретный токен). Без неё любой может отправить фейковые лиды.
- Маппинг ответов только в комментарии. Ответы теряются в тексте, менеджеру сложно их анализировать.
- Игнорирование UTM-меток. Вы теряете атрибуцию трафика.
- Создание лида без автоматической задачи. Клиент может «зависнуть» в статусе NEW на дни.
Мы учитываем эти нюансы в каждом проекте. Наш опыт позволяет избежать типовых проблем и внедрить интеграцию с первого раза.
Сроки и стоимость
- Базовый webhook (один квиз-сервис, 3 поля ответа, без UTM) — от 3 до 7 дней.
- Полная настройка (кастомные поля, активность, UTM, несколько квизов) — 1–2 недели.
Стоимость рассчитывается индивидуально, зависит от количества квизов и сложности маппинга. Свяжитесь с нами для оценки вашего проекта — пришлём коммерческое предложение в течение дня. Закажите интеграцию и получите готовое решение с гарантией 6 месяцев.







