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

Уведомление о пропущенном и время первого исходящего звонка



Задача:
1. В поле лида положить время первого звонка менеджера
2. Присылать уведомление о пропущенном звонке всем сотрудникам того же департамента (для определенных департаментов), в котором находится ответственный за лид или контакт.
AddEventHandler("voximplant", "onCallEnd", "MyOnCallEnd");
function MyOnCallEnd($data){
    if(!empty($data["CALL_ID"])&&!empty($data["CALL_TYPE"])&&($data["CALL_TYPE"]==1) && CModule::IncludeModule('voximplant')){//если исходящий
        $arCalls = Bitrix\Voximplant\StatisticTable::getList([
            "select" => ["ID","CRM_ENTITY_ID","CRM_ENTITY_TYPE"],
            "filter" => [
                "CALL_ID"=> $data["CALL_ID"]
            ],
            "order" => ['ID' => 'DESC'],
            "limit" => 1
        ])->fetchAll();
        foreach($arCalls as $arCall){
            if(in_array($arCall["CRM_ENTITY_TYPE"],["LEAD","CONTACT"]) && CModule::IncludeModule('crm') ){
                $arFilter = [
                    "UF_CRM_1668703501" =>false,
                    ">DATE_CREATE" => "18.11.2022", //с какого числа начали записывать
                    "CHECK_PERMISSIONS"=>"N" //не проверять права доступа текущего пользователя
                ];

                if($arCall["CRM_ENTITY_TYPE"]=="LEAD"){
                    $arFilter["ID"] = $arCall["CRM_ENTITY_ID"];
                }
                elseif($arCall["CRM_ENTITY_TYPE"]=="CONTACT"){
                    $arFilter["CONTACT_ID"] = $arCall["CRM_ENTITY_ID"];
                }

                $arSelect =["ID"];
                $res = CCrmLead::GetList(Array(), $arFilter, $arSelect);
                $lead  =  new  \CCrmLead( false );
                while($arLead = $res->Fetch()){

                    $arUpdateData = array(
                        "UF_CRM_1668703501" => $data["CALL_START_DATE"]->format("d.m.Y H:i:s")
                    );
                    $arOptions = array();
                    $upRes = $lead->Update($arLead["ID"], $arUpdateData, true, true, $arOptions);
                }
            }
        }
    }
    if(($data["CALL_TYPE"]==2)&& ($data["CALL_FAILED_CODE"]==304)&& CModule::IncludeModule('intranet') && CModule::IncludeModule('im')&&CModule::IncludeModule('voximplant')){
        $arCalls = Bitrix\Voximplant\StatisticTable::getList([
            "select" => ["ID","CRM_ENTITY_ID","CRM_ENTITY_TYPE"],
            "filter" => [
                "CALL_ID"=> $data["CALL_ID"]
            ],
            "order" => ['ID' => 'DESC'],
            "limit" => 1
        ])->fetchAll();
        foreach($arCalls as $arCall){
            $notifyMessage = "";
            if(in_array($arCall["CRM_ENTITY_TYPE"],["LEAD","CONTACT"]) && CModule::IncludeModule('crm') ){
                $arFilter = [
                    "CHECK_PERMISSIONS"=>"N", //не проверять права доступа текущего пользователя
                    "ID" => $arCall["CRM_ENTITY_ID"]
                ];
                $arSelect =["ID","ASSIGNED_BY_ID"];
                if($arCall["CRM_ENTITY_TYPE"]=="LEAD"){
                    $res = CCrmLead::GetListEx(Array(), $arFilter, $arSelect);
                    $arEntity = $res->Fetch();
                    $notifyMessage = "У  [URL=https://bitrix.nebojump.ru/crm/lead/details/".$arEntity["ID"]."/] Лида №".$arEntity["ID"]."[/URL] пропущен звонок";
                }
                elseif($arCall["CRM_ENTITY_TYPE"]=="CONTACT"){
                    $res = CCrmContact::GetListEx(Array(), $arFilter, $arSelect);
                    $arEntity = $res->Fetch();
                    $notifyMessage = "У  [URL=https://bitrix.nebojump.ru/crm/contact/details/".$arEntity["ID"]."/] Контакта №".$arEntity["ID"]."[/URL] пропущен звонок";
                }


            }
        }
        if(!empty($arEntity["ASSIGNED_BY_ID"])){

            $arDepartments = CIntranetUtils::GetUserDepartments($arEntity["ASSIGNED_BY_ID"]);
            if(!empty($arDepartments)){
                $needDepartments = [1609, 1610, 1611, 1612, 1242, 1292, 181, 183];
                $arDepartmentsFilter = [];
      foreach($arDepartments as $departmentId){
                    if(in_array($departmentId,$needDepartments)){
                        $arDepartmentsFilter[]=$departmentId;
                    }
                }

      if(!empty($arDepartmentsFilter)){

                    $rsUsers = CIntranetUtils::GetDepartmentEmployees($arDepartmentsFilter);
                    while($arUser = $rsUsers->fetch()){
                        if($arUser["ID"] != $data["PORTAL_USER_ID"]){
                            $arFields = array(
                                "NOTIFY_TITLE" => "Пропущенный звонок от ".$data["PHONE_NUMBER"], //заголовок
                                "MESSAGE" => $notifyMessage,
                                "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, // IM_MESSAGE_PRIVATE, IM_MESSAGE_CHAT, IM_MESSAGE_OPEN, IM_MESSAGE_SYSTEM, IM_MESSAGE_OPEN_LINE
                                "TO_USER_ID" => $arUser["ID"],
                                "FROM_USER_ID" => $arUser["ID"],
                                //"AUTHOR_ID" => $userIdOther, //может отличаться от FROM_USER_ID

                                "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,  // IM_NOTIFY_CONFIRM, IM_NOTIFY_SYSTEM, IM_NOTIFY_FROM
                                "NOTIFY_MODULE" => "main", // module id sender (ex: xmpp, main, etc)
                                "NOTIFY_EVENT" => "manage",
                            );
                            CIMMessenger::Add($arFields);
                        }
                    }
                }
      }
        }
    }
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

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