Обучаю битриксу программистов, интеграторов

Cоздавать лид по входящему звонку, который прикрепился к сделке

Задача: Есть сделка. Cоздавать лид на менеджера по входящему звонку,  который прикрепился к сделке, если лида нет, если лид есть, то писать инфу о звонке туда

Облачный Битрикс24
настроила
  • исходящий вебхук на ONVOXIMPLANTCALLEND
  • входящий вебхук с доступом к CRM
тут описано как создать вебхук

function CurlBitrix24($method, $arData=array()){
   $queryUrl = "https://nikaverro.bitrix24.ru/rest/[userId]/[код]/".$method;   
   $curl = curl_init();
   curl_setopt_array($curl,[
      CURLOPT_URL => $queryUrl,
      CURLOPT_SSL_VERIFYPEER => 0,
      CURLOPT_POST => 1,
      CURLOPT_HEADER => 0,
      CURLOPT_RETURNTRANSFER => 1,      
   ]);
   if(!empty($arData)){
      curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arData));
   }
   $result = curl_exec($curl);         
   curl_close($curl);
   return json_decode($result,true);
}


if(isset($_REQUEST['event']) && ($_REQUEST['event']=="ONVOXIMPLANTCALLEND") && in_array($_REQUEST['data']["CALL_TYPE"],[2,3])){ //CALL_TYPE 2 - входящий, 3 Входящий с перенаправлением (на мобильный или стационарный телефон).
   $activityId = $_REQUEST['data']["CRM_ACTIVITY_ID"];
   $phone = $_REQUEST['data']["PHONE_NUMBER"];
   $code = $_REQUEST['data']['CALL_FAILED_CODE'];

   $result = CurlBitrix24('crm.activity.get.json', array(
      'id' => $activityId,    
   ));   

   if(!empty($result["result"]["OWNER_TYPE_ID"]) && $result["result"]["OWNER_TYPE_ID"]==2){//если активити-собственник сделка
      //если есть лиды в работе
      $dealId = $result["result"]["OWNER_ID"];

      sleep(2);
      $batch = [];
      $batch["leads"] = 'crm.lead.list?'.http_build_query([
        'order' => ["ID" => "ASC"],
        'filter' => [
            'STATUS_ID' => ["NEW", "IN_PROCESS",1],      
            "UF_CRM_1648053268" => "D_".$dealId
         ],  
         "select" => ["ID","STATUS_ID"],   

      ]);
      $batch["deal"] = "crm.deal.get?id=".$dealId;
      $arData = [
          "halt" => 0,
          "cmd" => $batch
      ];
      $result2 = CurlBitrix24("batch.json", $arData);


      $arCodes = [
         "200" => "Успешный звонок",
         "304" => "Пропущенный звонок",
         "603" => "Отклонено",
         "603-S"=> "Вызов отменен",
         "404" => "Неверный номер",
         "486" => "Занято",
         "484" => "Данное направление не доступно",
         "503" => "Данное направление не доступно",
         "480" => "Временно не доступен",
         "480" => "Недостаточно средств на счете",
         "402" => "Заблокировано",
      ];
      

      if($result2["result"]["result_total"]["leads"]>0){//если есть
         $leadId = $result2["result"]["result"]["leads"][0]["ID"];
         //echo $leadId;
         
         $batch = [];
         
         if($code == 200){
            $title = "Успешный звонок по текущей сделке";
         }
         elseif($code == 304){
            $title = "Пропущенный звонок по текущей сделке";
         }
         else{
            $title = "Звонок по текущей сделке:". $arCodes[$code];
         }
         $batch["comment_add"] = 'crm.timeline.comment.add?' . http_build_query([
            "fields" => [
               "ENTITY_ID" => $leadId,
               "ENTITY_TYPE"=> "lead",
               "COMMENT"=> $title
            ]
         ]);
         
         if($result2["result"]["result"]["leads"][0]["STATUS_ID"]!="NEW"){
            $batch["lead_status_new"] = 'crm.lead.update?' . http_build_query([
               "id" => $leadId,
               "fields" => [
                  "STATUS_ID" => "NEW"            
               ]
            ]);
         }
         $arData = [
             "halt" => 0,
             "cmd" => $batch
         ];   
         sleep(2);                        
         $result = CurlBitrix24("batch.json", $arData);         

      }
      else{
         //создаем лид по звонку
         $userId = $result2["result"]["result"]["deal"]["ASSIGNED_BY_ID"]; //на кого сделка
         $title = "Лид по текущей сделке";
         if($code == 200){
            $title .= " усп. звонок";
         }
         elseif($code == 304){
            $title .= " пропущ. звонок";
         }

         $arFields = [
            "TITLE" => $title,
            "STATUS_ID" => "NEW", 
            "ASSIGNED_BY_ID" => $userId ?? 44,//$result["result"]["RESPONSIBLE_ID"], 
            "UF_CRM_1648053268" => "D_".$dealId,
            "PHONE" => [ ["VALUE"=> $phone, "VALUE_TYPE"=> "WORK" ] ],
            "COMMENTS"=> $arCodes[$code] ?? "неизвестный статус"
         ];
         
         sleep(2);
         $result = CurlBitrix24('crm.lead.add.json', array(
            'fields' => $arFields, 
            'params' => array("REGISTER_SONET_EVENT" => "Y")
         ));  
      }


       
   }

}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

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