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); |