Как я боролась с веб-формами, чтобы по ним создавался в битриксе лид с заполненной сквозной аналитикой
====quote====
У заказчика коробочный битрикс24, по системе многосайтовости на одном ядре развернуто шаблонное решение Аспро.Корп2, в нем формы обратной связи сделаны веб-формами.
Задача: по заполнению веб-формы создавать лид в битрикс24 с заполненной сквозной аналитикой.
=============
1. Сквозная аналитика определяется по параметру utm_source. Сохраняем ее в куку alpha_utm_source.
====code====
if(isset($_GET["utm_source"]) && !empty($_GET["utm_source"])): $_SESSION["alpha_utm_source"] = str_replace("-", "_", $_GET["utm_source"]); setcookie( "alpha_utm_source", $_GET["utm_source"], time() + (10 * 365 * 24 * 60 * 60) ); endif;
=============
2. подключаем в настройках модуля веб-форм CRM
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=48&LESSON_ID=3642
====quote====
но, с%ка, нет возможности штатно передать метку, нет возможности штатно указать сквозную аналитику
=============
3. в веб-форме делаем поле UTM-SOURCE типа hidden
4. обработчик в init.php, который выцарапывает (потому что это тоже не оч просто) куку alpha_utm_source, и если такая есть, то заполняет поле UTM-SOURCE в веб-форме
====code====
AddEventHandler('form', 'onAfterResultAdd', 'MyAfterResultAdd',1); function MyAfterResultAdd($webFormId, $resultId){ CModule::IncludeModule('form'); $arForm = CForm::GetSiteArray($webFormId); if(in_array("1c",$arForm)){ //cite 1c $rsResult = CFormResult::GetByID($resultId); $arResult = $rsResult->Fetch(); $rs = CFormField::GetBySID("UTM_SOURCE", $arResult["FORM_ID"]); $arFieldUtm = $rs->Fetch(); if(!empty($arResult["STAT_SESSION_ID"]) && !empty($arFieldUtm["ID"]) && CModule::IncludeModule('statistic')){ if ($rs = CSession::GetByID($arResult["STAT_SESSION_ID"])){ $arSession = $rs->Fetch(); if(!empty($arSession["LAST_HIT_ID"])){ if ($rs = CHit::GetByID($arSession["LAST_HIT_ID"])){ $arHit = $rs->Fetch(); if(!empty($arHit["COOKIES"])){ $arCookies = explode(PHP_EOL, $arHit["COOKIES"]); foreach ($arCookies as $str) { if(strpos($str, "[alpha_utm_source]") !==false){ $cookieValue = trim(str_replace("[alpha_utm_source] = ", "", $str)); break; } } if(empty($cookieValue)){ $cookieValue = "1ccite"; } CFormResult::SetField($resultId, "UTM_SOURCE", [$arFieldUtm["ID"]=>$cookieValue]); } } } } } } }
=============
5. в лиде создаем свойство с названием UTM_SOURCE_COPY типа строка
6. в настройке веб-формы передаем лид и делаем сопоставление свойства лида UTM_SOURCE_COPY полю веб-формы UTM_SOURCE
7. при создании лида делаем обработчик, который тоже размещаем в init.php, который из нашего свойства проставляет UTM-метку
====code====
AddEventHandler("crm", "OnBeforeCrmLeadAdd", "MyOnBeforeCrmLeadAdd"); function MyOnBeforeCrmLeadAdd(&$arFields) { if(!empty($arFields["UF_CRM_1640828446"])){ //свойство UTM_SOURCE_COPY $arFields["UTM_SOURCE"] = $arFields["UF_CRM_1640828446"]; } }
=============
8. и тут еще допилить (доделаю в ближайшие дни), чтоб по utm-метке сквозная ставилась, потому что она не проставляется, хотя в системе (в настройках сквозной) указана
Подробнее…