Интеграция Contact Form 7 и Bitrix24


Многие владельцы сайтов на CMS WordPress уже задумывались как же связать сайт с CRM системой Битрикс 24? Чтобы ответить на данный вопрос, давайте рассмотрим интеграцию Contact Form 7 и Bitrix24.
Прежде всего рекомендую ознакомится со статьей «Битрикс24 лиды с сайта — автоматическое создание лидов» и затем продолжить изучение данной инструкции.

Как связать Contact Form 7 и Bitrix24?

И так, давайте более детально рассмотрим автоматическую передачу заявок в CRM Битрикс24 для одной из популярных CMS систем WordPress, а также не менее популярного для неё плагина для создания, получения и обработки лидов с сайта — Contact Form 7. Для этого на понадобится:

  • Хук для перехвата введенных данных из Contact Form 7.
  • Выбор подходящего способа передачи в Битрикс 24
    • С помощью упрощенного Rest API
      • PHP скрипт для интеграции при помощи упрощенного Rest API
      • Объединение хука и PHP скрипта.
    • При помощи входящего вебхука
      • PHP скрипт для интеграции при входящего вебхука
      • Объединение хука и PHP скрипта.
  • Внесение полученного кода в Вашу тему в файл functions.php

Хук для перехвата введенных данных из Contact Form 7

Что такое хук? Хук — это технология перехвата вызова функций в сторонних процессах. Соответственно, так как Contact Form 7 — это сторонний плагин, то нам необходим хук для получения обрабатываемых там данных.
В нашем случаи хук для перехвата данных из Contact Form 7 в CMS WordPress будет выглядеть следующим образом:

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
   $title = $contact_form->title;
   $posted_data = $contact_form->posted_data;
   //Вместо "Контактная форма 1" необходимо указать название Вашей контактной формы
   if ('Контактная форма 1' == $title ) {
   $submission = WPCF7_Submission::get_instance();
   $posted_data = $submission->get_posted_data();
   //далее мы перехватывает введенные данные в Contact Form 7
   //перехватываем поле [your-name]
   $firstName = $posted_data['your-name'];
   //перехватываем поле [your-message]
   $message = $posted_data['your-message'];
   //в данном примере рассмотрены два поля. Как перехватывать остальные поля
   //читайте ниже.
}

В данном хуке приведены примеры по перехвату только двух полей: Имени и Сообщения.
Если Вам необходимо передавать больше полей или какие-либо отдельно созданные поля, то возникает вопрос где брать название $posted_data?

Для того, чтобы найти названия для $posted_data, Вам необходимо перейти в плагин Contact Form 7 — Контактные формы — «Интересующая контактная форма» — Шаблон/Письмо, где можно найти информацию о том, какие поля используются в Вашей форме.

Хук для Contact Form 7
Название $posted_data для хука Contact Form 7

Выбор подходящего способа передачи в Битрикс 24

