Bitrix24 лиды с сайта автоматическое создание лидов


Как добавлять в Bitrix24 лиды с сайта? Данным вопросом начинают задаваться многие, так как с каждым днем CRM Битрикс24 набирает популярность среди вебмастеров и владельцев сайтов. И у многих встает вопрос, как же организовать автоматическое создание лидов с сайта в CRM Битрикс24, если Вы не используете одноименную CMS.
Для этого давайте рассмотрим два способа:

  1. Bitrix24 лиды с сайта через упрощенный Rest API
  2. Вебхуки Bitrix24 — передача лидов с сайта — Рекомендую

См. также публикацию на тему:

Автоматическое создание лидов в Битрикс24 через упрощенный Rest API

Данный способ, команда Битрикс24, разработала специально для всех сторонних источников, не входящие в продукты Битрикс. Заключается он в том, что по адресу [ваше_название].bitrix24.ru/crm/configs/import/lead.php находится специальный компонент lead.rest, который позволяет обрабатывать и добавлять в Bitrix24 лиды с сайта из других источников.

Для того, чтобы организовать автоматическое создание лидов в Битрикс24 Вам необходимо:

  1. Логин и пароль пользователя Вашей CRM
    Важно! Данный пользователь должен быть с ограниченными правами.
  2. PHP скрипт для отправки данных.
  3. Таблица параметров из соответствующих справочников Bitrix24.
  4. И умение перехватывать данные из форм.

Логин и пароль пользователя Вашей CRM

Так как логин и пароль пользователя из-под которого будут создаваться лиды указываются в скрипте, то для безопасности рекомендуется использовать отдельного пользователя с правами только на добавление лида и без доступа куда-либо еще. Данная мера необходима для безопасности Ваших данных, на тот случай, если каким-то образом PHP скрипт для отправки данных в Битрикс 24 окажется у злоумышленников.

PHP скрипт для отправки данных

В Bitrix24 лиды с сайта можно передавать PHP скриптом, который приведен ниже. При этом для автоматического создания лидов, необходимо передать 3 обязательных параметра:

  • LOGIN* — логин пользователя Вашей CRM по управлению лидами.
  • PASSWORD* — пароль пользователя Вашей CRM по управлению лидами.
  • TITLE* — заголовок для лида.

все остальные параметры являются не обязательными и не подлежат обязательной передаче. Однако советую Вам передавать как можно больше данных в лиде: email, телефон, комментарий, utm метки и многое другое (см. все параметры для формирования лидов).

define('CRM_HOST', '[ваше_название].bitrix24.ru'); // Ваш домен CRM системы
define('CRM_PORT', '443'); // Порт сервера CRM. Установлен по умолчанию
define('CRM_PATH', '/crm/configs/import/lead.php'); // Путь к компоненту lead.rest

define('CRM_LOGIN', 'login'); // Логин пользователя Вашей CRM по управлению лидами
define('CRM_PASSWORD', 'password'); // Пароль пользователя Вашей CRM по управлению лидами

   $postData = array(
      'TITLE' => '' // Установить значение
   );

   if (defined('CRM_AUTH'))
   {
      $postData['AUTH'] = CRM_AUTH;
   }
   else
   {
      $postData['LOGIN'] = CRM_LOGIN;
      $postData['PASSWORD'] = CRM_PASSWORD;
   }

   $fp = fsockopen("ssl://".CRM_HOST, CRM_PORT, $errno, $errstr, 30);
   if ($fp)
   {
      $strPostData = '';
      foreach ($postData as $key => $value)
         $strPostData .= ($strPostData == '' ? '' : '&').$key.'='.urlencode($value);

      $str = "POST ".CRM_PATH." HTTP/1.0\r\n";
      $str .= "Host: ".CRM_HOST."\r\n";
      $str .= "Content-Type: application/x-www-form-urlencoded\r\n";
      $str .= "Content-Length: ".strlen($strPostData)."\r\n";
      $str .= "Connection: close\r\n\r\n";

      $str .= $strPostData;

      fwrite($fp, $str);

      $result = '';
      while (!feof($fp))
      {
         $result .= fgets($fp, 128);
      }
      fclose($fp);

      $response = explode("\r\n\r\n", $result);

      $output = '<pre>'.print_r($response[1], 1).'</pre>';
   }
   else
   {
      echo 'Connection Failed! '.$errstr.' ('.$errno.')';
   }

И умение перехватывать данные из форм

В случаи успешной обработки формы, Вам необходимо перехватить и передать нужные Вам значения с помощью вышеприведенного php скрипт в $postData = array().

