Стандартное подключение ВКонтакте через CRM-формы Битрикс24 подходит не всегда. Например, когда групп несколько или заявки идут из лид-форм рекламного кабинета. Тогда остаётся код: небольшой PHP-скрипт на своём сервере принимает заявку от ВК и создаёт лид в Битрикс24 через входящий вебхук.
Ниже два способа, которые Максим использовал в 2024 году:
- Лид-формы VK Рекламы (ads.vk.com) — подписка на заявки через API рекламного кабинета.
- Лид-формы сообществ ВКонтакте — Callback API группы. Подходит, когда к Битрикс24 нужно подключить несколько групп.
В обоих случаях понадобятся:
- свой сервер с PHP и SSL-сертификатом;
- входящий вебхук Битрикс24 с правами на CRM;
- ID источника, с которым будут создаваться лиды;
- минимальные знания PHP.
Как узнать ID источника
В Битрикс24 откройте «Настройки» → «Настройки CRM» → «Справочники» → «Источники». Нажмите правой кнопкой мыши на нужном источнике и выберите «Проверить объект» (инструменты разработчика браузера). ID — в атрибуте value у поля STATUS_ID.

Другой способ — запросить список источников через вебхук методом crm.status.list. Он описан в статье «Получение источника через вебхук в Битрикс24».
Способ 1. VK Реклама по API
Документация VK Рекламы:
- Быстрый старт — как получить токен;
- Подписки — как подписаться на заявки.
Для проверки запросов пригодятся Postman и Webhook.site.
Получите доступ к API
- Зайдите в рекламный кабинет VK.
- В левом меню выберите «Настройки».
- Скопируйте
client_id. - Запросите дополнительный доступ к API.
- Авторизуйтесь.
- Скопируйте
client_secret. Он показывается только 10 минут. - Сохраните полученные данные в надёжном месте.
Оформите подписку на заявки через Postman
-
Получите токен доступа по инструкции из «Быстрого старта».
-
Создайте запрос с методом POST на адрес
https://ads.vk.com/api/v3/subscription.json. -
На вкладке Authorization выберите тип Bearer Token и вставьте токен из пункта 1.
-
На вкладке Headers добавьте ключ
Content-Typeсо значениемapplication/json. -
На вкладке Body выберите
raw, формат JSON, и вставьте:{ "resource": "LEAD", "callback_url": "https://<адрес обработчика>" } -
Отправьте запрос. После этого появится подписка, и VK будет отправлять обработчику данные заполненных лид-форм. От заполнения формы до прихода данных может пройти до 15 минут.

Обработчик: заявка → лид в Битрикс24
Скрипт принимает заявку от VK и создаёт лид методом crm.lead.add. В начале скрипта укажите адрес своего вебхука и ID источника. Разработка — Александр Белокуров.
<?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
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
- Создайте входящий вебхук с правами на CRM.
- Узнайте ID источника, с которым будут создаваться лиды (см. выше).
- Внесите адрес вебхука и ID источника в блок настроек скрипта (
$url,$sourceId).
Шаг 2. Настройки в сообществе ВКонтакте
- Откройте «Настройки» → «Работа с API».
- Перейдите на вкладку Callback API.
- Придумайте любой секретный ключ и сохраните его.
- Скопируйте ключ в скрипт (
$secret). - Скопируйте в скрипт значение «Строка, которую должен вернуть сервер» (
$confirmation_token) и сохраните скрипт. - Разместите скрипт на сервере и укажите его адрес в поле «Адрес». Адрес должен начинаться с
https. - Нажмите «Подтвердить». Если всё сделано правильно, появится зелёное сообщение об успехе.
- На вкладке «Типы событий» в самом низу отметьте «Lead forms: Новая заявка».
- Отправьте тестовую заявку через форму.

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