В данной статье рассматривается два способа интеграции CF7 и Битрикс24:

  1. с помощью упрощенного Rest API;
  2. при помощи входящего вебхука в Битрикс24.

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

  1. С помощью упрощенного Rest API

    PHP скрипт упрощенного Rest API для отправки данных в Bitrix24

    Где взять данный скрипт и как его настроить, вы можете узнать здесь «Автоматическое создание лидов в Битрикс24 через упрощенный Rest API».

    Прежде чем указывать ваш логин и пароль в PHP скрипте, ознакомитесь, пожалуйста, с разделом «Логин и пароль пользователя Вашей CRM».

    Объединение хука и PHP скрипта

    Рассмотрев PHP скрипт упрощенного Rest API для отправки данных в Bitrix24 и Хук для перехвата введенных данных из Contact Form 7 теперь можно перейти к объединению данных двух функций. При этом необходимо будет учесть последовательность функций в коде, которая будет иметь следующий вид:

    1. вызов функции для перехвата данных;
    2. подключение к серверу CRM;
    3. авторизация в CRM;
    4. перехват данных из Contact Form 7;
    5. формирование параметров для создания лида в переменной $postData = array из Contact Form 7;
    6. передача данных из Contact Form 7 в Bitrix24.

    Таким образом мы получим код следующего вида:

    // Вызываем функцию для перехвата данных
    add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
    function your_wpcf7_mail_sent_function( $contact_form ) {
    
       // Подключаемся к серверу CRM
       define('CRM_HOST', '[ваше_название].bitrix24.ru'); // Ваш домен CRM системы
       define('CRM_PORT', '443'); // Порт сервера CRM. Установлен по умолчанию
       define('CRM_PATH', '/crm/configs/import/lead.php'); // Путь к компоненту lead.rest
    
       // Авторизуемся в CRM под необходимым пользователем:
       // 1. Указываем логин пользователя Вашей CRM по управлению лидами
       define('CRM_LOGIN', 'login');
       // 2. Указываем пароль пользователя Вашей CRM по управлению лидами
       define('CRM_PASSWORD', 'password');
    
       // Перехватываем данные из Contact Form 7
       $title = $contact_form->title;
       $posted_data = $contact_form->posted_data;
       // Вместо "Контактная форма 1" необходимо указать название вашей контактной формы
       if ('Контактная форма 1' == $title ) {
           $submission = WPCF7_Submission::get_instance();
           $posted_data = $submission->get_posted_data();
    
           // Далее перехватываем введенные данные в полях Contact Form 7:
           // 1. Перехватываем поле [your-name]
           $firstName = $posted_data['your-name'];
           // 2. Перехватываем поле [your-message]
           $message = $posted_data['your-message']; 
    
           // Формируем параметры для создания лида в переменной $postData = array
           $postData = array(
              // Устанавливаем название для заголовка лида
              'TITLE' => 'Название лида с сайта',
              'NAME' => $firstName,
              'COMMENTS' => $message,
           );
    
           // Передаем данные из Contact Form 7 в Bitrix24
           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.')';
           }
        }
    
    }
  2. При помощи входящего вебхука

    PHP скрипт входящего вебхука для отправки данных в Bitrix24

    PHP скрипт входящего вебхука и принцип его работы был рассмотрен ранее в статье «Автоматическое создание лидов в Битрикс24 при помощи входящего вебхука».

    Для того чтобы активировать работу данного скрипта, необходимо создать вебхук в самом Битрикс24 и получить [идентификатор_пользователя] и [код_вебхука]. Как это сделать можно узнать здесь: «Как создать входящий вубхук».

    Объединение хука и PHP скрипта

    Рассмотрев PHP скрипт входящего вебхука для отправки данных в Bitrix24, хук для перехвата введенных данных из Contact Form 7, активировав входящий вебхук и получив [идентификатор_пользователя] и [код_вебхука], можно перейти к объединению данных двух функций. При этом необходимо будет учесть последовательность функций в коде, которая будет иметь следующий вид:

    1. вызов функции для перехвата данных;
    2. перехват данных из Contact Form 7;
    3. формирование URL в переменной $queryUrl;
    4. формирование параметров для создания лида в переменной $queryData;
    5. обращение к Битрикс24 при помощи функции curl_exec;

    Таким образом мы получим код следующего вида:

    // Вызываем функцию для перехвата данных
    add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
    function your_wpcf7_mail_sent_function( $contact_form ) {
    
      // Перехватываем данные из Contact Form 7
      $title = $contact_form->title;
      $posted_data = $contact_form->posted_data;
      //Вместо "Контактная форма 1" необходимо указать название вашей контактной формы
      if ('Контактная форма 1' == $title ) {
        $submission = WPCF7_Submission::get_instance();
        $posted_data = $submission->get_posted_data();
        // Далее перехватываем введенные данные в полях Contact Form 7:
        // 1. Перехватываем поле [your-name]
        $firstName = $posted_data['your-name'];
        // 2. Перехватываем поле [your-message]
        $message = $posted_data['your-message']; 
        
        // Формируем URL в переменной $queryUrl для отправки сообщений в лиды Битрикс24, где
        // указываем [ваше_название], [идентификатор_пользователя] и [код_вебхука]
        $queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';
        // Формируем параметры для создания лида в переменной $queryData
        $queryData = http_build_query(array(
          'fields' => array(
            // Устанавливаем название для заголовка лида
            'TITLE' => 'Название лида с сайта',
            'NAME' => $firstName,
            'COMMENTS' => $message,
          ),
          '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 или мессенджера

При интеграции CF и Битрикс 24 с помощью входящего вебхука, необходимо учесть особенности передачи номера телефона, email или мессенджера. Что это за особенности, и как все-таки передавать данные параметры можно узнать в разделе «Учесть особенность для передачи номера телефона, email, мессенджера».

Внесение полученного кода в Вашу тему в файл functions.php

Теперь остается внести любой полученный код из перечисленных вариантов интеграции в functions.php Вашей текущей темы на WordPress.
Для этого необходимо перейти в Внешний вид → Редактор → Функции темы.
Открыв файл functions.php необходимо вставить полученный код в самом низу документа.

Вот и все. Интеграция Contact Form 7 и Bitrix24 завершена.

Основные ошибки интеграции

смотрите статью «Основные ошибки при интеграции Битрикс24 и сайта».

P.S
Если у Вас интернет-магазин на основе плагина Woocommerce, то рекомендую ознакомиться со статьей по интеграции Woocommerce и Bitrix24.

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

Владимир, спасибо большое за статью.
Но к сожалению у меня во время настройки интеграции возник ряд небольших трудностей.
Был бы благодарен в помощи.
1. Во время перехода по ссылке ****.bitrix24.ua/crm/configs/import/lead.php выбивает ошибку {'error':'400','error_message':'Ошибка запроса'}

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

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

переход по прямой ссылки подразумевает под собой авторизацию под Вашей учетной записью и передачи полей с их значением с помощью get параметров. При попытки перехода по прямой ссылки без этих get параметров вы получите в любом случаи {'error':'400','error_message':'Ошибка запроса'}.

Для того, чтобы авторизация произошла именно под Вашей учетной записью необходимо добавить в get LOGIN и PASSWORD. Это можно сделать следующим образом: *****.bitrix24.ru/crm/configs/import/lead.php?LOGIN=*****&PASSWORD=******
, где
*****.bitrix24.ru — домен в Вашей Б24;
LOGIN — логин от Вашей учетной записи;
PASSWORD — пароль от Вашей учетной записи.

В этом случаи Вы авторизуетесь, но REST API выдаст ошибку: 'error':'400','error_message':'Не введено значение обязательного поля \"Название лида\"'

Для окончательного добавления лида по прямой ссылки, Вам необходимо передать всего одно обязательное значение для поля Заголовок. Это можно сделать передав значение TITLE с помощью get параметра: *****.bitrix24.ru/crm/configs/import/lead.php?LOGIN=*****&PASSWORD=******&TITLE=title_name_of_your_lead
, где
title_name_of_your_lead — Ваше название лида.

Вы можете передавать любые get параметры из Таблица параметров из соответствующих справочников Bitrix24

Важно! Регистр get параметров должен быть верхним.

Никита

Добрый день, Владимир! А про интеграцию WooCommerce c Bitrix24 не напишите пожалуйста? Был бы очень благодарен. Инфы в интернете вообще нет (

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

Добрый день, Никита
Написал 🙂 https://gettotop.ru/crm/integraciya-woocommerce-i-bitrix24/
Я надеюсь на то, что Вы будите делиться ей в сети интернет 😉

Сергей

Добрый день
Спасибо отлично написано.
Подскажите можно ли передать в Битрикс прикрепленный к форме файл?
и как это реализовать?
Знаю что нужен base64 но там вроде нужна ссылка для скачивания файла. или я что то не понимаю.

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

Добрый день, Сергей

да, передать в Б24 прикрепленный файл, конечно можно.
ВЫ все правильно сказали, передачу файлу нужно организовывать с помощью base64. Так, к примеру, для передачи файла, который прикрепили в форме CF7 передачу можно организвать следующим образом:

$url = $uploaded_files['ваше-название-поле-cf7'];
$data = file_get_contents($url);
$base64 = base64_encode($data);
$name = urldecode(basename($url));

Хорошая статья, а как сделать что бы из нескольких форм передавалось?

Владимир из 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;
	}

Артур

Владимир, почему-то неудаётся добавить код в функции темы.
Пишет: Что-то пошло не так. Внесённые изменения могли не сохраниться. Пожалуйста, попробуйте ещё раз. Также есть вероятность, что вам придётся вручную исправить и загрузить файл через FTP
Пробовал через FTP
Сайт слетает.

Parse error: syntax error, unexpected '@' in /home/mx286117/14love.com.ua/catdog/wp-content/themes/astra/functions.php on line 173

Подскажите что делаю не так.
Плагины пробовал отключать, чтобы не было никакого резонанса.
Тема — Astra

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

Добрый день, Артур
У Вас ошибка в синтаксисе. Где-то отсутствует кавычка, или запятая, или точка с запятой, или что-то в этом духе.
Проверьте внимательно код и обратите внимание на 173 строку. Скорее всего там ошибка.

я конечно не гуру и не чего не берусь утверждать, но мне кажется что else (‘Контактная форма 2’ == $title ) { заместо { должно быть ; , в противном случае интерпретатор выдаст ошибку. Тойсть должно получится else (‘Контактная форма 2’ == $title ) ;
//остальной код
}

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

Олег, правильный вариант ниже

	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;
	}

Алексей

Есть возможность увидеть полный код? Я где-то накосячил и не могу найти где. Пожалуйста.

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

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

//Вызываем функцию для перехвата данных
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {

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

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

   //перехват данных из Contact Form 7
   $title = $contact_form->title;
   $posted_data = $contact_form->posted_data;
   if ('Контактная форма 1' == $title ): { //Вместо "Контактная форма 1" необходимо указать название Вашей контактной формы
       $submission = WPCF7_Submission::get_instance();
       $posted_data = $submission->get_posted_data();
       //далее мы перехватывает введенные данные в Contact Form 7
       $firstName = $posted_data['your-name']; //перехватываем поле [your-name]
       $message = $posted_data['your-message']; //перехватываем поле [your-message]

       //сопостановление полей Bitrix24 с полученными данными из Contact Form 7
       $postData = array(
          'TITLE' => 'Название лида с сайта', // Установить значение свое значение
          'NAME' => $firstName,
          'COMMENTS' => $message,
       );

       //передача данных из Contact Form 7 в Bitrix24
       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 = print_r($response[1];
       } else {
          echo 'Connection Failed! '.$errstr.' ('.$errno.')';
       }
    };
    elseif('Контактная форма 2' == $title ): { //Вместо "Контактная форма 2" необходимо указать название Вашей контактной формы
       $submission = WPCF7_Submission::get_instance();
       $posted_data = $submission->get_posted_data();
       //далее мы перехватывает введенные данные в Contact Form 7
       $firstName = $posted_data['your-name']; //перехватываем поле [your-name]
       $message = $posted_data['your-message']; //перехватываем поле [your-message]

       //сопостановление полей Bitrix24 с полученными данными из Contact Form 7
       $postData = array(
          'TITLE' => 'Название лида с сайта', // Установить значение свое значение
          'NAME' => $firstName,
          'COMMENTS' => $message,
       );

       //передача данных из Contact Form 7 в Bitrix24
       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 = print_r($response[1], 1);
       } else {
          echo 'Connection Failed! '.$errstr.' ('.$errno.')';
       }
    };
    endif;
}

Иван

Добрый! Спасибо большое за статью! Все работает!

Алексей

Спасибо за статью, но…не работает. Как можно найти ошибку? Вроде все сделал как сказано.
А в самой битрикс никаких действий не нужно делать, лиды должны сразу во вкладке CRM отображаться?

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

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

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

Вот перечень распространенных ошибок:

  • указали не верный логин или пароль к битрикс24;
  • при редактировании кода случайно:
    • была удалена/добавлена запятая,
    • была удалена/добавлена точка с запятой,
    • был удален/добавлен другой символ;
  • указали не верный title контактной формы.

Алексей

Владимир, буду очень благодарен, если взглянете одним глазком на код [ссылка заблокирована по решению администрации сайта]
Что может быть не так?

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

На первый взгляд все выглядит корректно.
Проверьте, пожалуйста, не сильно ли Вы ограничили пользователя в правах, которого указали в логине и пароле.

Алексей

Я вообще администратор)

Ярослав

Алексей у меня тоже не работает код для двух форм, у Вас получилось настроить?

Андрей

Добрый день, все работает, а как передать ютм-метки, по каким параметрам, поскажите пожалуйста)

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

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

  1. устанавливайте плагин плагина Contact Form 7 — Dynamic Text Extension
  2. используйте шорткоды данного плагина для получения get параметров. Пример, [dynamichidden dynamicname «CF7_GET key=’utm_term'»]
  3. перехватывайте данные в function.php и передавайте в битрикс24

Шорткоды плагина Dynamic Text Extension:

  • Получает значение get параметра
    [dynamichidden dynamicname «CF7_GET key=’get_name'»]
  • Получает значение переменных из массива _POST
    [dynamichidden dynamicname «CF7_POST key=’foo'»]
  • Получает значение текущего хоста домена
    [dynamichidden dynamicname «CF7_bloginfo show=’url'»]
  • Получает значение текущего заголовка страницы
    [dynamichidden dynamicname «CF7_get_post_var key=’title'»]
  • Получает значение текущего адреса страницы — относительный url
    [dynamichidden dynamicname «CF7_get_post_var key=’slug'»]
  • Получает значение текущего адреса страницы — полный url
    [dynamichidden dynamicname «CF7_URL»]
  • Получает значение из произвольного поля, которое Вы устанавливаете сами
    [dynamichidden dynamicname «CF7_get_custom_field key=’name_field'»]
  • Получает данные о пользователе, если он авторизовался на сайте
    [dynamichidden dynamicname «CF7_get_current_user»]
  • Получает хост источника перехода на сайт
    [dynamichidden dynamicname «CF7_referrer»]

Андрей

Добрый день, благодарю за статью. Подскажите как передать UTM Метки в нужные поля UTM Sourse, UTM Medium, UTM Campain, UTM Term

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

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

  1. в шаблоне формы CF7 следует добавить следующий код:
    [hidden utm_source default:get]
    [hidden utm_medium default:get]
    [hidden utm_campaign default:get]
    [hidden utm_content default:get]
    [hidden utm_term default:get]
  2. 2. В php скрипте
    1. где перехватываете данные из CF7 необходимо добавить:
      $utm_source = $posted_data['utm_source'];
      $utm_medium = $posted_data['utm_medium'];
      $utm_campaign = $posted_data['utm_campaign'];
      $utm_content = $posted_data['utm_content'];
      $utm_term = $posted_data['utm_term'];
    2. где отправляете данные в Б24 необходимо добавить:
      'UTM_CAMPAIGN' => $utm_campaign,
      'UTM_CONTENT' => $utm_content,
      'UTM_MEDIUM' => $utm_medium,
      'UTM_SOURCE' => $utm_source,
      'UTM_TERM' => $utm_term,

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

Добрый день.
Значения введенных переменных (телефон и т.п.) передаются, но значения utm меток — нет.

[hidden utm_campaign default:get]
[hidden utm_content default:get]
$firstName = $posted_data['tel-722']; //перехватываем поле [tel-722]
$utm_campaign = $posted_data['utm_campaign']; //перехватываем поле [utm_campaign]
$utm_content = $posted_data['utm_content']; //перехватываем поле [utm_content]
$qty = $posted_data['text-559']; //перехватываем поле [text-559]
$addr = $posted_data['text-339']; //перехватываем поле [text-339]

'TITLE' => 'Форма', // Установить значение свое значение
'NAME' => $firstName,
'PHONE_WORK' => $firstName,
'COMMENTS' => $utm_campaign,
'UTM_CAMPAIGN' => $utm_campaign,
'UTM_CONTENT' => $utm_content,

Александр

У меня тоже ничего не передаёт ни через рест апи ни через хук

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

Добрый день, Александр
смотрите статью «Основные ошибки при интеграции»

Сергей

Статья просто топовая. Мне очень понравилась. Пока правда не делал. Планирую вот заняться вечерком. Но на первый взгляд написано максимально грамотно. Как все сделаю, еще раз отпишусь. Спасибо.

Иван

Владимир,а как UTM метки добавить и передать?

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

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

на данный вопрос уже давал ответ. Смотрите, пожалуйста, здесь.

Полина

Спасибо большое за код 🙂
Не подскажете? Как сделать передачу значения value выбранного checkbox?

Ренат

Добрый вечер
Огромное спасибо за статью!

Подскажите, есть ли возможность кроме обычных полей передавать файлы?

Алекс

Красиво разжовал. У меня вопрос, откуда такие умные люди берутся?

Константин

Здравствуйте!
Большое спасибо за инструкцию, всё работает. Себе ещё добавил назначение ответственного.
Не подскажите, как назначать ответственного поочереди на 2-х менеджеров, например.

Константин

Привет! Спасибо за статью! У себя я добавил "ASSIGNED_BY_ID" => 17, чтобы ставить ответственного менеджера. 17 — это номер пользователя в CRM который будет ответственным за созданный лид.

Не хочу сделать ещё лучше. Если знаете, как сделать чтобы лид назначался рандомно двум/трём менеджерам? Или по очереди?

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

Добрый день, Константин

да, Вы добавили верный параметр для назначения ответственного — ASSIGNED_BY_ID
Но для того, чтобы сделать рандомное назначение ответственного, вижу три варианта:

  1. Перейти на платную версию Битрикс24, где будут доступны возможности бизнес процессов, благодаря которым можно настраивать что угодно и как угодно.
  2. Так как данный пример реализован с помощью POST запроса, где не хватает Curl, т.е связь в одностороннем порядке, необходимо реализовывать полную интеграцию с помощью api Битрикс24.
  3. И самый простой, на мой взгляд, вариант — рандомное присвоение переменной для параметра ASSIGNED_BY_ID.
    К примеру,

    // Инициализируем массив с ID ответственных
    var arr = ["17", "18", "19"]; // , где 17, 18, 19 - ID первого, второго и третьего ответственного
    var rand = Math.floor(Math.random() * arr.length); // Для вывода нужен случайный номер от 0 до arr.length-1 включительно
    
    $postData = array(
    'ASSIGNED_BY_ID' => $arr[rand],
    )
    

    Таким образом, будет подставляться случайной ID из указанных для ответственных

Константин

Великолепно! Этот вариант мне подходит. Спасибо.

Константин

Не хватило знаний для того чтобы вставить в код functions.php.

syntax error, unexpected 'var' (T_VAR)

Можете показать пример кода полностью для вставки?

Андрей

Столкнулся с такой же проблемой. Удалось ли вам ее решить?

Если у меня есть поле добавить файл.
Как мне передать файл в пользовательское поле битрикс24 с сf7 ?

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

Добрый день,
данный пример реализован с помощью POST запроса, где не хватает Curl, т.е связь в одностороннем порядке, необходимо реализовывать полную интеграцию с помощью api Битрикс24.

UPD
Добавил вариант интеграции при помощи входящего вебхука. С помощью данной интеграции можно передать файл.

Алексей

Добрый день Владимир, тестирую вот этот кусок кода для двух форм.
Копирую точно с сайта, логин и пароль Админа битрикс24, тайтлы к формам указал те которые в коде.
Лиды не получаем (((

WP ругается:
Ваши изменения в коде PHP были отменены из за ошибки на строке 78 файла wp-content/themes/emmet-lite/functions.php. Исправьте и попробуйте пересохранить.
syntax error, unexpected ';', expecting ',' or ')'

Вот эта строчка: $output = print_r($response[1];
Благодарю за ответ!!!

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

Добрый день, Алексей
тайтлы к формам необходимо указывать те, которые у Вас прописаны в административной части сайта.

И у Вас ошибка в коде. Строчка должна быть следующего вида:

$response = explode("\r\n\r\n", $result);
$output = print_r($response[1];
} else {
echo 'Connection Failed! '.$errstr.' ('.$errno.')';

Ярослав

Владимиру огромное спасибо! Наконец то все замоторилось))))
И все же код который приведен выше где на две формы вызывал ошибку. В нем в строке

$output = print_r($response[1];
} else {

не было закрывающей скобки и кавычек. Если б не комментарий выше, так бы и не разобрался.
Правильный код этой строчки приведен выше, с ним работает. Только копируйте внимательно. При копировании из комментария в буфере будет вот что
$output = ‘

‘.print_r($response[1], 1).’
1
‘.print_r($response[1], 1).’
‘;
хотя и так уже работало.
Подправьте руками самостоятельно чтобы получилось правильно как в примере комментом выше

Еще раз спасибо за вашу статью!

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

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

да, вы верно разобрались.
К сожалению, комментарии не поддерживают полноценную вставку кода и могут обрезать его часть.

Я рад, что у вас все получилось!

Павел

Спасибо за материал! НО, не происходит абсолютно никаких действий при отправке данных через форму (на почту все доходит), но в CRM не создается лид. В functions.php вставил код. Если переходить по прямой ссылке с GET-параметрами, то все формируется.

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

Да не за что. Главное, чтобы вы разобрались и у вас все заработало.

Добрый день, что-то не работает, помогите, пожалуйста

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

Добрый день,

так как комментарии не поддерживают полноценную вставку кода мне сложно судить о его корректности.
Держите ссылку с адаптированным для вас кодом: gettotop.ru/share/muraha.txt. Не забудьте указать логин и пароль. Должно все работать.

Здесь вы можете ознакомится с перечнем основных ошибок при интеграции.

Спасибо за быстрый ответ! Но все равно не хочет схватывать данные, все перепрвоерил и данные создатея канала ввел. Не хочет передавать значения 🙁

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

1. Вставьте ссылку в адресную строку браузера:
*****.bitrix24.ru/crm/configs/import/lead.php?LOGIN=*****&PASSWORD=******&TITLE=test
Вместо звездочек укажите значения, где:

  • *****.bitrix24.ru — домен в Вашей Б24;
  • LOGIN — логин от Вашей учетной записи;
  • PASSWORD — пароль от Вашей учетной записи.

Если в CRM системе будет создан лид с названием «test», значит можно исключить проблему связанные с ошибкой в логине и пароле или правами пользователя.

2. Если проверка п.1 успешна, убедитесь что используете последнею версию CF7 и в названии формы, которую подставляете в скрипт.

3. Если используете плагины сохранения обращений из форм CF7 в БД, отключите их и протестируйте интеграцию.
Дело в том, что данные плагины могут менять hook’и CF7.

4. Если все это не помогло, то можете написать мне через форму обратной связи.
Посмотрим как решить ваши проблему.

Николай

Не работает, логин и пароль верный, как понять почему где ошибку может быть?

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

Здесь вы можете ознакомится с перечнем основных ошибок при интеграции.

Игнат

Спасибо за разъяснения.
Подключился через вебхуки.
Имя, фамилию, отчество, комментарий передаёт прекрасно, а как только дело доходит до телефона и почты, так пусто.

$queryData = http_build_query(array(
      'fields' => array(
        // Устанавливаем название для заголовка лида
        'TITLE' => 'Обратная связь в шапке',
        'NAME' => $firstName,
        'PHONE_WORK' => $myphone,
        'EMAIL_WORK' => $myemail,
      ),

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

Пришлите, пожалуйста, полный код обернутый в тег pre и принт скрин формы CF7

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

Добрый день,

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

Сайтозависим

Добрый день! Спасибо за статью!
Есть такой вопрос. То есть лид постоянно будет создаваться новый?

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

Добрый день!
да, с каждым новым обращением будет создаваться новый лид

Сайтозависим

Телефон и емайл не передается. Но имя и все такое передается успешно

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

Пришлите, пожалуйста, полный код обернутый в тег pre и принт скрин формы CF7

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

Добрый день,

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

Виталий

У меня та же проблема

// Вызываем функцию для перехвата данных
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
 
  // Перехватываем данные из Contact Form 7
  $title = $contact_form->title;
  $posted_data = $contact_form->posted_data;
  //Вместо "Контактная форма 1" необходимо указать название вашей контактной формы
  if ('*******************' == $title ) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $name = $posted_data['text-128'];
    $tel = $posted_data['tel-71']; 
    
    $queryUrl = 'https://********.bitrix24.ru/rest/*/************/crm.lead.add.json';
    $queryData = http_build_query(array(
      'fields' => array(
        'TITLE' => 'Название лида с сайта',
        'NAME' => $name,
        'PHONE_MOBILE' => $tel,
      ),
      '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

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

спасибо большое за предоставленный код интеграции и скрин формы. Это помогло решить задачу.

Да, проблема действительно имеет место быть. Дело в том, что при выборе интеграции с помощью входящего вебхука (в отличии от упрощенного 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

Поэтому ваш код будет иметь следующий вид:

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {

  $title = $contact_form->title;
  $posted_data = $contact_form->posted_data;
  if ('*******************' == $title ) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $name = $posted_data['text-128'];
    $tel = $posted_data['tel-71']; 
    
    $queryUrl = 'https://********.bitrix24.ru/rest/*/************/crm.lead.add.json';
    $queryData = http_build_query(array(
      'fields' => array(
        'TITLE' => 'Название лида с сайта',
        'NAME' => $name,
        'PHONE' => Array(
            "n0" => Array(
                "VALUE" => $tel,
                "VALUE_TYPE" => "HOME",
            ),
        ),
      ),
      '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']."";
  }
}

Пожалуйста, отпишите после корректирвоки.

Виталий

Вы очень подробно разобрали этот вопрос, теперь мне все понятно. Еще раз спасибо за это! Не подскажете, можно ли сделать автоматическое уведомление при создании нового лида? Как, например, если бы лид создавался через стандартную crm форму bitrix24

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

Речь про какие уведомления?

Виталий

Звуковое уведомление в браузере и push в мобильном приложении. Это возможно сделать?

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

К сожалению, нет. Такое оповещение включить нельзя. Но можно настроить уведомление в telegram.

Виталий

Может быть проблема не в коде, а в настройках bitrix24, может в правах доступа веб хука указать не только «CRM»?
Или проблема связана с темой? У меня тема Astra.

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

Виталий

Да, все получилось. Спасибо большое!

Виталий

Владимир, почему-то не получается привязать несколько форм, при помощи веб хука.
Ошибка:
Ваши изменения в коде PHP были отменены из за ошибки на строке 204 (строка где написано elseif) файла wp-content/themes/astra/functions.php. Исправьте и попробуйте пересохранить.

syntax error, unexpected 'elseif' (T_ELSEIF)

Код:

// Вызываем функцию для перехвата данных
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
 
  // Перехватываем данные из Contact Form 7
  $title = $contact_form->title;
  $posted_data = $contact_form->posted_data;
  //Вместо "Контактная форма 1" необходимо указать название вашей контактной формы
  if('************' == $title ) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    // Далее перехватываем введенные данные в полях Contact Form 7:
    // 1. Перехватываем поле [your-name]
    $name = $posted_data['text-128'];
    // 2. Перехватываем поле [your-message]
    $tel = $posted_data['tel-71']; 
    
    // Формируем URL в переменной $queryUrl для отправки сообщений в лиды Битрикс24, где
    // указываем [ваше_название], [идентификатор_пользователя] и [код_вебхука]
    $queryUrl = 'https://*********.bitrix24.ru/rest/*/**************/crm.lead.add.json';
    // Формируем параметры для создания лида в переменной $queryData
    $queryData = http_build_query(array(
      'fields' => array(
        // Устанавливаем название для заголовка лида
        'TITLE' => '**********',
        'NAME' => $name,
        'PHONE' => Array(
    "n0" => Array(
        "VALUE" => "$tel",
        "VALUE_TYPE" => "MOBILE",
    ),
    ),
        'OPPORTUNITY' => '****',
        'SOURCE_ID' => 'WEB',
        'ASSIGNED_BY_ID' => '1',
		'STATUS_ID' => "NEW",
        
      ),
      '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']."";
  };
 elseif('*******' == $title ) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    // Далее перехватываем введенные данные в полях Contact Form 7:
    // 1. Перехватываем поле [your-name]
    $name = $posted_data['text-1'];
    // 2. Перехватываем поле [your-message]
    $tel = $posted_data['tel-194']; 
    
    // Формируем URL в переменной $queryUrl для отправки сообщений в лиды Битрикс24, где
    // указываем [ваше_название], [идентификатор_пользователя] и [код_вебхука]
    $queryUrl = 'https://**********.bitrix24.ru/rest/*/**************/crm.lead.add.json';
    // Формируем параметры для создания лида в переменной $queryData
    $queryData = http_build_query(array(
      'fields' => array(
        // Устанавливаем название для заголовка лида
        'TITLE' => '*********',
        'NAME' => $name,
        'PHONE' => Array(
    "n0" => Array(
        "VALUE" => "$tel",
        "VALUE_TYPE" => "MOBILE",
    ),
    ),
        'OPPORTUNITY' => '****',
        'SOURCE_ID' => 'WEB',
        'ASSIGNED_BY_ID' => '1',
		'STATUS_ID' => "NEW",
        
      ),
      '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']."";
  };
endif;
}

Помогите, пожалуйста!

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

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

вы пропустили : в строчках if(****) { и elseif(****) {

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
 
  $title = $contact_form->title;
  $posted_data = $contact_form->posted_data;
  if('Контактная форма 1' == $title ): {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $name = $posted_data['text-128'];
    $tel = $posted_data['tel-71']; 
    
    $queryUrl = 'https://*********.bitrix24.ru/rest/*/**************/crm.lead.add.json';
    $queryData = http_build_query(array(
      'fields' => array(
        'TITLE' => '**********',
        'NAME' => $name,
        'PHONE' => Array(
		    "n0" => Array(
		        "VALUE" => "$tel",
		        "VALUE_TYPE" => "MOBILE",
		    ),
    	),
        'OPPORTUNITY' => '****',
        'SOURCE_ID' => 'WEB',
        'ASSIGNED_BY_ID' => '1',
		'STATUS_ID' => "NEW",
      ),
      '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']."";
  };
  elseif('Контактная форма 2' == $title ): {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $name = $posted_data['text-1'];
    $tel = $posted_data['tel-194']; 
    
    $queryUrl = 'https://**********.bitrix24.ru/rest/*/**************/crm.lead.add.json';
    $queryData = http_build_query(array(
      'fields' => array(
        'TITLE' => '*********',
        'NAME' => $name,
        'PHONE' => Array(
		    "n0" => Array(
		        "VALUE" => "$tel",
		        "VALUE_TYPE" => "MOBILE",
		    ),
	    ),
        'OPPORTUNITY' => '****',
        'SOURCE_ID' => 'WEB',
        'ASSIGNED_BY_ID' => '1',
		'STATUS_ID' => "NEW",
      ),
      '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']."";
  };
  endif;
}

Виталий

Владимир, доброго времени суток! Настроил интеграцию, чтобы автоматически создавались сделки, а не лиды. Все работает, сделки создаются, контакт к сделке прикрепляется, одним словом все ок.
Но со стороны CF7 теперь возникла проблема: при нажатии на кнопку «отправить», возле формы появляется иконка крутящихся стрелочек, а уведомления, что форма отправлена нет.

То есть получается, что в глазах посетителя сайта отправка формы идет вечно и форма не работает. Но письмо на e-mail с введенными данными приходит и сделка в Битрикс24 тоже создается с нужными данными.

Пока что настроил на создание сделок только одну форму, остальные работают нормально.
Вот фрагмент кода в functions.php для этой формы:

[код заблокирован по решению администрации сайта]

Кеш удалял, пробовал на разных устройствах.

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

Добрый день, Виталий
код, конечно, у вас получился интересный =) и нагроможденный.
Не вижу причин создавать сразу все: и лид, и контакт, и сделку. Тем более, что из лида конвертируется контакт или сделка средствами Битрикс24.

А зависание CF7, скорее всего, происходит из-за того, что вы сначала создаете контакт в Б24, потом ожидаете его ID в ответе от CRM, чтобы создать сделку и привязать ее к нему.

Василий

Спасибо за статью! А как передать источник, что это лид с формы на сайте?

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

Не за что!
Для того, чтобы сообщить Битрикс24, что это лид с сайта используйте параметр SOURCE_ID со значением WEB. Пример,

'SOURCE_ID' => 'WEB',

Павел

Почему то не предается поле «телефон», не могу понять почему, можете подсказать?

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

Добрый день,
да, конечно. Обратите, пожалуйста, внимание на комментарий.
В нем вы найдете ответ как решить проблему.

Павел

Спасибо огромное, работает

Станислав

Добрый вечер, помогите пожалуйста, сделал через веб хуки, но при отправки формы в WP вылезает сообщение «Ошибка при сохранении лида: Method not found!» и соответственно лид не создается.

Дмитрий

Владимир, подскажите, как передать поля адреса из woocomerce в строку адреса лида? Переменные не передает никакие значения, там скорее всего также нужно в массиве настройки передавать или я ошибаюсь?

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

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

для передачи адреса в поля лидов Б24, смотрите таблицу параметров для лидов.

На примере интеграции woocomerce и Б24, часть кода для отправки данных в Б24 будет следующий:

  $queryData = http_build_query(array(
    'fields' => array(
      'TITLE' => $subject,
      'ADDRESS' => $order_shipping_address_1,
      'ADDRESS_CITY' => $order_shipping_city,
      'ADDRESS_COUNTRY' => $order_shipping_state,
      'ADDRESS_POSTAL_CODE' => $order_shipping_postcode,
      'TITLE' => $subject,
      'COMMENTS' => $order_base_info.' '.$order_client_info.' '.$product_base_infо
    ),
    'params' => array("REGISTER_SONET_EVENT" => "Y")
  ));

Дмитрий

Не работает так, пробовал, поле адреса остается пустым, пробовал создавать еще собственное поле с адресом, тоже не работает. В чем проблема не понятно. Есть какие нибудь другие способы сделать? только через вебхуки?

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

Если не раскладывать код, то в поле «Комментарий» у вас есть «Информация по доставке»?

Дмитрий

Владимир я заметил что у меня поле «коментарий» вообще пропало, и его нет в списке стандартных полей! Как возможно восстановить данное поле? Раньше было данное поле, но я не помню точно, все ли данные оно передавало.

Антон

Добрый день.
2 лида почему-то падает в CRM. В чем может быть проблема?

Владислав

Добрый день.
1. Подскажите пожалуйста, в чем может быть причина, что при повторной отправке лида с одинаковым Email и уже существующим Контактом с таким Email, лид автоматически не определяется как повторный и поле контакт не заполняется, но данные о имени и фамилии и email заполняются (и с него можно создать новый контакт). Заполнение необходимо выполнить вручную.
2. И еще вопрос про уведомления при создании лида (вы уже выше описывали что это не возможно) а может быть это возможно выполнить через бизнес-процесс.

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

Добрый день, Владислав
Ответ по второму вопросу: да, это возможно как через бизнес-процес, так и через роботов.
Ответ по первому вопросу: в настройка необходимо активировать контроль повторных лидов.

Иван

Спасибо мужик, спас!! Подключил уже херову тучу сайтов с contact form7 через rest api. А тут наткнулся на один, который зависал на выполнении этих функций, при выполнении скрипта feedback. И хер знает что с ним делать. Я не на столько силён, чтобы лезть в js-кишки прописанных библиотек.До пяти утра вот сидел, пробовал что-то поменять. Но помог только вариант отправки форм в лиды через вэб-хук! Респектуха-уважуха))

Артем

Статья супер. Спасибо огромное! Все настроил с помощью вебхука — работает.

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

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

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

спасибо за вашу оценку и отзыв.

Для того, чтобы привязать товар к лиду необходимо:

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

Таким образом мы получим код следующего вида:

// Вызываем функцию для перехвата данных
add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
  // Перехватываем данные из Contact Form 7
  $title = $contact_form->title;
  $posted_data = $contact_form->posted_data;
  //Вместо "Контактная форма 1" необходимо указать название вашей контактной формы
  if ('Контактная форма 1' == $title ) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    // Далее перехватываем введенные данные в полях Contact Form 7:
    // 1. Перехватываем поле [your-name]
    $firstName = $posted_data['your-name'];
    // 2. Перехватываем поле [your-message]
    $message = $posted_data['your-message']; 
    
    // Формируем URL в переменной $queryUrl для отправки сообщений в лиды Битрикс24, где
    // указываем [ваше_название], [идентификатор_пользователя] и [код_вебхука]
    $queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.add.json';
    // Формируем параметры для создания лида в переменной $queryData
    $queryData = http_build_query(array(
      'fields' => array(
        // Устанавливаем название для заголовка лида
        'TITLE' => 'Название лида с сайта',
        'NAME' => $firstName,
        'COMMENTS' => $message,
      ),
      '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);
	$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/[код_вебхука]/crm.lead.productrows.set.json';
	$queryData = http_build_query(array(
		'id' => $leadID, // Указываем ID созданного лида
		'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']."
"; } }

Маргарита

Здравствуйте все делаю согласно инструкции не создается лид, уже голову сломала.

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

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

Роман

Спасибо огромное, статья очень полезная, но возникла проблема при использовании способа с вебхуком поля почему-то не заполняются, через RestAPI все работает кроме UTM меток.
Вот код:

add_action( 'wpcf7_mail_sent', 'your_wpcf7_mail_sent_function' );
function your_wpcf7_mail_sent_function( $contact_form ) {
  // **** Код выше скрыт ******
  elseif('Оформление заказа + Кредит' == $title ): {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();
    $tovar = $posted_data['textarea-item'];
    $summa = $posted_data['summa'];
    $myname = $posted_data['text-name'];
    $myphone = $posted_data['your-tel'];	
    $myemail = $posted_data['your-email'];
    $mypasp = $posted_data['your-pasp'];
    $kem = $posted_data['your-kem'];
    $kogda = $posted_data['your-kogda'];
    $myadr = $posted_data['your-adr'];
    $utm_source = $posted_data['utm_source'];
    $utm_medium = $posted_data['utm_medium'];
    $utm_campaign = $posted_data['utm_campaign'];
    $utm_content = $posted_data['utm_content'];
    $utm_term = $posted_data['utm_term'];

    $queryUrl = 'https://******/rest/*/*****************/crm.lead.add.json';
    $queryData = http_build_query(array(
      'fields' => array(
          'TITLE' => 'Оформление заказа с сайта *******',
          'COMMENTS' => $tovar,
          'OPPORTUNITY' => $summa,
          'NAME' => $myname,
          'PHONE_WORK' => $myphone,
          'EMAIL_HOME' => $myemail,
          'UF_CRM_1555673371631' => $mypasp,
          'UF_CRM_1556177500586' => $kem,
          'UF_CRM_1556177528125' => $kogda,
          'ADDRESS' => $myadr,
          'UTM_CAMPAIGN' => $utm_campaign,
          'UTM_CONTENT' => $utm_content,
          'UTM_MEDIUM' => $utm_medium,
          'UTM_SOURCE' => $utm_source,
          'UTM_TERM' => $utm_term,
      ),
      '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']."";
  };
  
  endif;
}

Аналогичная проблема. По три раза код перепроверил. Даже в письме не приходит разобранный utm и url

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

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

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

Добрый день, Роман
у вас не заполняются все поля или какие-то отдельные? Кстати, реализация для передачи телефона и email у вас неверная. Как передавать для них значения смотрите здесь

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

Обращаю ваше внимание, что через RestAPI невозможно передать UTM значения. Они передаются только при помощи интеграции с входящим вебхуком.

Роман

А как поле с чекбоксом передавать?

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

Добрый день, Роман
чекбокс перехватывается и передается точно также как и другие поля в CF7, т.е вам необходимо в $posted_data указать название вашего чекбокса ['your-checkbox-name']

Роман

а если радио?

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

аналогично

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

Если вариантов выбора больше одного, то вам необходимо преобразовать полученные значения в строку. В противном случаи значения не будут переданы.

Роман

Я извиняюсь, но, что значит преобразовать полученные значения в строку?

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

Применить функцию implode(). Данная функция объединяет элементы массива в строку. Пример,

$mycheckbox = implode(", ", $posted_data['your-checkbox-name']);

Роман

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

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

Добрый день, Роман
Это не совсем задача. Для начала вам необходимо понять как работают UTM метки.

Есть два способа:

  • Проброс UTM меток. Это плохой метод, так как у вас поедет вся аналитика.
  • Запись UTM меток в coоkies или localstorage, с последующим их извлечением на соответствующих формах.

Александр

Добрейший день, голову поломал, почему то поля phone, email заполняются а остальные «ШИШ», подскажите в чем может быть проблема.

$queryUrl = $huck_url[$arFields["IBLOCK_ID"]];
$queryData = http_build_query(array(
	'fields' => array(
		'TITLE' => $arRes[0]["NAME"],
		'FIRST_NAME' => $arRes[0]["PROPERTY_USER_NAME_VALUE"],
		'PHONE' => array(array("VALUE" => $arRes[0]["PROPERTY_USER_PHONE_VALUE"],"VALUE_TYPE" => "WORK")),
		'EMAIL' => array(array("VALUE" => $arRes[0]["PROPERTY_USER_EMAIL_VALUE"],"VALUE_TYPE" => "WORK")),
		'COMMENTS' => $arRes[0]["PROPERTY_MESSAGE_VALUE"]["TEXT"],
		'STATUS_ID' => "NEW",
		'OPENED' => "Y",
		'SOURCE_ID' => "WEB",
		'ASSIGNED_BY_ID' => 120,
	),
	'params' => array("REGISTER_SONET_EVENT" => "Y")
));

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

Добрый день, Александр
это точно для CF7? Похоже, что нет =)

Александр

Конечно нет, просто где нашел схожую статью там и написал:-D
Просто проблема плёвая, а найти не мог, всё решено, СПАСИБО:D
Для однополчан по схожим вопросам поясню, ПРОВЕРЯЙТЕ КОДИРОВКИ НА САЙТЕ И БИТРИКС24
Может кому помогу.

Дмитрий

Добрый день. Подскажите, пожалуйста, по теме.

Через ВебХуки передаю данные из Contact Form 7 и отправляю в Bitrix24 на создание лидов. Все поля успешно передаются и лиды создаются, но никак не могу заставить дойти переданные файлы в битрикс.

я понял, что выхватывать файл нужно через:
$url = $uploaded_files[‘file-850’];
$data = file_get_contents($url);
$base64 = base64_encode($data);
$name = urldecode(basename($url));

А битрикс должен распознать и правильно сложить файл в лид через:
‘UF_CRM_1654693520475’ => [‘fileData’ => [$name, $base64]],

‘UF_CRM_1654693520475 — идентификатор кастомного поля для файлов из B24, а [‘file-850’] — поле для файла из CF7

После «=>» пробовал разные комбинации. но не получилось.
______

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

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

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