По умолчанию, обязательным параметром для заполнения является Title, значение которого будет названием для лида в Битрикс24. Все остальные параметры Вы можете передавать на свое усмотрение (см.таблицы с параметрами).

Данные параметры из «Таблица 1: Параметры для лидов», отвечают за передачу данных в стандартные поля Битрикс24. Если у Вас есть поля, которые Вы самостоятельно создали в Битрикс24, и Вам необходимо передавать для них значение с сайта вместе с лидами, то предлагаю Вам ознакомится с данной статьей.

Автоматическое создание лидов в Битрикс24 при помощи входящего вебхука

Комманда Битрикс 24 внедрила очень простой и функциональный способ интеграции с CRM системой. Если ранее интеграция с Битрикс 24 была не простой задачей, требующей отличной квалификации и знаний от вебмастеров и владельцев сайта, то теперь, с внедрением вебхуков, произвести интеграцию своего сайта с CRM системой может практически каждый желающий.

Так что такое вебхуки в Битрикс24? WebHooks Bitrix24 — механизм, который позволяет вам использовать практически весь богатый функционал Rest API Битрикс24, но при минимальных знаниях и трудозатрат.

На мой взгляд, это более безопасный способ передачи информации в CRM систему, чем при помощи упрощенного Rest API.

И так, для организации автоматической передачи лидов при помощи вебхуков необходимо:

  1. Создать входящий вебхук.
  2. Написать короткий код для перехвата и передачи данных.

Создать входящий вубхук

Для того, чтобы передать данные с вашей формы обратной связи в лиды Битрикс 24 необходимо создать входящий вебхук. Для этого следуем по инструкции:

  • Приложения → Вебхуки → Добавить вебхук.
    как создать вебхук в Битрикс 24
  • При добавлении выбрать Входящий вебхук.
  • Ввести название для вебхука → При желании добавить его описание → При выборе права доступа указать CRM.
    добавление вебхука в битрикс24
  • После чего нажимаем на кнопку сохранить.
  • После сохранения появится код для авторизации вебхука и образец URL, который нужно использовать при отправке данных в Битрикс24.
    код для авторизации вебхука
    ,где

    • /rest/ — метод Rest API;
    • /1/ — идентификатор пользователя, пользуясь правами которого будет работать вебхук;
    • /2j2htb348j5y0hgi/ — код вебхука;
    • /profile/ — метод REST, который вы хотите выполнить, обращаясь к вебхуку. При добавлении лида в CRM систему необходимо использовать метод crm.lead.add.json.

Написать короткий код для перехвата и передачи данных

Для завершения организации передачи данных с формы сайта в лиды Битрикс24 при помощи вебхуков необходимо всего лишь написать коротенький код. При написание кода необходимо учесть всего 3 простых шага:

  1. сформировать URL в переменной $queryUrl
    https://[ваш_домен].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json;
  2. сформировать параметры для создания лида в переменной $queryData;
  3. обратиться к Битрикс24 при помощи функции curl_exec.

Пример кода для интеграции Битрикс24 и сайта при помощи вебхуков

// формируем URL в переменной $queryUrl
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';

// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
  ),
  'params' => array("REGISTER_SONET_EVENT" => "Y")
));

// обращаемся к Битрикс24 при помощи функции curl_exec
$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']."<br/>";

Учесть особенность для передачи номера телефона, email, мессенджера

Обратите внимание
При выборе интеграции с помощью входящего вебхука (в отличии от упрощенного Rest API), такие параметры как телефон, электронный адрес и мессенджеры имеют множественные значения и другие поля по умолчанию: PHONE, EMAIL, IM. Поэтому для передачи данных значений необходимо передавать их в массиве.

Пример,

'EMAIL' => Array(
    "n0" => Array(
        "VALUE" => "email-1@mail.ru",
        "VALUE_TYPE" => "WORK",
    ),
    "n1" => Array(
        "VALUE" => "email-2@mail.ru",
        "VALUE_TYPE" => "HOME",
    ),
),
'PHONE' => Array(
    "n0" => Array(
        "VALUE" => "+74957778899",
        "VALUE_TYPE" => "WORK",
    ),
    "n1" => Array(
        "VALUE" => "+79151112233",
        "VALUE_TYPE" => "MOBILE",
    ),
),

, где nX — это одно значение (телефона или электронной почты), которое всегда начинается с 0.

Даже если вы передаете всего лишь 1 номер телефона или адрес электронной почты, необходимо указывать его в массиве как n0.

Таким образом, для передачи хотя бы одного телефона и адреса электронной почты, код будет иметь следующий вид:

