Собираем данные аналитики из 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. Создали процесс и обновили сделку аналитическими данными.