# Лиды из ВКонтакте в Битрикс24: VK Реклама по API и формы сообществ

> Два способа получать заявки из ВКонтакте в Битрикс24 без стандартных CRM-форм: подписка на лид-формы VK Рекламы по API и Callback API сообществ.

- Авторство: Идея и тезисы: Максим · Текст: Claude (ИИ) [co]
- Идея, вводные и ключевые тезисы — Максим. Текст по ним написал Claude (ИИ), Максим проверил его перед публикацией.
- Опубликовано: 2026-10-16
- Теги: Битрикс24, REST API, вебхуки
- Адрес: https://dgtor.blog/posts/vk-leads-to-bitrix24/

Стандартное подключение ВКонтакте через CRM-формы Битрикс24 подходит не всегда. Например, когда групп несколько или заявки идут из лид-форм рекламного кабинета. Тогда остаётся код: небольшой PHP-скрипт на своём сервере принимает заявку от ВК и создаёт лид в Битрикс24 через входящий вебхук.

Ниже два способа, которые Максим использовал в 2024 году:

1. Лид-формы **VK Рекламы** (ads.vk.com) — подписка на заявки через API рекламного кабинета.
2. Лид-формы **сообществ ВКонтакте** — Callback API группы. Подходит, когда к Битрикс24 нужно подключить несколько групп.

В обоих случаях понадобятся:

- свой сервер с PHP и SSL-сертификатом;
- входящий вебхук Битрикс24 с правами на CRM;
- ID источника, с которым будут создаваться лиды;
- минимальные знания PHP.

## Как узнать ID источника

В Битрикс24 откройте «Настройки» → «Настройки CRM» → «Справочники» → «Источники». Нажмите правой кнопкой мыши на нужном источнике и выберите «Проверить объект» (инструменты разработчика браузера). ID — в атрибуте `value` у поля `STATUS_ID`.

![Справочник источников в Битрикс24 и инструменты разработчика браузера: у источника «Веб-сайт» значение STATUS_ID равно WEB](./source-id.jpg)

Другой способ — запросить список источников через вебхук методом `crm.status.list`. Он описан в статье «[Получение источника через вебхук в Битрикс24](/posts/webhook-lead-source-id/)».

## Способ 1. VK Реклама по API

Документация VK Рекламы:

- [Быстрый старт](https://ads.vk.ru/doc/api/info/Быстрый%20старт) — как получить токен;
- [Подписки](https://ads.vk.ru/doc/api/resource/Subscriptions) — как подписаться на заявки.

Для проверки запросов пригодятся [Postman](https://www.postman.com) и [Webhook.site](https://webhook.site/).

### Получите доступ к API

1. Зайдите в рекламный кабинет VK.
2. В левом меню выберите «Настройки».
3. Скопируйте `client_id`.
4. Запросите дополнительный доступ к API.
5. Авторизуйтесь.
6. Скопируйте `client_secret`. Он **показывается только 10 минут**.
7. Сохраните полученные данные в надёжном месте.

### Оформите подписку на заявки через Postman

1. Получите токен доступа по инструкции из «[Быстрого старта](https://ads.vk.ru/doc/api/info/Быстрый%20старт)».
2. Создайте запрос с методом POST на адрес `https://ads.vk.com/api/v3/subscription.json`.
3. На вкладке Authorization выберите тип Bearer Token и вставьте токен из пункта 1.
4. На вкладке Headers добавьте ключ `Content-Type` со значением `application/json`.
5. На вкладке Body выберите `raw`, формат JSON, и вставьте:

   ```json
   {
     "resource": "LEAD",
     "callback_url": "https://<адрес обработчика>"
   }
   ```

6. Отправьте запрос. После этого появится подписка, и VK будет отправлять обработчику данные заполненных лид-форм. От заполнения формы до прихода данных может пройти до 15 минут.

![Запрос в Postman: метод POST на ads.vk.com/api/v3/subscription.json, авторизация Bearer Token](./ads-subscription.jpg)

### Обработчик: заявка → лид в Битрикс24

Скрипт принимает заявку от VK и создаёт лид методом `crm.lead.add`. В начале скрипта укажите адрес своего вебхука и ID источника. Разработка — Александр Белокуров.

```php
<?php
if (!isset($_REQUEST)) {
    return;
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    echo "Нет таких тут!";
}
else {
    // Возвращаем "ok" серверу
    echo('ok');
    // Получение данных из POST-запроса
    $jsondata = file_get_contents('php://input');

    // Динамические данные
    $url = 'https://<портал>.bitrix24.ru/rest/<id пользователя>/<код вебхука>/'; // Тут вебхук с правами CRM
    $sourceId = 'web'; // Тут ID источника
    $title = 'Новый лид от VK';

    // Убираем сломанную строку
    $cleanedJson = preg_replace('/,\s*"created_at":\s*"[^"]+"\s*/', '', $jsondata);
    // Преобразование JSON в ассоциативный массив
    $data = json_decode($cleanedJson);

    // Записываем переменные
    $name = $data->data->contact_info->first_name;
    $phone = $data->data->contact_info->phone;
    $email = $data->data->contact_info->email;

    // Записываем ответы для комментария
    $comm = '';
    $questionNumber = 1;
    foreach ($data->data->answers as $answer) {
        $comm .= 'Вопрос ' . $questionNumber . ': ' . $answer->answer_text . '<br>';
        $questionNumber++;
    }
    // Убираем последний перенос строки в комментарии
    $comm = preg_replace('/<br>$/', '', $comm);

    // Формируем данные для REST
    $queryUrl = $url . 'crm.lead.add';
    $leadData = array(
        'fields' => array(
            'TITLE' => $title,
            'NAME' => $name,
            'PHONE' => array(array('VALUE' => $phone, 'VALUE_TYPE' => 'WORK')),
            'EMAIL' => array(array('VALUE' => $email, 'VALUE_TYPE' => 'WORK')),
            "COMMENTS" => $comm,
            "STATUS_ID" => "NEW",
            "OPENED" => "Y",
            "SOURCE_ID" => $sourceId,
            "ASSIGNED_BY_ID" => 1,
            // Добавьте другие необходимые поля для лида
        )
    );
    // Преобразование данных в формат JSON
    $jsonData = json_encode($leadData);

    // Отправляем REST
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_SSL_VERIFYPEER => 0,
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_URL => $queryUrl,
        CURLOPT_POSTFIELDS => $jsonData,
        CURLOPT_HTTPHEADER => array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData)
        )
    ));
    $result = curl_exec($curl);
    $error = curl_error($curl);
    curl_close($curl);

    // Логируем результат
    if ($result === false) {
        file_put_contents('errors.txt', PHP_EOL . date("Y-m-d H:i:s") . PHP_EOL . 'Ошибка при выполнении запроса curl: ' . $error, FILE_APPEND);
    } else {
        file_put_contents('logs.txt', PHP_EOL . date("Y-m-d H:i:s") . PHP_EOL . 'Ответ от сервера Bitrix24: ' . $result, FILE_APPEND);
    }
}
```

## Способ 2. Лид-формы сообществ через Callback API

Этот способ нужен, когда к Битрикс24 подключают несколько групп ВКонтакте. Скрипт обработчика ниже — честная сборка из нескольких источников. Настройка занимает минут десять.

Скрипт проверяет секретный ключ, отвечает ВК строкой подтверждения, ищет контакт с тем же телефоном и создаёт лид методом `crm.lead.add` с ответами формы в комментарии. Настройки — в начале файла: вебхук, ID источника, UTM-метка, строка подтверждения, секретный ключ и номера форм (`all` — все формы сообщества).

```php
<?php

if (!isset($_REQUEST)) {
    return;
}

//блок настроек
$url = 'https://<портал>.bitrix24.ru/rest/<id пользователя>/<код вебхука>/'; //Вебхук
$sourceId = "WEB"; //ID Источника
$utm_source = "vk"; //UTM Source
$confirmation_token = '<строка подтверждения>'; // Строка, которую должен вернуть сервер
$secret = '<секретный ключ>'; //Секретный ключ
$formId = array("all"); //Если all, то передавать все формы, если цифры, то конкретную 15

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    echo "Нет таких тут!";
}
else{
    $token = ' '; //Ключ доступа сообщества
/*
    $file = 'log.txt'; //Если нужны логи, то раскомментировать
    $current = file_get_contents($file);
    file_put_contents($file, print_r("php://input", true), FILE_APPEND);
*/
    $data = json_decode(file_get_contents('php://input')); //Получаем и декодируем уведомление

    //Проверяем секретный код
    if ($data->secret !== $secret) {
        return;
    }

    //Проверяем, что находится в поле "type"
    switch ($data->type) {
        case 'confirmation': //Если это уведомление для подтверждения адреса...
            echo $confirmation_token; //...отправляем строку для подтверждения
            break;



        //Блок обработки лидформы
        case 'lead_forms_new':
            echo('ok'); //Возвращаем "ok" серверу Callback API
            $lead_id = $data->object->lead_id;
            $vk_id = $data->object->user_id; // ID пользователя, отправившего заявку
            $form_name = $data->object->form_name; // Название формы
            $form_id = $data->object->form_id;
            $adid = $data->object->ad_id; // ID рекламного объявления, с которого пришла заявка

            if((in_array($form_id, $formId)) || (in_array("all", $formId))) {
                if($data->object->answers) {
                    foreach ($data->object->answers as $answer) {
                        $ansvers[$answer->key]["question"] = $answer->question;
                        $ansvers[$answer->key]["answer"] = $answer->answer;
                        $pos = strpos($answer->key, "custom");
                        if ($pos !== false) {
                            $customs[$answer->key]["question"] = $answer->question;
                            $customs[$answer->key]["answer"] = $answer->answer;
                        }
                    }
                }
                $name = $ansvers["first_name"]["answer"]; // Имя
                $secname = $ansvers["patronymic_name"]["answer"]; // Отчество
                $surname = $ansvers["last_name"]["answer"]; // Фамилия
                $email = $ansvers["email"]["answer"]; // Email
                $phone = $ansvers["phone_number"]["answer"]; // Телефон основной
                $birth = $ansvers["birthday"]["answer"]; // День рождения
                $adres = $ansvers["location"]["answer"]; // Адрес
                //$phoneH = $ansvers["custom_1"]["answer"]; // Телефон домашний
                $comments = "<b>" . $ansvers["age"]["question"] . "</b>: " . $ansvers["age"]["answer"] . "; <br />";
                if($customs) {
                    foreach ($customs as $custom) {
                        $comments .= "<b>" . $custom["question"] . "</b>: " . $custom["answer"] . "; <br />";
                    }
                }

                // Запишем данные для Б24
                $vk_id = "id" . $vk_id;

                //Разделение адреса -- ОК
                $exadres = explode(", ", $adres);
                $country = $exadres[0];
                $city = $exadres[1];

                $queryUrl = $url . 'crm.lead.add';

                //Проверим
                $queryUrlC = $url . 'crm.duplicate.findbycomm?';

                $queryDataC = http_build_query(
                    array(
                        'entity_type' => "CONTACT",
                        'type' => "PHONE",
                        'values' => array($phone)
                    )
                );


                $curlC = curl_init();
                curl_setopt_array($curlC, array(
                    CURLOPT_SSL_VERIFYPEER => 0,
                    CURLOPT_POST => 1,
                    CURLOPT_HEADER => 0,
                    CURLOPT_RETURNTRANSFER => 1,
                    CURLOPT_URL => $queryUrlC,
                    CURLOPT_POSTFIELDS => $queryDataC,
                ));

                $resultC = curl_exec($curlC);
                curl_close($curlC);
                $resultC = json_decode($resultC, 1);
                //

                $queryData = http_build_query(array(
                    'fields' => array(
                        "TITLE" => $form_name . " - " . $name,
                        "NAME" => $name,
                        "LAST_NAME" => $surname,
                        "SECOND_NAME" => $secname,
                        "BIRTHDATE" => $birth,
                        "STATUS_ID" => "NEW",
                        "OPENED" => "Y",
                        "SOURCE_ID" => $sourceId,
                        "ASSIGNED_BY_ID" => 1,
                        "COMMENTS" => $comments,
                        "PHONE" => array(array("VALUE" => $phone, "VALUE_TYPE" => "WORK")/*,array("VALUE" => $phoneH, "VALUE_TYPE" => "HOME" )*/),
                        "EMAIL" => array(array("VALUE" => $email, "VALUE_TYPE" => "WORK")),
                        "IM" => array(array("VALUE" => $vk_id, "VALUE_TYPE" => "VK")),
                        "ADDRESS_COUNTRY" => $country,
                        "ADDRESS_CITY" => $city,
                        "UTM_SOURCE" => $utm_source,
                        "UTM_CONTENT" => $adid,
                        'CONTACT_ID' => ($resultC["result"]["CONTACT"][0]) ? $resultC["result"]["CONTACT"][0] : '',
                    ),
                    'params' => array("REGISTER_SONET_EVENT" => "Y")
                ));


                $curl = curl_init();
                curl_setopt_array($curl, array(
                    CURLOPT_SSL_VERIFYPEER => 0,
                    CURLOPT_POST => 1,
                    CURLOPT_HEADER => 0,
                    CURLOPT_RETURNTRANSFER => 1,
                    CURLOPT_URL => $queryUrl,
                    CURLOPT_POSTFIELDS => $queryData,
                ));

                $result = curl_exec($curl);
                curl_close($curl);
                $result = json_decode($result, 1);
            }
            break;
            break;
    }


}
?>
```

### Шаг 1. Данные из Битрикс24

1. Создайте входящий вебхук с правами на CRM.
2. Узнайте ID источника, с которым будут создаваться лиды (см. выше).
3. Внесите адрес вебхука и ID источника в блок настроек скрипта (`$url`, `$sourceId`).

### Шаг 2. Настройки в сообществе ВКонтакте

1. Откройте «Настройки» → «Работа с API».
2. Перейдите на вкладку Callback API.
3. Придумайте любой секретный ключ и сохраните его.
4. Скопируйте ключ в скрипт (`$secret`).
5. Скопируйте в скрипт значение «Строка, которую должен вернуть сервер» (`$confirmation_token`) и сохраните скрипт.
6. Разместите скрипт на сервере и укажите его адрес в поле «Адрес». Адрес должен начинаться с `https`.
7. Нажмите «Подтвердить». Если всё сделано правильно, появится зелёное сообщение об успехе.
8. На вкладке «Типы событий» в самом низу отметьте «Lead forms: Новая заявка».
9. Отправьте тестовую заявку через форму.

![Настройки Callback API сообщества ВКонтакте: цифрами отмечен порядок шагов — «Работа с API», вкладка Callback API, секретный ключ, строка для ответа сервера, адрес, кнопка «Подтвердить», вкладка «Типы событий»](./vk-callback-api.jpg)

Готово: новые заявки из лид-форм сообщества будут приходить в Битрикс24 лидами.