// формируем URL в переменной $queryUrl
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';

// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
    'EMAIL' => Array(
	    "n0" => Array(
	        "VALUE" => "email-1@mail.ru",
	        "VALUE_TYPE" => "WORK",
	    ),
	),
	'PHONE' => Array(
	    "n0" => Array(
	        "VALUE" => "+74957778899",
	        "VALUE_TYPE" => "WORK",
	    ),
	),
  ),
  'params' => array("REGISTER_SONET_EVENT" => "Y")
));

// обращаемся к Битрикс24 при помощи функции curl_exec
$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']."<br/>";

Теперь проверьте свой Битрикс 24 и вы найдете там созданный лид =)

Понравилась статья? Поделись ей =)
Вам также может быть интересно
83 комментария
Екатерина

Статья отличная. По ней и работаем, спасибо! Все по-русски, просто и понятно!

А когда примерно можно ожидать :
«немного другим методом для передачи данных, о котором я расскажу чуть позже и выложу здесь ссылку на статью.» ? 🙂

Владимир из Get To the Top

Добрый день, Екатерина
спасибо за столь чудесный комментарий.
К сожалению, на все не хватает времени и что-то приходится откладывать. Однако, спасибо Вам за напоминание. В самое ближайшее время постараюсь выложить материал на сайт.

Владимир из Get To the Top

Екатерина, добрый день
С выходом материала немного затянул, но статью подготовил
Пользовательские поля в Bitrix24 — передача значений в лидах

Екатерина

Спасибо Вам еще раз огрооомное!!! Процветания Вам и Вашим проектам 😉

Шыгныс

скиньте код

Александр

Тоже интересно «немного другим методом для передачи данных, о котором я расскажу чуть позже и выложу здесь ссылку на статью.»

Станислав

Спасибо за статью!
А можно ли добавить в форму ?

Владимир из Get To the Top

Да, конечно, вот пример того как связать форму Contact Form 7 и Bitrix24

Артём

Владимир, благодарю за очень полезную статью!
Сделал связку, всё работает отлично!
Не смог разобраться как связать 2 формы с одного и того же сайта?
Если добавляю ещё 1 if в тот же код, то так не работает, данные не перехватываются.
Если добавляю ещё 1 отдельный сниппет, то ругается что функция перехвата уже задействована в первом сниппете:
Cannot redeclare your_wpcf7_mail_sent_function() (previously declared in

Подскажите, пожалуйста, как быть?

Владимир из Get To the Top

Добрый день, Артем

для этого используйте конструкцию if..elseif. Пример:

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
  //подключение к серверу CRM и авторизация
  //перехват данных из Contact Form 7

  if('Контактная форма 1' == $title ): {
    //остальной код
  };

  elseif('Контактная форма 2' == $title ): {
    //остальной код
  };
  
  endif;
}

Артём

Круто! Благодарю!

Артём

Владимир, ещё один вопрос:
а можно ли в CRM передавать прикрепленный к CRM-форме файл? Например, *.doc?
У меня остаётся пустое поле под файл в карточке клиента, заполняются только текстовые поля.

Артём

Владимир, извините за настойчивость 🙂 Задам вопрос ещё раз:
можно ли в CRM передавать прикрепленный к CRM-форме файл? Например, *.doc?

Владимир из Get To the Top

Добрый день, Артем

я никогда не сталкивался с этим, но да, можно. Для этого вам подойдет только скрипт интеграции при помощи входящего вебхука.

Для начала Вам необходимо:

  1. Создать поле для файлов в Битрикс24 для лидов.
  2. Разрешить прикреплять к контактной форме только те файлы, которые поддерживает Б24.
  3. Убедится, что пользователь, который добавляет лиды через вебхук имеет права на добавление элемента в инфоблок.

Затем в коде скрипта необходимо:

  1. Получить абсолютную ссылку на файл.
  2. Получить сам файл.
  3. Закодировать файл в строку в формате Base64.
  4. Декодировать любые %## кодированные последовательности в данной строке.

Пример,

$url = 'абсолютная ссылка на файл';
$data = file_get_contents($url);
$base64 = base64_encode($data);
$name = urldecode(basename($url));

Потом Вам необходимо отправить данный файл в Б24. Пример,

'UF_CRM_XXXXXXXXXX' => ['fileData' => [$name, $base64]]

Лев

Владимир, Здравствуйте, настраиваю добавление лидов в CRM но клиент требует создание сделки минуя создание лида. Возможно ли это? Если да не могли бы вы подсказать???

Владимир из Get To the Top

Добрый день, Лев

да, конечно, можно.
Готового пример нет, но есть отличная документация retst api
И еще отличный пример от разработчиков.

Эта инструкция все еще актуальна?

Владимир из Get To Top

Добрый день,
да, все еще актуальна

Слава

вопрос: есть сайт, на нем несколько форм с разным кол-вом полей + 1 форма с экспресс опросом (6 вопросов, почле запрашивает контактные данные)
есть ли возможность получать данные со всех форм и передавать в битрикс24, чтобы в црм было видно с какой формы пришел клиент?

Владимир из Get To the Top

Добрый день, Слава

1. да, возможность передавать данные со всех форм есть. Вы можете посмотреть пример в данном комментарии на примере плагина СF-7 для WordPress.

2. для того, чтобы понимать из какой формы был оставлен комментарий, вы можете для каждой из них настроить свой уникальный TITLE при передачи значений в Б24. Или же создать свое пользовательское поле и передавать значение для него. Как создать и передавать данные в свое пользовательское поле вы можете здесь.
Здесь нужно делать так, как Вам удобнее

Александр

Добрый день! В CRM также есть поле BIRTHDATE как в него писать?

 $arParams['BIRTHDATE'] = "30.12.2015 12:35"; 

ругается на ошибку.

Владимир из Get To the Top

Все стандартные поля, которые можно передавать с помощью данного php скрипта, указаны в «Таблица 1: Параметры»

Алексей

Добрый день. Работает все хорошо, но есть одна проблема. Когда ввожу другой домен Битрикс24 в скрипт лиды не приходят. На другом домене все работает хорошо. Настройки ролей в обоях случаях одинаковы. В чем проблема?

юзер

Поправьте у себя плиз — OPPORTUNITY, а не OPPORTINUTY

Владимир из Get To the Top

Готово =)
Спасибо

Толя

Отличная статья, спасибо!
Только не понятно, каким образом указывать значения внутри Что бы все работало для input…

Владимир из Get To the Top

Добрый день,

если у вас landing без CMS, то вставляйте данный код в ваш php файл, который отвечает за успешную/не успешную обработку формы.
Если у вас CMS, то следуйте его мануалам по обработке форм. К примеру, в данном блоге вы можете ознакомится как это можно сделать для CF7 на WordPress или RSForm на Joomla.

Андрей

Добрый вечер. Что-то не получается, подскажите, пожалуйста, в чем проблема?

Владимир из Get To the Top

Добрый день, Андрей

дал ответ на ваш предыдущий комментарий https://gettotop.ru/crm/integraciya-contact-form-7-i-bitrix24/#comment-3908

Виталий

Подскажите, как настроить уведомление при добавлении лида этим способом.
REST API https://dev.1c-bitrix.ru/rest_help/im/im_notify.php

Владимир из Get To the Top

Добрый день, Виталий
речь про какое уведомление идет?
Если про уведомление в б24, то, к сожалению, crm система его не поддерживает.

Иван

Можно ли добавить контроль лидов? Сейчас все Лиды заходят как новый даже если уже был этот телефон и имя.

Владимир из Get To the Top

Добрый день, Иван
Заходите в Битрикс 24:
CRM → Настройки → Другое → Прочие настройки → Настройки контроля дубликатов

Артём

Владимир, тоже интересует вопрос как на входе в CRM проводить контроль на дубликаты.
Указанные вами настройки — это для инструмента «Контроль дубликатов», в каких сущностях включать инструмент. А хочется не устранять дубли через «Контроль дубликатов» (кстати, вручную), а на входе не создавать их.

Нагуглил функцию crm.duplicate.findbycomm [ссылка заблокирована по решению администрации сайта]
Но не умею ей пользоваться 🙂

Можете помочь?

Владимир из Get To the Top

Добрый день, Артем
непонятно для чего вам это и как это обрабатывать.

К примеру, пользователь отравляет две разные заявки / делает две разные покупки.
Первая заявка / покупка попадает в CRM, а что со второй? Блокировать создание?

Здесь уже необходима индивидуальная настройка и изучения ваших потребностей.

Но в любом случаи, я не рекомендую этого делать. Здесь лучше всего сделать обработку лидов на стороне своего сервера, чтобы к одному контакту/компании/сделки привязывались лиды с одинаковыми контактными данными.

Артём

Добрый!
Например, постоянный покупатель делает очередной заказ в интернет-магазине и уже не нужно создавать новый контакт по заявке. Нужна очередная сделка по уже имеющемуся клиенту.

