Как подключить свой вебхук для приёма заявок
Вебхук — это способ автоматически передавать заявки с вашего сайта в любую другую систему: CRM, таблицу, мессенджер или ваш собственный сервер. Вы указываете ссылку — и каждая новая заявка с форм и квизов сайта сразу отправляется на неё. В этой статье — как подключить вебхук и в каком виде приходят данные, чтобы ваш разработчик мог принять их на своей стороне.
Как подключить вебхук
Подключение занимает пару минут и не требует программиста — ссылку обычно выдаёт та система, куда вы хотите передавать заявки.

В каком виде приходят данные
На вашу ссылку отправляется POST-запрос с телом в формате JSON (кодировка UTF-8, заголовок Content-Type: application/json). Поля запроса:
| Поле | Что содержит |
|---|---|
event | Тип события: lead.created — настоящая заявка, lead.test — тест кнопкой «Тест». |
test | true у тестовой заявки, false у настоящей. |
lead_id | Номер заявки в KotPlatform. У повторной отправки той же заявки номер не меняется. |
site_name | Название сайта. |
site_slug | Адрес сайта (часть до .kotplatform.site). |
page_path | Страница, с которой отправлена форма (например, «/» — главная). |
block_id | Номер блока с формой или квизом на странице. |
lead | Контакты посетителя со стабильными ключами: name, phone, email. Поле всегда на месте; чего нет в форме — придёт пустой строкой. Привязывайтесь к этому блоку. |
answers | Ответы квиза и остальные поля формы — списком пар { "question": …, "answer": … }. Структура списка не меняется, даже если вы переименуете или переставите вопросы. |
fields | Те же данные одним списком «название поля: значение» — как поля называются в форме. Удобно для быстрого просмотра, но для интеграций надёжнее lead и answers. |
submitted_at | Дата и время отправки заявки. |
{
"event": "lead.created",
"test": false,
"lead_id": 1024,
"site_name": "Ремонт квартир в Казани",
"site_slug": "remont-kazan",
"page_path": "/",
"block_id": "form_main",
"lead": {
"name": "Иван",
"phone": "+7 900 123-45-67",
"email": "ivan@example.com"
},
"answers": [
{ "question": "Какой у вас бюджет?", "answer": "до 100 тыс." },
{ "question": "Когда планируете начать?", "answer": "в этом месяце" }
],
"utm": {
"utm_source": "yandex",
"utm_medium": "cpc",
"utm_campaign": "114696138"
},
"fields": {
"name": "Иван",
"phone": "+7 900 123-45-67",
"email": "ivan@example.com",
"Какой у вас бюджет?": "до 100 тыс.",
"Когда планируете начать?": "в этом месяце"
},
"submitted_at": "2026-07-18T14:32:05+03:00"
}lead и списку answers — они не зависят от текстов вопросов. Если настроить связку на названия полей из fields, она сломается при переименовании вопроса в квизе.Как принять заявку на своём сервере
Ваша ссылка должна работать по https и отвечать кодом 200 (или любым кодом 2xx) — это сигнал «заявку получил». Содержимое ответа мы не читаем, можно отвечать пустой страницей. Отвечайте быстро: на ответ отводится 10 секунд, тяжёлую обработку лучше делать после ответа.
Если ссылка не ответила или ответила ошибкой, мы повторим отправку — до трёх раз с паузой около минуты. Поэтому один и тот же lead_id может прийти повторно: если ведёте свою базу, проверяйте номер заявки, чтобы не создать дубль.
<?php
// Простейший приёмник на PHP: сохраняет заявки в файл.
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
if ($data && ($data['event'] ?? '') === 'lead.created') {
$line = date('c')
. ' | ' . ($data['lead']['name'] ?? '')
. ' | ' . ($data['lead']['phone'] ?? '');
foreach ($data['answers'] ?? [] as $a) {
$line .= ' | ' . $a['question'] . ': ' . $a['answer'];
}
file_put_contents(__DIR__ . '/leads.log', $line . PHP_EOL, FILE_APPEND);
}
http_response_code(200); // главное — ответить кодом 200