Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Аналитика - api коробка



crm.tracking.entity.details - компонент, который в карточке crm выводит поле сквозная аналитика
таблицы:
- b_crm_tracking_source - здесь содержатся ID ваших источников сквозной аналитики
- b_crm_tracking_trace_entity - здесь задается привязка сущности к источнику сквозной аналитики
- b_crm_tracking_trace - здесь нужно создать запись о том, что есть переход от источника сквозной аналитики. Затем этот ID будет использоваться в привязке к сущности в таблице b_crm_tracking_trace_entity
получить список источников (справочник)
$arSources = [];
$dbRow = CCrmStatus::GetList(['SORT'=>'asc'], ['ENTITY_ID'=>'SOURCE']);
while ($row = $dbRow->fetch()) {
    $arSources[$row["STATUS_ID"]] = $row["NAME"];
}
получить список сквозной аналитики
$arAnalytics = Bitrix\Crm\Tracking\Internals\SourceTable::getList([
    'select' => [
        'ID', 'NAME'
    ],
    'filter' => [
        //'=ACTIVE' => 'Y'
    ],
    'cache' => ['ttl' => 3600],
])->fetchAll();
получить сквозную аналитику у лида
if($arTracking = Bitrix\Crm\Tracking\Internals\TraceTable::getTraceByEntity(CCrmOwnerType::Lead, $leadId)){   
   $traceId = $arTracking["SOURCE_ID"];
}
получить источник у лида
$arFilter = array(
   "ID"=>31718,  //ID лида 
   "CHECK_PERMISSIONS"=>"N",
);
$arSelect = array(
   "ID",
   "SOURCE_ID",  
);            
$res = CCrmLead::GetListEx(Array(), $arFilter, $arSelect);
if($row = $res->Fetch()){
   $sourceId = $row["SOURCE_ID"];
}

добавить сквозную у лида
\Bitrix\Main\Loader::IncludeModule('crm');
use Bitrix\Crm;
use Bitrix\Crm\Tracking;

$data = [
     'TRACKING_SOURCE_ID' => 2 //нужная свозная аналитика
   ];    
Tracking\UI\Details::saveEntityData(CCrmOwnerType::Lead,$leadId,$data,true);

обновить сквозную у лида
вариант 1. напрямую в БД
if($trackingId = Bitrix\Crm\Tracking\Internals\TraceTable::getTraceIdByEntity(CCrmOwnerType::Lead, $leadId)){
       $DB->StartTransaction();
       $strSql = "UPDATE b_crm_tracking_trace SET SOURCE_ID=29 WHERE ID=".$trackingId." order by DATE_CREATE desc limit 1;"; //sql запрос
       $strSql = $DB->ForSql($strSql); //Подготавливает строку (заменяет кавычки и прочее) для вставки в SQL запрос
       $res1 = $DB->Query($strSql);
       $DB->Commit();
}

вариант 2.
ТП Битрикса написала: Единственное этот код основан на UI в CRM, и возможно может как-то измениться в будущем.
$trace = Tracking\Internals\TraceTable::getRow([
            'select' => ['ID', 'SOURCE_ID'],
            'filter' => ['=ID' => $row['TRACE_ID']]
         ]);
         if ($trace)
         {
            if ($trace['SOURCE_ID'] == $sourceId)
            {
               return;
            }

            Tracking\Internals\TraceTable::update($trace['ID'], ['SOURCE_ID' => $sourceId]);
            return;
}



получить данные по расходам в кабинетах гугл и яндекс
use Bitrix\Main\Type\Date;\Bitrix\Main\Loader::includeModule('seo');

$r = \Bitrix\Seo\Analytics\Service::getAccount('yandex');
$r = $r->getExpenses(null, new Date('01.05.2021'), new Date('05.05.2021'));
$data = $r->getData(); 
print_r($data['expenses']->toArray());
получить данные по расходам, которые были внесены вручную
\Bitrix\Main\Loader::includeModule('crm');
use Bitrix\Crm\Tracking;
      $list = Tracking\Internals\ExpensesPackTable::getList([
         'select' => [
            'ID', 'DATE_INSERT', 'SOURCE_ID', 'DATE_FROM', 'DATE_TO',
            'ACTIONS', 'EXPENSES', 'CURRENCY_ID', 'COMMENT'
         ],
         'filter' => [],
         'limit' => 10,
         'count_total' => false
      ]);
while ($arRs = $list->Fetch()) 
{ 
print_r($arRs);
}
все лиды получить по аналитикам
global $DB;

$sql = "SELECT b_crm_tracking_trace_entity.ENTITY_ID as LEAD_ID, b_crm_tracking_trace.SOURCE_ID as ANALYTIC_ID FROM b_crm_tracking_trace_entity, b_crm_tracking_trace WHERE b_crm_tracking_trace_entity.TRACE_ID = b_crm_tracking_trace.ID AND b_crm_tracking_trace_entity.ENTITY_TYPE_ID=1";
$sql = $DB->ForSql($sql); //Подготавливает строку (заменяет кавычки и прочее) для вставки в SQL запрос

$res = $DB->Query($sql); //выполняет запрос SELECT,INSERT,DELETE,UPDATE
$arResult['LEADS_BY_ANALYTICS'] = [];
while ($row = $res->Fetch()){
  $arResult['LEADS_BY_ANALYTICS'][$row['ANALYTIC_ID']][] = $row['LEAD_ID'];
}
получить UTM_SOURCE метку для каждого из доступных источников сквозной аналитики
\Bitrix\Main\Loader::IncludeModule('crm');
use Bitrix\Crm;
use Bitrix\Crm\Tracking\Provider;

$r = Provider::getAvailableSources(); 
print_r($r);
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!