А скрипт с каждым новым лидом или сделкой создаёт новый контакт.
В нём не предусмотрена проверка на дубли.

Делать постоянно проверку на дубли потом — это так себе история, ведь она проводится руками.

Владимир из Get To the Top

Добрый день,

ваша проблема и нужды понятны. Для ее решения:

  1. Перейдите в CRM → Настройки → Другое → Прочие настройки. Поставьте галочку для «Включить автоматическую регистрацию повторных продаж».
  2. Установите в CRM бесплатное приложение «Автоматическая привязка ответственного». Данное приложение не только поможет привязывать лиды к существующим контактам, но и назначать ответственного, который числился за данным клиентом ранее.
  3. На странице лидов произведите настройку списка включив отображение «Повторный лид». Это позволит, не заходя в карточку, увидеть, в самом списке лидов, было ли обращение по данному клиенту ранее.

Иван

Здравствуйте. Не получается этим способом передать UTM-метки. Что скажете по этому поводу?

Владимир из Get To the Top

Добрый день, Иван
про какой способ идет речь?

Иван

не получалось через crm/configs/import/lead.php, но получилось через вебхук.

PHONE, PHONE_HOME, PHONE_WORK, EMAIL, EMAIL_WORK, EMAIL_HOME не удается передать через ваш скрипт. Читал, что это многомерный массив. Есть пример реализации здесь [ссылка заблокирована по решению администрации сайта] , но не получилось.

Как адаптировать передачу этих массивов с телефоном и почтой через ваш скрипт с вебхуками? Заранее спасибо

Владимир из Get To the Top

Добрый день, Дмитрий

  1. Для начала получаем необходимые вам занчания. Пример,
    			$leadTitle = 'Поступил новый лид';
    			$eWork = 'email-work@mail.ru';
    			$eHome = 'email-home@mail.ru';
    			$phWork = '+79157778899';
    			$phHome = '+79157779988';
    		
  2. Затем передаем в Битрикс24
    • Пример для скрипта упрощенного Rest API
      					$postData = array(
      					  'TITLE' => $leadTitle,
      					  'EMAIL_WORK' => $eWork,
      					  'EMAIL_HOME' => $eWork,
      					  'PHONE_WORK' => $phWork,
      					  'PHONE_HOME' => $phHome
      					);
      				
    • Пример для входящего вебхука
      					$curl = curl_init();
      					curl_setopt_array($curl, array(
      					  'TITLE' => $leadTitle,
      					  'EMAIL_WORK' => $eWork,
      					  'EMAIL_HOME' => $eWork,
      					  'PHONE_WORK' => $phWork,
      					  'PHONE_HOME' => $phHome
      					));
      				

Вадим

Не помогло. Не передается почта и телефон.
array(
‘TITLE’ => $leadData[‘TITLE’],
‘UF_CRM_1545898394’ => $leadData[‘UF_CRM_1545898394’],
‘UF_CRM_1545898353’ => $leadData[‘UF_CRM_1545898353′],
//’EMAIL’ => isset($leadData[‘EMAIL’]) ? array(array(‘VALUE’ => $leadData[‘VALUE’][‘EMAIL’], ‘VALUE_TYPE’ => ‘WORK’)) : array(),
// ‘PHONE’ => isset($leadData[‘PHONE’]) ? array(array(‘VALUE’ => $leadData[‘VALUE’][‘PHONE’], ‘VALUE_TYPE’ => ‘WORK’)) : array(),
‘UF_CRM_INN’ => $leadData[‘UF_CRM_INN’],
‘UF_CRM_1522752123’ => $leadData[‘UF_CRM_1522752123’],
‘COMMENTS’ => $leadData[‘COMMENTS’],
),
‘params’ => array(«REGISTER_SONET_EVENT» => «Y»)
));

// обращаемся к Битрикс24 при помощи функции curl_exec
$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,
// ‘TITLE’ => $leadTitle,
//’EMAIL_WORK’ => $leadData[‘EMAIL_WORK’],

// ‘PHONE_WORK’ => $leadData[‘PHONE_WORK’]
//’PHONE_WORK’ => $phWork,
// ‘PHONE_HOME’ => $phHome

));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, 1);
//if (array_key_exists(‘error’, $result)) echo «Ошибка при сохранении лида: «.$result[‘error_description’].»»;

// HTML form
}
else
{
$output = »;
}

?>

Title*:
Email:
Phone:
INN:
Zakupka link:
Comments:

Владимир из Get To the Top

  1. Отправляя код в комментариях, его следует обрамлять тегом pre. В противном случаи он не читабелен, что вы сами можете видеть на своем примере выше.
  2. Даже не в читабельном состоянии видно, что код не рабочий.
  3. По ошибкам:
    • сначала необходимо перехватить данные;
    • затем сформировать URL в переменной $queryUrl;
    • массив для передачи данных в Битрикс 24 формируется в $queryData = http_build_query(array(, в котором сопоставляются параметры полей в Битрикс24 с вашими перехваченными данными;
    • в массив curl_setopt_array($curl, array( ничего записывать не нужно, он уже подтягивает данные из $queryUrl и $queryData.

    Пример,

    // Перехватываем данные
    $title = $leadData['TITLE'];
    $message = $leadData['COMMENTS'];
    $eWork = $leadData['PHONE'];
    $phWork = $leadData['EMAIL'];
    
    // Формируем URL в переменной $queryUrl
    $queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';
    
    // Сопоставляем параметры полей в Битрикс24 с перехваченными данными
    $queryData = http_build_query(array(
      'fields' => array(
        'TITLE' => $title,
        'EMAIL_WORK' => $message,
        'EMAIL_WORK' => $eWork,
        'COMMENTS' => $eHome,
      ),
      '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);
    if (array_key_exists('error', $result)) echo "Ошибка при сохранении лида: ".$result['error_description']."
    ";

Я не знаю, что там у вас к чему, но скорее всего ваш полный рабочий код будет выглядеть следующим образом:

function complete_mail() {
	// Получаем необработанные POST-данные
	$leadData = $_POST['DATA'];

	// Обрабатываем необработанные POST-данные, т.е перехватываем данные
	$title = $leadData['TITLE'];
	$message = $leadData['COMMENTS'];
	$eWork = $leadData['PHONE'];
	$phWork = $leadData['EMAIL'];

	// Формируем URL в переменной $queryUrl
	$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';

	// Сопоставляем параметры полей в Битрикс24 с перехваченными данными
	$queryData = http_build_query(array(
	  'fields' => array(
	    'TITLE' => $title,
	    'EMAIL_WORK' => $message,
	    'EMAIL_WORK' => $eWork,
	    'COMMENTS' => $eHome,
	  ),
	  '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);
	if (array_key_exists('error', $result)) echo "Ошибка при сохранении лида: ".$result['error_description']."
"; }

Владимир из Get To the Top

Добрый день,

да, проблема действительно была. Способ ее решения вы можете найти в данном комментарии — ссылка.

Спасибо Автор за очень полезную статью!
Подскажите будет ли статья как разложить ютм меточки и их значения, попадания данных в срм. На примере кода выше?

Владимир из Get To the Top

Добрый день,

да, в плане стоит написание статьи по данному поводу.
Постараюсь выложить ее в ближайшее время.

Спасибо что читаете =)

Слава

Спасибо за статью. Как это сделать, если вообще не разбираемся в коде?) Куда что вставить?

Олег

Владимир, доброго времени суток. Пытаюсь сделать вебхук по вашей инструкции, но ничего лид по какой-то причине не создается, так же хочу просмотреть что происходит при обращении, пытаюсь писать в лог, но там тоже ничего нет. Сам код — [код заблокирован по решению администрации сайта]

Если не затруднит, подскажите где я ошибся. И еще может знаете, как можно сделать перенос строки в комментарии при создании лида

Владимир из Get To the Top

Добрый день, Олег
замените кавычки ёлочки на обычные "".

Владислав

Добрый день. Как быть с таким примером.
Есть имя клиента, телефон, мыло. Если есть клиент с такими параметрами уже, то чтобы его прицеплял? Или делать доп запрос к БД битрикса на поиск клиента?

Владимир из Get To the Top

Добрый день,
да, необходимо делать запрос к битриксу на поиск клиента.
Если клиент уже существует, лид помечается как повторный и привязывается к существующему контакту.

Владислав

Добрый день. Есть ли возможность добавить к лиду файлы? И если есть, то как?

Владимир из Get To the Top

Добрый день, Владислав
да, возможность такая есть. Для этого вам необходимо использовать интеграцию при помощи входящего вебхука.

Работает это следующим образом:

	$url = 'абсолютная ссылка на файл'; // получаете ссылку на сохраненный файл
	$data = file_get_contents($url); // получаете сам файл по ссылке
	$base64 = base64_encode($data); // далее необходимо преобразовать необходимую информацию в строку формата Base64
	$name = urldecode(basename($url)); // кодируем имя url

А затем передаем в битрикс24

	UF_CRM_XXXXXXXXXXXX' => ['fileData' => [$name, $base64]],

,где UF_CRM_XXXXXXXXXXXX — это название произвольного поля, тип которого должен соответствовать файлу. Данное поле вы должны предварительно создать в битрикс24.

Andrew71

Добрый день! не подскажете откуда брать ‘абсолютная ссылка на файл’ если у меня просто html форма с типичным input type=»file» ?

Владимир из Get To the Top

Добрый день, Andrew71

html форма просто так не работает, ее должен обрабатывать php файл ((и)или js файл).
Смотрите в нем, как он формирует временные абсолютные ссылки

Andrew71

я имею в виду что файл не сохраняется нигде на сервере при заполнении формы и я не знаю откуда мне брать $url = ‘абсолютная ссылка на файл’ для обработчика, в массиве $_REQUEST никаких данных из этого поля не формируются.

Владимир из Get To the Top

Прикрепленные файлы обязательно сохраняются во временном хранилище.
Как только файл будет прикреплен к письму он будет удален из временного хранилища.
Где у вас временное хранилище, я не знаю. Ищите у себя на сервере папку /temp/

Если у себя в php-обработчике формы вы нигде не видите путь, куда сохраняются файлы, то вы можете задать его самостоятельно:

$uploaddir = '/var/www/uploads/'; // указываете путь куда сохранять файл на вашем сервере
$uploadfile = $uploaddir . basename($_FILES['name из поля вашей формы']['tmp_name']);

А если вы хотите сохранить файл навсегда, то его необходимо перенести из временного хранилища функцией

move_uploaded_file($_FILES['name из поля вашей формы']['tmp_name'], "путь до папки куда необходимо сохранять")

Василий

Здравствуйте! Спасибо за статью. Информация была очень полезна при создании собственной php-библиотеки для работы с битрикс-24 через веб-хуки.
Библиотека поддерживает весь функционал описанный в документации.

Владимир из Get To the Top

Добрый день, Василий

и вам спасибо за библиотеку

Евгений

Доброго дня
Если ли возможность передать вложение в лид? у меня такая ситуация на вордпресс плагин CF7. В нем есть поле Файл или в моем случае Мультифайл через надстройку к плагину

//я перехватываю поле
$myfile = $posted_data[‘file-961’];
//передаю в битрикс
‘UF_CRM_1560501128’ => $myfile,
//регистрировал поле в нас троках лидов (выше его id)

но так не работает, существует ли решение данного вопроса, заранее благодарю

Владимир из Get To the Top

Добрый день, Евгений

ответ на данный вопрос вы можете найти в данном комментарии

Михаил

Владимир, Вопрос по дублям. При регистрации на сайте создаем Лид в Б24, потом при совершении покупки на сайте в Б24 создаем Контакт. Есть задача перед созданием Лида на сайте проверять в списке Контактов на наличие уже email такого же как и у нового Лида и в этом случае не создавать Лид. Как можно такую проверку реализовать

Владимир из Get To the Top

Добрый день, Михаил
Это возможно сделать только при полноценной интеграции через API Б24 и на стороне вашего сервера.
Можете еще попробовать поискать в маркетплейс готовые приложения. Может быть подобное кто-то уже реализовал.

Дмитрий

Здравствуйте, актуален ли ещё скрипт под последнюю версию WP и woo

Владимир из Get To the Top

Добрый день, Дмитрий
да, актуален

Дмитрий

Здравствуйте, как перестроить что бы создавались не лиды а сделки?

Владимир из Get To the Top

Добрый день, Дмитрий

если речь идет про интеграцию с помощью входящего вебхука, то в строчке

https://[ваш_домен].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json

необходимо заменить crm.lead.add.json на crm.deal.add.json

Только проверьте поля для создания сделки по данной ссылки

Дмитрий

Я там понял в сделке нет данных о контактах, как же мне в сделке привязать то клиента, это хотя бы так, а дальше я совсем без понятия как ещё товары привязывать

Владимир из Get To the Top

Добрый день, Дмитрий

Я там понял в сделке нет данных о контактах, как же мне в сделке привязать то клиента

К сделке можно привязать контакт следующим образом:

// СОЗДАЕМ СДЕЛКУ
// формируем URL в переменной $queryUrl
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.deal.add.json';
// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
  ),
  '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);
$dealID = $result["result"]; // Получаем ID сделки
var_dump($result);

// СОЗДАЕМ КРОНТАКТ
// формируем URL в переменной $queryUrl
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.contact.add.json';
// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
  ),
  'params' => array("REGISTER_SONET_EVENT" => "Y")
));
$queryData = http_build_query($qr);
$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);
$contactId = $result["result"]; // Получаем ID контакта
var_dump($result);

// ДОБАВЛЯЕМ КОНТАКТ К УКАЗАННОЙ СДЕЛКЕ
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.deal.contact.add.json';
$qr = array(
    'id' => $dealID,
    'fields' => array(
      'CONTACT_ID' => $contactId,
    )
);
$queryData = http_build_query($qr);
$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);
var_dump($result);

Дмитрий

код хорош, работает как указано, но вопросик как можно размещать эти заказы правильно ? к примеру что бы товар появлялся в товарах.
http://skrinshoter.ru/i/081019/XpQivYhi.png
а так же что бы данные клиента регались!

Владимир из Get To the Top

Добрый день, Дмитрий

Добавить товар/услугу в битрикс24 вместе с лидом невозможно.
Товары/услуга вносятся в CRM систему заранее, после чего в лиде вы можете передавать ID товара/услуги, сформировать для нее стоимость и кол-во.
Т.е, вам необходимо создать само название товара в Б24, получить его ID (см. в URL), а в лиде указывать его ID и информацию о нем.

Пример,

// формируем URL в переменной $queryUrl
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';
// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
  ),
  'params' => array("REGISTER_SONET_EVENT" => "Y")
));
// обращаемся к Битрикс24 при помощи функции curl_exec
$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);

$leadID = $result["result"];
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.productrows.set.json';
$queryData = http_build_query(array(
  'id' => $leadID,
  'rows' => Array(
    Array(
      "PRODUCT_ID" => 11, //Указывваете свое ID товара/услуги в Б24
      "PRICE"=>str_replace($chars, '', "120000"), //Указываете свою стоимость товара/услуги
      "QUANTITY" => 1, //Указываете свое кол-во товара/услуги
          ),
      ),
));
$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);

if (array_key_exists('error', $result)) echo "Ошибка при сохранении лида: ".$result['error_description']."
";

Андрей

Статья не теряет актуальность)) А комменты особенно ценны. Спасибо огромное!

Вопрос: для WP сайта с кучей разных форм (около 300 шт.) по идее нужно забить весь functions.php формами? Или можно как-то иначе решить?
Сайт собран на конструкторе Elementor. На каждой странице отдельное название формы и каждая заявка дублируется в email. Сейчас через один вебхук и Zapier справляюсь, но нужно добавить поле, которого нет в Zapier (Client ID).

Валерий

Здравствуйте!
Все четко работает по вашей инструкции через входящий вебхук.
У меня на сайте форма с возможностью отправить файл. если посетитель отправляет один файл, он приходит, если прикреплено больше файлов, то приходит только один файл.
Как можно решить вопрос с несколькими прикрепленными файлами?
В Б24 добавлено множественное поле типа «файл» куда и приходить должны файлы.
Спасибо!

