Интеграция 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.
Понравилась статья? Поделись ей =)

Подписаться на email рассылку

Хотите быть в курсе новых инструкций и кейсов для вашей работы?

Подпишись на полезную рассылку об интернет-маркетинге


83 thoughts on “Интеграция Contact Form 7 и Bitrix24

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

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

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

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

    • Добрый день, Олег

      для этого можно использовать обычную конструкцию 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;
      	}
      
  3. Владимир, почему-то неудаётся добавить код в функции темы.
    Пишет: Что-то пошло не так. Внесённые изменения могли не сохраниться. Пожалуйста, попробуйте ещё раз. Также есть вероятность, что вам придётся вручную исправить и загрузить файл через FTP
    Пробовал через FTP
    Сайт слетает.

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

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

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

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

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

      	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;
      	}
      
      • Есть возможность увидеть полный код? Я где-то накосячил и не могу найти где. Пожалуйста.

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

          //Вызываем функцию для перехвата данных
          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;
          }
          
  5. Спасибо за статью, но…не работает. Как можно найти ошибку? Вроде все сделал как сказано.
    А в самой битрикс никаких действий не нужно делать, лиды должны сразу во вкладке CRM отображаться?

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

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

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

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

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

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

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

      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

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

          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,
          • Добрый день.
            Значения введенных переменных (телефон и т.п.) передаются, но значения 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,
            
  7. Статья просто топовая. Мне очень понравилась. Пока правда не делал. Планирую вот заняться вечерком. Но на первый взгляд написано максимально грамотно. Как все сделаю, еще раз отпишусь. Спасибо.

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

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

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

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

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

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

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

      да, Вы добавили верный параметр для назначения ответственного — 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)
        

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

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

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

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

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

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

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

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

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

      $response = explode("\r\n\r\n", $result);
      $output = print_r($response[1];
      } else {
      echo 'Connection Failed! '.$errstr.' ('.$errno.')';
      
  14. Владимиру огромное спасибо! Наконец то все замоторилось))))
    И все же код который приведен выше где на две формы вызывал ошибку. В нем в строке

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

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

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

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

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

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

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

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

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

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

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

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

        • 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. Если все это не помогло, то можете написать мне через форму обратной связи.
          Посмотрим как решить ваши проблему.

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

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

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

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

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

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

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

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

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

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

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

    // Вызываем функцию для перехвата данных
    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']."";
      }
    }
    

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

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

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

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

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

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

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

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

  21. Владимир, почему-то не получается привязать несколько форм, при помощи веб хука.
    Ошибка:
    Ваши изменения в коде 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;
    }
    

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

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

      вы пропустили : в строчках 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;
      }
      
  22. Владимир, доброго времени суток! Настроил интеграцию, чтобы автоматически создавались сделки, а не лиды. Все работает, сделки создаются, контакт к сделке прикрепляется, одним словом все ок.
    Но со стороны CF7 теперь возникла проблема: при нажатии на кнопку «отправить», возле формы появляется иконка крутящихся стрелочек, а уведомления, что форма отправлена нет.

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

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

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

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

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

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

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

      'SOURCE_ID' => 'WEB',
      
  23. Почему то не предается поле «телефон», не могу понять почему, можете подсказать?

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

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

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

      для передачи адреса в поля лидов Б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")
        ));
      
      • Не работает так, пробовал, поле адреса остается пустым, пробовал создавать еще собственное поле с адресом, тоже не работает. В чем проблема не понятно. Есть какие нибудь другие способы сделать? только через вебхуки?

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

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

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

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

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

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

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

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

      • занести ваши товары или услуги в битрикс 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']."
      "; } }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *