Последние записи
Программное добавление лида в Битрикс24 с помощью прямой авторизации
//формируем массив для передачи в bitrix24
$crmUrl = 'https://MYCRM.bitrix24.ru/';
$arParams = array(
'LOGIN' => 'MY@MAIL.RU', // обязательно, логин для доступа к crm
'PASSWORD' => 'MY_PASSWORD', // обязательно, пароль для доступа к crm
'TITLE' => $data['TITLE'], // обязательно, название лида
"SOURCE_ID" => 'WEB',
"UTM_SOURCE" => $data['UTM_SOURCE'],
"NAME" => $data['NAME'] ? $data['NAME'] : 'Случайное имя',
'ASSIGNED_BY_ID' => 19, // Ответственный
"EMAIL" => [["VALUE" => $data['EMAIL'], "VALUE_TYPE" => "WORK"]],
"PHONE" => [["VALUE" => $data['PHONE'], "VALUE_TYPE" => "WORK"]],
"COMMENTS" => $data['COMMENT'] ? "Лид создан автоматически; ".$data['COMMENT'] : "Лид создан автоматически",
"UF_CRM_1581408073" => $data['DATE'], //дата модификации лида
);
$obHttp = new \Bitrix\Main\Web\HttpClient;
$result = $obHttp->post($crmUrl.'crm/configs/import/lead.php', $arParams);
$result = json_decode(str_replace('\'', '"', $result), true);
return $result['error_message'];
С некоторых пор Битрикс24 требует наличие активной коммерческой подписки для использование вебхуков. Считаю данное решение спорным и потому не советую пользоваться данным функционалом Битрикс24.
Получение кода авторизации Webhook API Битрикс24
Авторизуемся в Битрикс24 и идем по адресу: Приложения -> Вебхуки
. Жмем на Добавить вебхук
, выбираем тип внешний
Выставляем необходимые доступы. В нашем случае это CRM
и сохраняем. Страница обновится и вы получите код авторизации и урл API. Сохраните эти данные и никому не показывайте. Выглядит это так:
Учтите, что из урла для вызова REST API требуется удалить окончание profile/
Программное добавление лида с помощью Webhook API Битрикс24
public function leadCreate($data){
//формируем массив для передачи в bitrix24
//данные берем из элемента добавленного инфоблока
$queryData = http_build_query(array(
'fields' => array(
"TITLE" => 'Лид с сайта '.SITE_SERVER_NAME.' из формы "Узнать оптовую цену".', //Заголовок лида
"SOURCE_ID" => 'WEB', //Источник лида
"UTM_SOURCE" => $data['UTM_SOURCE'], //UTM метка
"NAME" => $data['NAME'] ? $data['NAME'] : 'Случайное имя', //Имя контакта
'ASSIGNED_BY_ID' => 19, // Ответственный, где требуется id пользователя вашего Битрикс24
"EMAIL" => [["VALUE" => $data['EMAIL'], "VALUE_TYPE" => "WORK"]], //Почта контакта
"PHONE" => [["VALUE" => $data['PHONE'], "VALUE_TYPE" => "WORK"]], //Телефон контакта
"COMMENTS" => "Лид создан автоматически с сайта ".SITE_SERVER_NAME, //Комментарий
"UF_CRM_1581408073" => $data['DATE'], //Заполнение пользовтаельского поля
),
'params' => array("REGISTER_SONET_EVENT" => "Y"), //Говорим, что требуется зарегистрировать новое событие и оповестить всех прчиастных
));
//обращаемся к Битрикс24 при помощи функции curl_exec
//метод crm.lead.add.json добавляет лид
$rest = 'crm.lead.add.json';
//url берется из созданного вебхука, удалив в нем окончание prifile/
//и добавив метод $rest на добавление лида
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, 1);
if (array_key_exists('error', $result))
{
echo "Ошибка при сохранении лида: ".$result['error_description']."";
}
else
{
echo $result['result'];
}
}
Фильтруем лиды по номеру телефона с помощью Webhook API Битрикс24
Если делать все правильно, то перед добавлением лида нам нужно удостовериться, что данного номера телефона среди лидов еще нет
Поэтому предварительно производим фильтрацию лидов
public function leadSearchByPhone($data){ //Получаем отфильтрованный по номеру телефона список лидов
$queryData = http_build_query(array(
'filter' => array(
"PHONE" => $data['PHONE'],
)
));
$rest = 'crm.lead.list';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
В результате вернется массив. В котором, если лиды найдены были, то в $result['result']
будет необходимый нам перечень лидов
Программное получение лида по id с помощью Webhook API Битрикс24
public function leadGetById($data){ //Получаем поля необходимого лида по айди
$queryData = http_build_query(array(
'id' => $data['ID']
));
$rest = 'crm.lead.get';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
Программное обновление лида по id с помощью Webhook API Битрикс24
public function leadUpdateById($data){
$queryData = http_build_query(array(
'id' => $data['ID'],
'fields' => array(
"NAME" => $data['NAME'],
"UTM_SOURCE" => $data['UTM_SOURCE'], //UTM метка
"COMMENTS" => "Лид создан автоматически с сайта ".SITE_SERVER_NAME." - повторное обращение", //Комментарий
"STATUS_ID" => "NEW", //Обновляем статус лида
"DATE_MODIFY" => $data['DATE'], //Обновляем стандартное поле даты модификации
"UF_CRM_1581408073" => $data['DATE'], //Заполнение пользовательского поля
),
'params' => array("REGISTER_SONET_EVENT" => "Y"), //Говорим, что требуется зарегистрировать новое событие и оповестить всех прчиастных
));
$rest = 'crm.lead.update';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
Полный листинг скрипта проверяющего существование лида, регистрирующего новый лид и обновляющего уже существующий лид
Прежде всего договоримся, что к нам в файл приходит POST запрос следующего вида:
Array
(
[sessid] => 8fa4b79357bcd2a58bb6614996fce466
[NAME] => Тестовое имя
[PHONE] => +7 (000) 000-000
[FAIL_STATE] =>
[EMAIL] => 123@123.com
[AJAX] => Y
[ACTION] => REQUEST_FORM
[UTM_SOURCE] => 'some_source'
)
Тогда код нашего файла будет таким:
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');
class bitrix24 {
public function leadCreate($data){
//формируем массив для передачи в bitrix24
//данные берем из элемента добавленного инфоблока
$queryData = http_build_query(array(
'fields' => array(
"TITLE" => 'Лид с сайта '.SITE_SERVER_NAME.' из формы "Узнать оптовую цену".', //Заголовок лида
"SOURCE_ID" => 'WEB', //Источник лида
"UTM_SOURCE" => $data['UTM_SOURCE'], //UTM метка
"NAME" => $data['NAME'] ? $data['NAME'] : 'Случайное имя', //Имя контакта
'ASSIGNED_BY_ID' => 19, // Ответственный, где требуется id пользователя вашего Битрикс24
"EMAIL" => [["VALUE" => $data['EMAIL'], "VALUE_TYPE" => "WORK"]], //Почта контакта
"PHONE" => [["VALUE" => $data['PHONE'], "VALUE_TYPE" => "WORK"]], //Телефон контакта
"COMMENTS" => $data['COMMENT'] ? "Лид создан автоматически с сайта ".SITE_SERVER_NAME.'; Комментарий пользователя: '.$data['COMMENT'] : "Лид создан автоматически с сайта ".SITE_SERVER_NAME,
"UF_CRM_1581408073" => $data['DATE'], //Заполнение пользовтаельского поля
),
'params' => array("REGISTER_SONET_EVENT" => "Y"), //Говорим, что требуется зарегистрировать новое событие и оповестить всех прчиастных
));
//обращаемся к Битрикс24 при помощи функции curl_exec
//метод crm.lead.add.json добавляет лид
$rest = 'crm.lead.add.json';
//url берется из созданного вебхука, удалив в нем окончание prifile/
//и добавив метод $rest на добавление лида
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, 1);
if (array_key_exists('error', $result))
{
echo "Ошибка при сохранении лида: ".$result['error_description']."";
}
else
{
echo $result['result'];
}
}
public function leadSearchByPhone($data){ //Получаем отфильтрованный по номеру телефона список лидов
$queryData = http_build_query(array(
'filter' => array(
"PHONE" => $data['PHONE'],
)
));
$rest = 'crm.lead.list';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
public function leadGetById($data){ //Получаем поля необходимого лида по айди
$queryData = http_build_query(array(
'id' => $data['ID']
));
$rest = 'crm.lead.get';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
public function leadUpdateById($data){
$queryData = http_build_query(array(
'id' => $data['ID'],
'fields' => array(
"NAME" => $data['NAME'],
"UTM_SOURCE" => $data['UTM_SOURCE'], //UTM метка
"COMMENTS" => 'Лид создан автоматически с сайта '.SITE_SERVER_NAME.' - повторное обращение; Комментарий пользователя: '.$data['COMMENT'], //Комментарий
"STATUS_ID" => "NEW", //Обновляем статус лида
"DATE_MODIFY" => $data['DATE'], //Обновляем стандартное поле даты модификации
"UF_CRM_1581408073" => $data['DATE'], //Заполнение пользовательского поля
),
'params' => array("REGISTER_SONET_EVENT" => "Y"), //Говорим, что требуется зарегистрировать новое событие и оповестить всех прчиастных
));
$rest = 'crm.lead.update';
$queryUrl = 'https://YOUR_BITRIX24_ADRESS/rest/593/YOUR_API_CODE/'.$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 => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result);
return $result;
}
}
if (check_bitrix_sessid() && $_SERVER["REQUEST_METHOD"] == "POST" && $_POST["ACTION"] == "REQUEST_FORM") {
if(htmlspecialchars($_POST['FAIL_STATE'])){
echo json_encode(array('success'=>'Y'));//Проверка на заполнение ботом скрытого поля. Если поля заполнено - ничего не делаем
}else{
//Для подгонки времени на сервере и вашего локального времени
//Для Новосибирска, например использую следующую конструкцию: time( ) + ( 4 * 60 * 60 )
//Т.е. к текущему времени добавляем 4 часа
$added_time = time( ) + ( 1 * 60 * 60 );
$date = date('Y-m-d H:i:s', $added_time);
$bitrix24 = new bitrix24;
$data = array(
'NAME' => htmlspecialchars($_POST['NAME']),
'PHONE' => preg_replace("/[^0-9]/", '', htmlspecialchars($_POST['PHONE'])),//Оставляем только цифры
'EMAIL' => htmlspecialchars($_POST['EMAIL']),
'UTM_SOURCE' => htmlspecialchars($_POST['UTM_SOURCE']),
'DATE' => $date,
);
$lead = json_decode(json_encode($bitrix24->leadSearchByPhone($data)), True);
if(count($lead['result'])<1){//Если лиды не найдены
echo json_encode($bitrix24->leadCreate($data));//создаем лид
}else{
$data['ID'] = $lead['result'][0]['ID'];//Получаем id первого лида
echo json_encode($bitrix24->leadUpdateById($data));//Обновляем лид по id
}
}
}
Комментарии