У заказчика коробочный битрикс24, по системе многосайтовости на одном ядре развернуто шаблонное решение Аспро.Корп2, в нем формы обратной связи сделаны веб-формами. Задача: по заполнению веб-формы создавать лид в битрикс24 с заполненной сквозной аналитикой. |
global $APPLICATION; if(isset($_GET["utm_source"]) && !empty($_GET["utm_source"])): $_SESSION["alpha_utm_source"] = str_replace("-", "_", $_GET["utm_source"]); $APPLICATION->set_cookie("alpha_utm_source", $_SESSION["alpha_utm_source"], time() + (10 * 365 * 24 * 60 * 60), "/"); endif; |
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=48&LESSON_ID=3642
но, с%ка, нет возможности штатно передать метку, нет возможности штатно указать сквозную аналитику |
3. в веб-форме делаем поле UTM-SOURCE типа hidden
4. обработчик в init.php, который выцарапывает (потому что это тоже не оч просто) куку alpha_utm_source, и если такая есть, то заполняет поле UTM-SOURCE в веб-форме
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, "[BITRIX_SM_alpha_utm_source]") !==false){ $cookieValue = trim(str_replace("[BITRIX_SM_alpha_utm_source] = ", "", $str)); $cookieValue = str_replace("_","-",$cookieValue); break; } } if(empty($cookieValue)){ $cookieValue = "1ccite"; } CFormResult::SetField($resultId, "UTM_SOURCE", [$arFieldUtm["ID"]=>$cookieValue]); } } } } } } } |
6. в настройке веб-формы передаем лид и делаем сопоставление свойства лида UTM_SOURCE_COPY полю веб-формы UTM_SOURCE
7. при создании лида делаем обработчик, который тоже размещаем в init.php, который из нашего свойства проставляет UTM-метку
AddEventHandler("crm", "OnBeforeCrmLeadAdd", "MyOnBeforeCrmLeadAdd"); function MyOnBeforeCrmLeadAdd(&$arFields) { if(!empty($arFields["UF_CRM_1640828446"])){ //свойство UTM_SOURCE_COPY $arFields["UTM_SOURCE"] = $arFields["UF_CRM_1640828446"]; } } |
AddEventHandler("crm", "OnAfterCrmLeadAdd", "MyOnAfterCrmLeadAdd"); function MyOnAfterCrmLeadAdd($arFields) { if(!empty($arFields["UF_CRM_1640828446"]) && CModule::IncludeModule("crm")){ $arAnalytics = Bitrix\Crm\Tracking\Provider::getAvailableSources(); if(!empty($arAnalytics)) { foreach($arAnalytics as $analyticId => $arAnalytic) { if(in_array($arFields["UF_CRM_1640828446"],$arAnalytic["UTM_SOURCE"])){ $data = [ 'TRACKING_SOURCE_ID' => $arAnalytic["ID"] //нужная свозная аналитика ]; Bitrix\Crm\Tracking\UI\Details::saveEntityData(CCrmOwnerType::Lead, $arFields["ID"], $data, true); break; } } } } return true; } |