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 років на ринку інтеграційних рішень підтверджують нашу експертизу.







