Найти в Дзене

Как реализовать определение потенциала клиента в CRM Bitrix24

В проекте по внедрению CRM Bitrix24 была задача: Определить потенциал клиента, с установкой статуса данному клиенту, чтобы менеджеры понимали с кем нужно проводить работу, дожать. Потенциалы следующие:
Топ – отгрузка 1 раз в 2 недели;
Высокий – отгрузка 1 раз в месяц;
Средний – отгрузка 1 раз в квартал;
Низкий – отгрузка 1 раз в пол года. Если клиенту «Топ» не было отгрузок 2 недели – статус клиента менять с «Работаем» на «Получить заявку/дожать». Как я решил задачу? Сначала я создал два дополнительных поля в сущности клиента, "Статус клиента" (Топ, Высокий, Средний, Низкий) и "Потенциал" (Работаем, Дожать) Далее в init.php добавил функцию по определению потенциала, скрипт перебирает всех клиентов, изучает периодичность заказов и устанавливает соответсвующий потенциал и статус клиента. function updatePotential()
{
if(CModule::IncludeModule("crm"))
{
$arFilter = array("CHECK_PERMISSIONS"=>"N", /*"COMPANY_TYPE" => "CUSTOMER"*/);
$arSelect = array("ID", "COMPANY_TYPE",

В проекте по внедрению CRM Bitrix24 была задача: Определить потенциал клиента, с установкой статуса данному клиенту, чтобы менеджеры понимали с кем нужно проводить работу, дожать.

Потенциалы следующие:
Топ – отгрузка 1 раз в 2 недели;
Высокий – отгрузка 1 раз в месяц;
Средний – отгрузка 1 раз в квартал;
Низкий – отгрузка 1 раз в пол года.

Поле "Потенциал", тип список
Поле "Потенциал", тип список

Если клиенту «Топ» не было отгрузок 2 недели – статус клиента менять с «Работаем» на «Получить заявку/дожать».

Поле "Статус клиента", тип список
Поле "Статус клиента", тип список

Как я решил задачу?

Сначала я создал два дополнительных поля в сущности клиента, "Статус клиента" (Топ, Высокий, Средний, Низкий) и "Потенциал" (Работаем, Дожать)

Далее в init.php добавил функцию по определению потенциала, скрипт перебирает всех клиентов, изучает периодичность заказов и устанавливает соответсвующий потенциал и статус клиента.

function updatePotential()
{
if(CModule::IncludeModule("crm"))
{
$arFilter = array("CHECK_PERMISSIONS"=>"N", /*"COMPANY_TYPE" => "CUSTOMER"*/);
$arSelect = array("ID", "COMPANY_TYPE","UF_CRM_1724664577221","UF_CRM_1725281426546");
$rsCompany = CCrmCompany::GetList(Array(),$arFilter,$arSelect);
$CCrmCompany = new \CCrmCompany(false);
$arFieldsTop = array("UF_CRM_1724664577221" => 40, "UF_CRM_1725281426546" => 51);
$arFieldsHigh = array("UF_CRM_1724664577221" => 41, "UF_CRM_1725281426546" => 52);
$arFieldsMedium = array("UF_CRM_1724664577221" => 42, "UF_CRM_1725281426546" => 52);
$arFieldsLow = array("UF_CRM_1724664577221" => 43, "UF_CRM_1725281426546" => 52);
while($arCompany = $rsCompany->Fetch()){
$updateCompany=array();
$rsDeal = CCrmDeal::GetList(array(), array("COMPANY_ID" => $arCompany["ID"], '>UF_CRM_1724956662466' => date("d.m.Y H:i:s",strtotime('-2 week'))), array("ID","UF_CRM_1724956662466"));
if($ob = $rsDeal->Fetch()){if($arCompany["UF_CRM_1724664577221"] != 40)$updateCompany = $CCrmCompany->Update($arCompany["ID"],$arFieldsTop);}
else{
$rsDeal = CCrmDeal::GetList(array(), array("COMPANY_ID" => $arCompany["ID"], '>UF_CRM_1724956662466' => date("d.m.Y H:i:s",strtotime('-1 months'))), array("ID","UF_CRM_1724956662466"));
if($ob = $rsDeal->Fetch()){if($arCompany["UF_CRM_1724664577221"] != 41)$updateCompany = $CCrmCompany->Update($arCompany["ID"],$arFieldsHigh);}
else{
$rsDeal = CCrmDeal::GetList(array(), array("COMPANY_ID" => $arCompany["ID"], '>UF_CRM_1724956662466' => date("d.m.Y H:i:s",strtotime('-3 months'))), array("ID","UF_CRM_1724956662466"));
if($ob = $rsDeal->Fetch()){if($arCompany["UF_CRM_1724664577221"] != 42)$updateCompany = $CCrmCompany->Update($arCompany["ID"],$arFieldsMedium);}
else{
$rsDeal = CCrmDeal::GetList(array(), array("COMPANY_ID" => $arCompany["ID"], '>UF_CRM_1724956662466' => date("d.m.Y H:i:s",strtotime('-6 months'))), array("ID","UF_CRM_1724956662466"));
if($ob = $rsDeal->Fetch()){if($arCompany["UF_CRM_1724664577221"] != 43)$updateCompany = $CCrmCompany->Update($arCompany["ID"],$arFieldsLow);}

}
}
}
}
}
return "updatePotential();";
}

Следующим этапом создал агента, который запускается вечером и утром.

-3

Вот такое решение я придумал, уверен, что код можно его оптимизировать, я еще учусь)) Если Вам помогла моя статья или можете предложить другое решение задачи, обязательно пишите в комментариях, для меня это важно!