Собираем аналитику с помощью php-скрипта и передаем ее в amoCRM.


Собираем данные аналитики из Cookies с помощью php-скрипта для отправки в amoCRM.

Аналитика в cookies

В данной статье разберем следующий кейс:
У нас есть сайт, в который интегрированы скрипты по сбору аналитических данных. Такие данные формируют Cookies-файлы с содержанием аналитики, которую предоставляет конкретный сервис.
В данном кейсе разберем, как отправить аналитику, которую собирает сайт вместе с данными из формы обратной связи, чтобы передать ее в amoCRM.

Изучаем аналитику сайта

Если на сайте, который собирает аналитику перейти в консоль разработчика (на странице нажать F12) — то можно увидеть cookies, которые собирает сайт с помощью интегрированных в него скриптов.

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

Создаем PHP скрипт-сборщик Cookies

В директории сайта создадим PHP-скрипт, он будет собирать аналитические данные, которые будем посылать на соответствующий URL-адрес вместе с данными формы. В качестве примера это будет morekit_index.php

Содержание скрипта

function SendToAmoByMore($data) { 
  //Интеграция с amoCRM MoreKIT 
  $moreUrl = 'https://ep.morekit.io/xxxxxxxxxxxxxxxxxxxxxxxxx'; 
  $postArr = $data; 
  $ip = getRealIPCron(); 
  $postArr["USER_IP"] = $ip; 
  $micookie = json_decode($_COOKIE['_mk_si'], true); 
  $pars = array('utm_source', 'utm_medium', 'utm_term', 'utm_content', 'utm_campaign', 
'roistat_visit','_ga','_ym_uid'); 
  foreach ($pars as $par) { 
      if (isset($micookie[$par])) { 
          $postArr[$par] = $micookie[$par]; 
      } 
  } 
  $opts = array('http' => 
      array( 
          'method' => 'POST', 
          'header' => 'Content-type: application/x-www-form-urlencoded', 
          'content' => http_build_query($postArr), 
          'timeout' => 1, 
      ) 
  ); 
  $myCurl = curl_init(); 
//   curl_setopt($myCurl, CURLOPT_URL, 'ССЫЛКА, куда отправить хук'); 
  curl_setopt($myCurl, CURLOPT_URL, $moreUrl); 
  curl_setopt($myCurl, CURLOPT_FOLLOWLOCATION, TRUE); 
  curl_setopt($myCurl, CURLOPT_POST, TRUE); 
  curl_setopt($myCurl, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($myCurl, CURLOPT_POSTFIELDS, json_encode($postArr)); 
  curl_setopt($myCurl, CURLOPT_AUTOREFERER, TRUE); 
  curl_setopt($myCurl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));  
  $response = curl_exec($myCurl); 
  curl_close($myCurl); 
} 
function getRealIPCron() 
{ 
    static $realip; 
    if (!is_null($realip)) 
    { 
        return $realip; 
    } 
    if (isset($_SERVER)) 
    { 
        if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) 
        { 
            $realip = current(preg_grep( 
                "/^(10|172\\.16|192\\.168)\\./", 
                array_map('trim', explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])), 
                PREG_GREP_INVERT 
            )); 
        } 
        $realip = $realip?:@$_SERVER['HTTP_CLIENT_IP']?:@$_SERVER['REMOTE_ADDR']?:NULL; 
    } 
    return $realip?:$realip = '0.0.0.0'; 
} 
function getUserUTMData() { 
    if (isset($_COOKIE['_mk_si'])) 
        $micookie = json_decode($_COOKIE['_mk_si'], true); 
    else 
        $micookie = array(); 
    $utms = array('utm_source', 'utm_medium', 'utm_term', 'utm_content', 'utm_campaign'); 
    $cookies = array('roistat_visit','_ga','_ym_uid');   
    foreach($utms as $utm) 
     if (!empty($_GET[$utm])) $micookie[$utm]=$_GET[$utm];     
    foreach($cookies AS $cookie)  
     if(!empty($_COOKIE[$cookie])) $micookie[$cookie]=$_COOKIE[$cookie];     
    setcookie('_mk_si',json_encode($micookie),time()+3600*24*365, "/"); 
} 
getUserUTMData(); 
?> 

Описание скрипта

getUserUTMData — собирает utm-метки и данные счетчиков yandex/roistat/google и складывает их в отдельный Cookie-файл.
getRealIPCron — получает точный IP — адрес пользователя.
SendToAmoByMore — общая функция для отправки данных в MoreKit, с получением данных по ip, и разбором аналитических Cookies — данных.

Теперь нужно проверить, какие данные отправляет сайт с ФОС и скорректировать скрипт под свой набор данных с формы обратной связи.

Корректировка скрипта

В случае примера форма отправляет три переменные: name, email и feedback. Скрипт пока не настроен на обработку данных с формы, нужно собрать данные для скрипта и передать их в функцию отправки. Наша форма посылает данные на скрипт morekit_index.php посредством POST-запроса.

Обрабатываем переменные с формы обратной связи

Перед вызовом функции SendToAmoByMore($data) добавим обработку переменных с формы:

    $name = $_POST['name'] ?? '';
    $email = $_POST['email'] ?? '';
    $feedback = $_POST['feedback'] ?? '';

    
    $data = array(
        'name' => $name,
        'email' => $email,
        'feedback' => $feedback
        
    );

Здесь мы собрали данные с формы обратной связи в массив для передачи в функцию отправки SendToAmoByMore()

Дополняем cookies

Дополним в скрипте недостающие cookies, чтобы получить максимально полный набор данных. Для этого нужно посмотреть, какие cookies генерируются скриптами с аналитикой и дополнить названия этих cookies в переменную $pars, которая находится в функции отправки SendToAmoByMore()

После того, как все сделано, в полученных данных увидим данные с формы обратной связи вместе с cookies.

Таким образом, мы собрали данные cookies с сайта и отправили их вместе с данными формы обратной связи. Можно настраивать процесс в amoCRM.

Настройка процесса MoreKit

Теперь обработаем полученные данные и обновим ими сделку в amoCRM.

Логика процесса

Создадим примитивный процесс. В нем мы найдем контакт по email, который приходит нам с формы обратной связи и обновим сделку аналитическими данными.

Проверим, что данные заполнились в amoCRM.

Итог

Таким образом, мы успешно дополнили стандартные данные формы обратной связи аналитическими данными cookies и отправили их в MoreKit. Создали процесс и обновили сделку аналитическими данными.