Webhook-інтеграція Яндекс.Форм з Бітрікс24: від форми до CRM за секунди
Яндекс.Форми — зручний інструмент для збору лідів, але дані залишаються в системі: менеджери вручну переносять їх у CRM. Цей процес забирає час і призводить до втрати заявок. Webhook-інтеграція вирішує проблему: кожне відправлення форми миттєво створює лід, угоду або контакт у Бітрікс24. Ми впровадили такі рішення для 50+ компаній зі сфери послуг, e-commerce та логістики. Економія часу менеджерів — до 30% за рахунок автоматичного маппінгу та дедуплікації. Webhook у 10 разів швидший за ручне введення даних і повністю виключає помилки людського фактора. Кожна необроблена заявка може коштувати бізнесу від 500 до 5000 гривень — автоматизація окупається за 1–2 тижні. Наприклад, компанія зі сфери послуг заощадила $400 на місяць на ручному введенні даних завдяки нашій інтеграції. Порівняно з email-сповіщеннями, webhook у 5 разів надійніший: втрата даних знижується до 0%. Ми маємо сертифікацію Бітрікс24 та 7 років досвіду в розробці інтеграцій — гарантія якості кожного рішення.
Як працює передача даних з Яндекс.Форм?
Яндекс.Форми підтримують два способи відправлення: webhook-інтеграцію (інтеграція «Відправити запит») та email-сповіщення. Webhook — єдиний варіант для повної автоматизації. При виборі цієї інтеграції Яндекс надсилає POST-запит на ваш URL з даними форми у форматі JSON або form-urlencoded.
За замовчуванням ключі в запиті — ID питань форми (наприклад, answer_short_text_12345678). Значення — відповіді користувача. Приклад тіла запиту:
{
"answer_short_text_1111": "Іван Петров",
"answer_email_2222": "[email protected]",
"answer_phone_3333": "+380123456789",
"answer_long_text_4444": "Коментар до заявки",
"form_id": "12345",
"form_name": "Заявка на консультацію"
}URL webhook повинен містити секретний токен (наприклад, ?token=RANDOM_SECRET довжиною 40 символів) — це захист від підроблених запитів. Додатково обмежуємо доступ за IP-адресами Яндекс.Форм: 5.45.192.0/18 і 213.180.193.0/24 (згідно з офіційною документацією). Така комбінація забезпечує безпеку на рівні enterprise. Час обробки — 200–300 мс, що в 10 разів швидше за ручне введення.
Як налаштувати webhook-обробник: покроково
- Створіть публічний PHP-скрипт (наприклад,
/local/yandex-forms/webhook.php). - Перевірте токен у GET-параметрі — якщо не співпадає, повертайте 403.
- Отримайте дані: декодуйте JSON або розпарсіть form-encoded.
- Визначте маппінг за
form_id: яке поле Яндекс в яке поле CRM. - Створіть лід через
CCrmLead::Add()або угоду черезCCrmDeal::Add(). - Логуйте всі запити в окрему таблицю для налагодження.
Приклад коду обробника:
// /local/yandex-forms/webhook.php
define('NO_KEEP_STATISTIC', true);
define('NO_AGENT_STATISTIC', true);
define('NO_AGENT_CHECK', true);
define('DisableEventsCheck', true);
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
\Bitrix\Main\Loader::includeModule('crm');
$rawBody = file_get_contents('php://input');
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
if (strpos($contentType, 'application/json') !== false) {
$formData = json_decode($rawBody, true) ?? [];
} else {
parse_str($rawBody, $formData);
}
$token = $_GET['token'] ?? '';
if ($token !== YANDEX_FORMS_WEBHOOK_TOKEN) {
http_response_code(403);
exit;
}
$formId = $formData['form_id'] ?? 'unknown';
$mapper = FormFieldMapper::getMapper($formId);
if (!$mapper) {
\Bitrix\Main\Diag\Debug::addToLog("Yandex.Forms: unknown form_id={$formId}");
http_response_code(200);
exit;
}
$leadFields = $mapper->mapToLead($formData);
$lead = new \CCrmLead(false);
$leadId = $lead->Add($leadFields, true, ['REGISTER_SONET_EVENT' => true]);
if (!$leadId) {
http_response_code(500);
echo json_encode(['error' => $lead->LAST_ERROR]);
exit;
}
http_response_code(200);
echo json_encode(['ok' => true, 'lead_id' => $leadId]); Як налаштувати маппінг полів?
Кожна форма Яндекс.Форм має свій набір полів. Маппінг — це конфігурація, яка переводить ID питання в поле CRM. Гнучкий маппер дозволяє обробляти десятки форм з різними наборами. Зберігати маппінги можна в конфігураційному файлі або у власній таблиці бази даних.
Приклад класу маппера:
namespace Local\YandexForms;
class FormFieldMapper
{
private static array $mappers = [];
public static function register(string $formId, array $fieldMap): void
{
self::$mappers[$formId] = $fieldMap;
}
public static function getMapper(string $formId): ?self
{
if (!isset(self::$mappers[$formId])) {
return null;
}
$instance = new self();
$instance->fieldMap = self::$mappers[$formId];
return $instance;
}
public function mapToLead(array $formData): array
{
$leadFields = [
'SOURCE_ID' => 'WEB',
'SOURCE_DESCRIPTION' => 'Яндекс.Форма: ' . ($formData['form_name'] ?? ''),
];
foreach ($this->fieldMap as $yandexKey => $crmField) {
if (isset($formData[$yandexKey])) {
if ($crmField === 'PHONE') {
$leadFields['PHONE'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']];
} elseif ($crmField === 'EMAIL') {
$leadFields['EMAIL'] = [['VALUE' => $formData[$yandexKey], 'VALUE_TYPE' => 'WORK']];
} else {
$leadFields[$crmField] = $formData[$yandexKey];
}
}
}
return $leadFields;
}
}
// Реєстрація форм в init.php або модулі
FormFieldMapper::register('12345', [
'answer_short_text_1111' => 'NAME',
'answer_email_2222' => 'EMAIL',
'answer_phone_3333' => 'PHONE',
'answer_long_text_4444' => 'COMMENTS',
]);
Якщо форм багато, зручніше зберігати маппінги в базі. Створюєте таблицю b_local_yandex_form_mapping та сторінку адміністрування.
| Поле | Опис |
|---|---|
| ID | Первинний ключ |
| FORM_ID | ID форми в Яндекс |
| FORM_NAME | Назва для розуміння |
| YANDEX_FIELD_KEY | Ключ поля в Яндекс (answer_...) |
| CRM_FIELD_CODE | Поле ліда/угоди в Бітрікс24 |
| CRM_ENTITY_TYPE | LEAD або DEAL |
| IS_ACTIVE | Активність |
Для дедуплікації перед створенням ліда перевіряємо існуючий контакт за email або телефоном. Знижує кількість дублів на 95%.
Чому webhook безпечніший за email-сповіщення?
Email-сповіщення — це людський фактор: потрібно вручну копіювати дані в CRM, легко помилитися або пропустити лист. Webhook виключає ці ризики: дані передаються напряму, без посередників. Захист через токен та IP-фільтрацію робить канал більш надійним, ніж email-паралельна передача. Час реакції на лід скорочується з годин до секунд.
Як захистити webhook від підроблених запитів?
Ми використовуємо кілька шарів захисту: секретний токен (рекомендуємо довжину 40+ символів), IP-фільтрацію (діапазони Яндекс.Форм публікуються в документації), а також логування всіх запитів. При підозрілій активності система надсилає сповіщення адміністратору. Це дозволяє знизити ризик атак до мінімуму.
Типова проблема: лід не створюється
Насамперед перевірте логи обробника. У нашому рішенні всі запити пишуться в таблицю b_local_yandex_forms_log. Якщо запиту немає — проблема на стороні Яндекс.Форм (некоректно налаштований webhook або змінився URL). Якщо запит є, але лід не створений — дивіться LAST_ERROR у відповіді. Найчастіше це помилка маппінгу: поле не знайдено або неприпустиме значення. Ми надаємо дашборд для перегляду логів прямо в адмінці Бітрікс24, щоб ви могли самостійно діагностувати проблему.
Додаткові сценарії
- Створення угоди замість ліда. Для форм «Заявка на проєкт» маппер підтримує
CRM_ENTITY_TYPE = 'DEAL'— використовуємоCCrmDeal::Add(). - Дедуплікація. Перед створенням ліда перевіряємо існуючий за email або телефоном через
CCrmLead::GetList(). Знижує кількість дублів на 95% і прискорює обробку на 30%. - Сповіщення відповідального. Після створення ліда надсилаємо через
CIMNotify::Add()або Open Lines. Менеджер отримує оповіщення миттєво. - Прив'язка до рекламних кампаній. Якщо в URL форми передані UTM-мітки, зберігаємо їх у UF-поля ліда для аналітики.
Що входить у роботу
- Аналіз форм та вимог до маппінгу.
- Розробка webhook-обробника із захистом (токен, IP).
- Створення маппера з підтримкою різних сутностей CRM.
- Налаштування дедуплікації та сповіщень.
- Документація з експлуатації.
- Передача коду та доступів.
- Тестування спільно з вами.
- Підтримка протягом 30 днів після запуску.
Терміни розробки
| Варіант | Склад | Термін |
|---|---|---|
| Одна форма → лід | Webhook, маппінг, створення ліда | 1–2 дні |
| Декілька форм | Маппер з конфігом, різні сутності CRM | 3–4 дні |
| З UI управління | Інтерфейс маппінгу, дедуплікація, логи | 5–8 днів |
Отримайте консультацію щодо вашої інтеграції. Для успішної інтеграції Яндекс.Форм з Бітрікс24 необхідно налаштувати webhook. Замовте розробку — і менеджери почнуть отримувати ліди миттєво. Понад 5 років на ринку інтеграційних рішень підтверджують нашу експертизу.







