Документация для разработчиков
Темная тема

Добавление повторного лида

Пример разместит на странице сайта форму CRM. По заполнении формы в Битрикс24 будет создаваться новый лид как повторный с привязкой к нему контакта или компании из старых лидов.

Внимание! Для использования примера необходимо настроить работу класса CRest и подключить файл crest.php в файлах, где используется данный класс. Подробнее.

  1. Создаём форму на нужной странице:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
    $(document).ready(function() {
    	$('#form_to_crm').on( 'submit', function(el) {//event submit form
    		el.preventDefault();//the default action of the event will not be triggered
    		var formData = $(this).serialize();
    		$.ajax({
    			'method': 'POST',
    			'dataType': 'json',
    			'url': 'form.php',
    			'data':  formData,
    			success: function(data){//success callback
    				alert(data.message);
    			}
    		});
    	});
    });
    </script>
    	
    <form id="form_to_crm">
    	<input type="text" name="NAME" placeholder="Name" required>
    	<input type="text" name="LAST_NAME" placeholder="Last name">
    	<input type="text" name="PHONE" placeholder="Phone">
    	<input type="text" name="EMAIL" placeholder="E-mail">
    	<input type="submit" value="Submit">
    </form>
    
  2. Создаём файл form.php, для сохранения заполненных форм:
    
    <?
    $sName = htmlspecialchars($_POST["NAME"]);	
    $sLastName = htmlspecialchars($_POST["LAST_NAME"]);
    $sPhone = htmlspecialchars($_POST["PHONE"]);
    $sEmail = htmlspecialchars($_POST["EMAIL"]);
    		
    $arFields = [
    	'TITLE'         => 'From the site: ' . implode(' ', [$sName, $sLastName]),
    	'NAME'          => (!empty($sName)) ? $sName : 'Empty name',//if simple mode crm NAME or LAST_NAME required for converting to contact
    	'LAST_NAME'   => $sLastName,
    	'PHONE'         => (!empty($sPhone)) ? array(array('VALUE' => $sPhone, 'VALUE_TYPE' => 'HOME')) : array(),
    	'EMAIL'         => (!empty($sEmail)) ? array(array('VALUE' => $sEmail, 'VALUE_TYPE' => 'HOME')) : array()
    ];
    	
    $arLeadDuplicate = [];
    if(!empty($sPhone)){//search duplicate by phone
    	$arResultDuplicate = CRest::call('crm.duplicate.findbycomm',[
    		"entity_type" => "LEAD",
    		"type" => "PHONE",
    		"values" => array($sPhone)
    	]);
    	if(!empty($arResultDuplicate['result']['LEAD'])){
    		$arLeadDuplicate = array_merge ($arLeadDuplicate,$arResultDuplicate['result']['LEAD']);
    	}
    }
    	
    if(!empty($sEmail)) {//search duplicate by email
    	$arResultDuplicate = CRest::call('crm.duplicate.findbycomm', [
    		"entity_type" => "LEAD",
    		"type" => "EMAIL",
    		"values" => [$sEmail]
    	]);
    	if(!empty($arResultDuplicate[ 'result' ][ 'LEAD' ])) {
    		$arLeadDuplicate = array_merge($arLeadDuplicate, $arResultDuplicate[ 'result' ][ 'LEAD' ]);
    	}
    }
    	
    if(!empty($arLeadDuplicate)){//get converted duplicate lead and filling $arFields COMPANY_ID or CONTACT_ID
    	$arDuplicateLead = CRest::call('crm.lead.list',[
    		"filter" => [
    			'=ID' => $arLeadDuplicate,
    			'STATUS_ID' => 'CONVERTED',
    		],
    		'select' => [
    			'ID', 'COMPANY_ID', 'CONTACT_ID'
    		]
    	]);
    		
    	if(!empty($arDuplicateLead['result'])){
    		$sCompany = reset(array_diff(array_column($arDuplicateLead['result'],'COMPANY_ID','ID'),['']));
    		$sContact = reset(array_diff(array_column($arDuplicateLead['result'],'CONTACT_ID','ID'),['']));
    		if($sCompany > 0)
    			$arFields['COMPANY_ID'] = $sCompany;
    		if($sContact > 0)
    			$arFields['CONTACT_ID'] = $sContact;
    	}
    }
    	
    $result = CRest::call('crm.lead.add',
    	[
    		'fields'    =>  $arFields
    	]
    );
    if(!empty($result['result'])){
    	echo json_encode(['message' => 'Lead add']);
    }elseif(!empty($result['error_description'])){
    	echo json_encode(['message' => 'Lead not added: '.$result['error_description']]);
    }else{
    	echo json_encode(['message' => 'Lead not added']);
    }
    ?>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024