Настройка
В личном кабинете откройте квиз → «Настройки» → «Интеграции» → карточка Webhooks. Укажите URL, на который будет отправляться POST-запрос.
Для теста можно использовать webhook.site.
Важно: обработчик должен отвечать успешным HTTP-статусом (200, 204 и т.п.).
Формат запроса
Метод:
Заголовок:
Тело:
POSTЗаголовок:
Content-Type: application/jsonТело:
JSON
Старые поля сохранены без изменений. Новые поля добавляются только если они есть в заявке — интеграции, завязанные на старый формат, продолжат работать.
Пример полного payload
{
"id": 12345,
"quizId": 611,
"answers": [
{"q": "Вопрос 1", "questionId": 10, "a": ["Вариант 2"]},
{"q": "Вопрос 2", "questionId": 11, "a": ["Вариант 3"]}
],
"contacts": {
"name": "Иван",
"phone": "79991234567",
"email": "example@gmail.com",
"address": "Москва, ул. Примерная, 1",
"text": "Нужна консультация",
"messenger": {"type": "telegram", "value": "@username"},
"messengerName": "Иван"
},
"created": "17.08.2019 22:41",
"quizDurationSeconds": 95,
"result": {
"value": "15%",
"title": "Ваша скидка",
"description": "Завершите оформление"
},
"extra": {
"href": "https://example.com/page",
"ref": "https://google.com",
"utm": {"utm_source": "google"},
"cookies": {
"_ga": "GA1.2.477745229.1562102022",
"_ym_uid": "1562107156134812542"
}
}
}
Описание полей: верхний уровень
| Поле | Тип | Описание |
|---|---|---|
answers | array | Ответы на вопросы квиза |
contacts | object | Контактные данные |
created | string | Дата заявки, формат дд.мм.гггг чч:мм |
extra | object | UTM, cookies, URL страницы, referer, скидка |
result | object | null | Результат квиза (скидка и т.п.) |
id | number | ID заявки в LeadForms новое |
quizId | number | ID квиза новое |
quizDurationSeconds | number | Время прохождения квиза в секундах новое |
Поля answers[]
| Поле | Описание |
|---|---|
q | Текст вопроса |
questionId | ID вопроса |
a | Массив ответов (строки) |
Поля contacts
| Поле | Описание |
|---|---|
name | Имя |
phone | Телефон |
email | |
address | Адрес новое |
text | Комментарий / произвольный текст новое |
messenger | Мессенджер: {"type": "telegram", "value": "@username"} новое |
messengerName | Имя при сборе через мессенджер новое |
Типы
messenger.type: telegram, whatsapp, viber, vk, messenger, instagram, teams, max, wechat, phone.Поля result
| Поле | Описание |
|---|---|
value | Значение (например, размер скидки) |
title | Заголовок |
description | Описание |
Поля extra
| Поле | Описание |
|---|---|
href | URL страницы, с которой отправлена заявка |
ref | Referer |
utm | UTM-метки (объект) |
cookies | Cookies (объект) |
discount | Скидка, если настроена в квизе |
Двухэтапная форма контактов
Если в квизе включена двухэтапная форма:
• Webhook уходит после полной заявки (когда собраны все шаги).
• Если пользователь заполнил только первый шаг и не вернулся — заявка может уйти через ~60 секунд с частичными контактами.
Пример PHP-обработчика
<?php
$data = json_decode(file_get_contents('php://input'), true);
$answers = $data['answers'] ?? [];
$contacts = $data['contacts'] ?? [];
$phone = $contacts['phone'] ?? null;
$email = $contacts['email'] ?? null;
$name = $contacts['name'] ?? ($contacts['messengerName'] ?? null);
$messenger = $contacts['messenger'] ?? null; // ['type' => 'telegram', 'value' => '@username']
$address = $contacts['address'] ?? null;
$comment = $contacts['text'] ?? null;
$createdDate = strtotime($data['created'] ?? 'now');
$utm = $data['extra']['utm'] ?? [];
$result = $data['result'] ?? null;
$quizDurationSeconds = $data['quizDurationSeconds'] ?? null;
$leadId = $data['id'] ?? null;
$quizId = $data['quizId'] ?? null;
// Ваша логика обработки...
http_response_code(200);
exit;
Обратная совместимость
Интеграции, которые читают только
answers, contacts.name/phone/email, created, extra — продолжают работать. Новые поля (address, text, messenger, quizDurationSeconds, id, quizId, result) можно подключать по необходимости.