Важное обновление
Введение
У Битрикс24 есть API, который позволяет делать определенные полезные штуки. Одна из них – отправка лида в CRM. Т.е. мы можем запрограммировать отправку данных из любой формы своего сайта в свой Битрикс24. Супер! Разберемся, как это сделать.
Создание вебхука
Прежде всего, в рамках Битрикс24 нужно создать вебхук, в который мы будем отправлять данные с сайта. В Битрикс24 в левом меню переходим в раздел Приложения, идем на вкладку Вебхуки, жмем кнопку Добавить вебхук, в подменю выбираем Входящий вебхук:
![Создаем входящий вебхук](https://alfavitka.ru/wp-content/uploads/2019/12/1-sozdaem-vhodyashiy-webhook.png)
Открылась форма добавления вебхука. В поле Название вводим произвольное название, например Получение лидов с сайта. Поле Описание заполняем по своему желанию. В списке Права доступа отмечаем чекбокс CRM:
![Вводим название и выбираем права доступа](https://alfavitka.ru/wp-content/uploads/2019/12/2-imya-i-prava-dostupa.png)
Больше ничего отмечать не нужно, нажимаем кнопку Сохранить (находится под списком прав доступа):
![Сохраняем вебхук](https://alfavitka.ru/wp-content/uploads/2019/12/3-sohranyaem-webhook.png)
Перед нами открывается страница с кодом вебхука:
![Код вебхука](https://alfavitka.ru/wp-content/uploads/2019/12/4-kod-webhooka.png)
Сохраните этот код, он понадобится нам далее. Код никому не показывайте, это конфиденциальная информация.
Пример 1: передаем имя и телефон
Начнем с самого простого примера: передадим в CRM имя и номер телефона:
<?php
$b24Url = "https://alfavitkademo.bitrix24.ru"; // укажите URL своего Битрикс24
$b24UserID = "1"; // ID пользователя, от имени которого будем добавлять лид
$b24WebHook = "pov9pr28k5i2v2vc"; // код вебхука, который мы только что получили
// формируем URL, на который будем отправлять запрос
$queryURL = "$b24Url/rest/$b24UserID/$b24WebHook/crm.lead.add.json";
// формируем параметры для создания лида
$queryData = http_build_query(array(
"fields" => array(
"TITLE" => "Лид с нашего сайта", // название лида
"NAME" => "Меган Фокс", // имя ;)
"PHONE" => array( // телефон в Битрикс24 = массив, поэтому даже если передаем 1 номер, то передаем его в таком формате
"n0" => array(
"VALUE" => "+7 (123) 456-78-99", // ненастоящий номер Меган Фокс
"VALUE_TYPE" => "MOBILE", // тип номера = мобильный
),
),
),
'params' => array("REGISTER_SONET_EVENT" => "Y") // Y = произвести регистрацию события добавления лида в живой ленте. Дополнительно будет отправлено уведомление ответственному за лид.
));
// отправляем запрос в Б24 и обрабатываем ответ
$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);
// если произошла какая-то ошибка - выведем её
if(array_key_exists('error', $result))
{
die("Ошибка при сохранении лида: ".$result['error_description']);
}
echo "Лид добавлен, отличная работа :)";
?>
Комментарии добавил прямо в код, думаю вопросов быть не должно. Если запустим этот код — в Битрикс24 появится уведомление о создании нового лида:
![Уведомление о новом лиде](https://alfavitka.ru/wp-content/uploads/2019/12/5-novyj-lid-sozdan.png)
В CRM зайдем в лид и увидим всю информацию, которую мы передали:
![Информация внутри лида](https://alfavitka.ru/wp-content/uploads/2019/12/6-info-vnutri-lida.png)
Супер! В примере мы заполнили только Название лида, Имя и Номер телефона. Но в CRM Б24 доступно намного больше полей. Их список можно посмотреть в документации по ссылке: https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php — обязательно ознакомьтесь с этой табличкой.
Пример 2: передаем пользовательские свойства
Немного дополним наш пример, передадим значения двух пользовательских полей. Предположим, что в CRM у нас есть поле Ждет звонка типа Да/Нет (содержит информацию о том, нужно ли перезвонить этому клиенту). И поле Дополнительное сообщение типа Строка, в котором мы передаем сообщение, оставленное пользователем:
![Пользовательские свойства](https://alfavitka.ru/wp-content/uploads/2019/12/7-polzovatelskie-svoystva.png)
Нам нужно получить коды этих свойств. Узнать их можно через просмотр кода элемента. Вот код нашего первого свойства:
![Узнаем код пользовательского свойства](https://alfavitka.ru/wp-content/uploads/2019/12/8-uznaem-kod-svoystva.png)
А вот код второго:
![Узнаем код второго пользовательского поля](https://alfavitka.ru/wp-content/uploads/2019/12/9-uznaem-kod-vtorogo-svoystva.png)
Добавим их в наш код и получим следующее:
<?php
$b24Url = "https://alfavitkademo.bitrix24.ru"; // укажите URL своего Битрикс24
$b24UserID = "1"; // ID пользователя, от имени которого будем добавлять лид
$b24WebHook = "pov9pr28k5i2v2vc"; // код вебхука, который мы только что получили
// формируем URL, на который будем отправлять запрос
$queryURL = "$b24Url/rest/$b24UserID/$b24WebHook/crm.lead.add.json";
// формируем параметры для создания лида
$queryData = http_build_query(array(
"fields" => array(
"TITLE" => "Лид с нашего сайта", // название лида
"NAME" => "Меган Фокс", // имя ;)
"PHONE" => array( // телефон в Битрикс24 = массив, поэтому даже если передаем 1 номер, то передаем его в таком формате
"n0" => array(
"VALUE" => "+7 (123) 456-78-99", // ненастоящий номер Меган Фокс
"VALUE_TYPE" => "MOBILE", // тип номера = мобильный
),
),
"UF_CRM_1575410143732" => true, // первое пользовательское свойство: передадим "Да"
"UF_CRM_1575410440471" => "Перезвони :*", // второе пользовательское свойство, передаем этот текст
),
'params' => array("REGISTER_SONET_EVENT" => "Y") // Y = произвести регистрацию события добавления лида в живой ленте. Дополнительно будет отправлено уведомление ответственному за лид.
));
// отправляем запрос в Б24 и обрабатываем ответ
$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);
// если произошла какая-то ошибка - выведем её
if(array_key_exists('error', $result))
{
die("Ошибка при сохранении лида: ".$result['error_description']);
}
echo "Лид добавлен, отличная работа :)";
?>
Как видим, пользовательские свойства передаются точно так же, как и обычные поля. Результат в CRM выглядит следующим образом:
![Значения пользовательских свойств сохранены](https://alfavitka.ru/wp-content/uploads/2019/12/10-svoystva-sohraneny.png)
Пользовательские поля корректно сохранились в Битрикс24.
Пример 3: передаем UTM-метки
Передача UTM-меток ничем не отличается от передачи обычных полей. Но я решил вынести этот пример в отдельный блок, т.к. в свое время сам не знал о существовании специальных полей для UTM-меток в CRM Битрикс24. А они есть, это следующие поля:
UTM_SOURCE
UTM_MEDIUM
UTM_CAMPAIGN
Дополним наш код исходя из этой информации: вытянем UTM-метки из урла и отправим их в лид:
<?php
// получаем текущий урл и упаковываем параметры в массив
$url = basename($_SERVER['REQUEST_URI']);
$url_components = parse_url($url);
parse_str($url_components['query'], $params);
$b24Url = "https://alfavitkademo.bitrix24.ru"; // укажите URL своего Битрикс24
$b24UserID = "1"; // ID пользователя, от имени которого будем добавлять лид
$b24WebHook = "pov9pr28k5i2v2vc"; // код вебхука, который мы только что получили
// формируем URL, на который будем отправлять запрос
$queryURL = "$b24Url/rest/$b24UserID/$b24WebHook/crm.lead.add.json";
// формируем параметры для создания лида
$queryData = http_build_query(array(
"fields" => array(
"TITLE" => "Лид с нашего сайта", // название лида
"NAME" => "Меган Фокс", // имя ;)
"PHONE" => array( // телефон в Битрикс24 = массив, поэтому даже если передаем 1 номер, то передаем его в таком формате
"n0" => array(
"VALUE" => "+7 (123) 456-78-99", // ненастоящий номер Меган Фокс
"VALUE_TYPE" => "MOBILE", // тип номера = мобильный
),
),
"UF_CRM_1575410143732" => true, // первое пользовательское свойство: передадим "Да"
"UF_CRM_1575410440471" => "Перезвони :*", // второе пользовательское свойство, передаем этот текст
"UTM_SOURCE"=>$params["utm_source"],
"UTM_MEDIUM"=>$params["utm_medium"],
"UTM_CAMPAIGN"=>$params["utm_campaign"],
),
'params' => array("REGISTER_SONET_EVENT" => "Y") // Y = произвести регистрацию события добавления лида в живой ленте. Дополнительно будет отправлено уведомление ответственному за лид.
));
// отправляем запрос в Б24 и обрабатываем ответ
$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);
// если произошла какая-то ошибка - выведем её
if(array_key_exists('error', $result))
{
die("Ошибка при сохранении лида: ".$result['error_description']);
}
echo "Лид добавлен, отличная работа :)";
?>
Отправим лид со страницы со следующим набором значений в урле:
?utm_medium=cpc&utm_source=Yandex&utm_campaign=AlfavitkaDemo
В итоге получим этот набор UTM-меток в соответствующих полях лида:
![UTM-метки сохранены в лиде](https://alfavitka.ru/wp-content/uploads/2019/12/11-utm-metki-sohraneny.png)
Пример сообщения об ошибке
У нас в коде есть блок, который отвечает за вывод ошибок, вот он:
// если произошла какая-то ошибка - выведем её
if(array_key_exists('error', $result))
{
die("Ошибка при сохранении лида: ".$result['error_description']);
}
Давайте попробуем получить какую-нибудь ошибку. Например, укажем несуществующего пользователя в переменной $b24UserID:
$b24UserID = 999; // пользователя с таким ID не существует
Запустив код с неправильным ID пользователя, мы получим следующее сообщение:
Ошибка при сохранении лида: Invalid request credentials
А в ячейке $result[‘error’] будет храниться код ошибки, в данном случае INVALID_CREDENTIALS.
Возможно, это поможет кому-то при дебаге.