Работа с лидом в Битрикс24 с помощью API
Rus
Eng
Работа с лидом в Битрикс24 с помощью API

Программное добавление лида в Битрикс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
        }

    }
}
Ответить
Отменить

Комментарии

Сергей
Сергей
|Ответить
Я перевел своих клиентов на webjack, делает все то же самое, минимальный тариф дешевле. Можно получить месяц бесплатно по промокоду semen21, напишите его в чат техподдержки на сайте

Оставьте комментарий

На сайте используется система премодерирования комментариев, поэтому ваше сообщение будет опубликовано лишь после одобрения модератором

Вы отвечаете на комментарий пользователя

Отправить

ОБРАТНАЯ СВЯЗЬ

Напишите мне

Вы разрабатываете новый сервис, вносите доработки в существующий и хотите лучше чем у конкурентов? Вы обратились по адресу. Предлагаю вам комплексную разработку сайтов студийного уровня. У меня вы можете заказать дизайн, верстку, програмированние, разработку нетрадиционного функционала, реализацию связи между CMS, CRM и Data Analitics, а так же все остальное касаемое сайтов, кроме продвижения.

Обращайтесь, я всегда проконсультирую по всем вопросам и помогу подобрать наиболее эффективное решение для Вашего бизнеса. Я занимаюсь созданием сайтов в Новосибирске и в других регионах России, также работаю со странами СНГ. Вы останетесь довольны нашим сотрудничеством

Во время отправки произошла ошибка, пожалуйста попробуйте еще раз через некоторое время
Сообщение отправлено успешно

Телефоны

+7(993) 007-18-96

Email

info@tichiy.ru

Адрес

Россия, г. Москва

Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта

Написать мне
Отправить
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Отправка успешна!
Thank you for your feedback. I will answer you within the next working hours
Отправка не удалась
Во время отправки запроса произошла ошибка. Пожалуйста, подождите и попробуйте снова через некоторое время или свяжитесь со мной