Артём

Отличная статья.Жаль что поздно узнал.А вы не знаете случайно,где размещать скрипт с вебхуком на коробке. А то на одной,у меня всё пашит. А использую этот же скрипт всё — не пашит.

Alexander

Здравствуйте! Подскажите пожалуйста настраивал вариацию доступом по логину и паролю летом 2019 все работало, сейчас решил проверить сайт, уже не работает((
Как то менялся код вашего скрипта? Может были какие то изменения?

Владимир из Get To the Top

Добрый день,

лучше перейти на на интеграцию через веб-хуки.

Спасибо за статью, была очень кстати.

Royal Bimmer

Добрый день. Подскажите пожалуйста, возможно ли вместе с указанными в статье данными передавать ga_cid (google client id)? нужна только эта информация. Как можно это реализовать? Заранее спасибо за ответ)

Владимир из Get To the Top

Добрый день,
да, конечно, получать и передавать ga_cid возможно.
Для этого необходимо создать собственное поле в Битрикс24 и затем уже передавать в него значение. К примеру,

$GCID = @$_COOKIE['_ga'];

$queryData = http_build_query(array(
  'fields' => array(
    'TITLE' => 'Название лида',
    'UF_CRM_XXXXXXXXXX' => $GCID,
  ),
  'params' => array("REGISTER_SONET_EVENT" => "Y")
));

Royal Bimmer

Спасибо огромное за развернутый и быстрый ответ!)

Владимир

Добрый день.
Как передавать в битрикс UTM метки?

Дмитрий

Большое спасибо за подробное описание. Хоть и статья написана давно и битрикс 24 сделал ряд изменений, но статья еще актуальна как никогда!

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

Ваш адрес электронной почты опубликован не будет.Поля, обязательные для заполнения, помечены *