Обработчики для тикетов модуля техподдержка


стадия с ID 9 - не в рамках договора
при переводе в нее автоматом создается ЛИД в отделе продаж с данными тикета
AddEventHandler("support","OnAfterTicketUpdate","MyOnAfterTicketUpdate");
function MyOnAfterTicketUpdate($arTicket){   
   if($arTicket["STATUS_ID"]==9){
      AddMessage2Log($arTicket);      
      $arFields = [];
      $rsUser = CUser::GetByID(intval($arTicket["OWNER_USER_ID"]));
      if(($arUser = $rsUser->Fetch()) && CModule::IncludeModule("crm")){         
         $lead = new CCrmLead;
         $arFields["TITLE"] = "Из тикета №".$arTicket["ID"]." техподдержки";
         $arFields["ASSIGNED_BY_ID"] = 101;  
         $arFields["STATUS_ID"] = "NEW";
         $arFields["UF_CRM_1628420869530"] = $arTicket["ID"]; //свойство в лиде, где хранится номер тикета
         $arFields["UF_CRM_1602060930"] = 5; //подразделение ОП
         if(!empty($arUser["UF_CRM"])){
            $t = explode("_", $arUser["UF_CRM"]);   
            if($t[0] == "CO"){               
               $arFields["COMPANY_ID"] = $t[1];
            }
            elseif($t[0] == "C"){
               $arFields["CONTACT_ID"] = $t[1];
               $arFields["CONTACT_IDS"] = array($t[1]);
            }            
         }         
         $arFields["COMMENTS"] =  "Дата начала договора: ".$arUser["UF_DATE_CLIENT_START"]."<br>";
         $arFields["COMMENTS"] .= "Дата окончания договора: ".$arUser["UF_DATE_CLIENT_END"]."<br>";
         $arFields["COMMENTS"] .= "Ответственный за тикет: ".$arFields["OWNER_SID"];
         $arFields["COMMENTS"] .= "Описание проблемы: <br>";
         $dbMess = CTicket::GetMessageList("s_id", "asc", array("TICKET_ID" => $arTicket["ID"],"IS_MESSAGE" => "Y"), false, "N");
         
         while($mess = $dbMess->Fetch()){
            // AddMessage2Log($mess);
            $arFields["COMMENTS"] .= $mess["MESSAGE"]."<br>-------------------------<br>";            
         }
         $leadId = $lead->Add($arFields);
         if(!empty($arTicket["RESPONSIBLE_USER_ID"])){
            //добавляем сотрудника ТП как наблюдателя, чтобы можно было быстро уточнить
            $arAdd = array(  
               'ENTITY_TYPE_ID' => CCrmOwnerType::Lead, //
               'ENTITY_ID' => $leadId,
               'USER_ID' => $arTicket["RESPONSIBLE_USER_ID"],
               //'SORT' => '',
               'CREATED_TIME' => new Bitrix\Main\Type\DateTime(),
               'LAST_UPDATED_TIME' => new Bitrix\Main\Type\DateTime()
            );
            $oObserver = \Bitrix\Crm\Observer\Entity\ObserverTable::add($arAdd);
         }

         
      }
   }
}
уведомления ответственному за тикет или главному ответственному техподдержки при изменении тикета
AddEventHandler("support", "OnBeforeSendMailToSupport", "MyOnBeforeSendMailToSupportHandler");
function MyOnBeforeSendMailToSupportHandler($arFields, $is_new){
   
    if(CModule::IncludeModule('im')){ 
       
        if($is_new){
           $message = "Новый тикет: ".$arFields["TITLE"]."[".$arFields["ID"]."]\r\n";   
        }
        else{
           $message = "Изменения в тикете: ".$arFields["TITLE"]."[".$arFields["ID"]."]\r\n";
        }
        
        $message .= $arFields["WHAT_CHANGE"]."\r\n";
        $message .= "От кого: ".$arFields["MESSAGE_SOURCE"]." ".$arFields["MESSAGE_AUTHOR_SID"]." ".$arFields["MESSAGE_AUTHOR_TEXT"]."\r\n";
        if($arFields["MESSAGE_BODY"]){
           $message .= $arFields["MESSAGE_HEADER"]."\r\n";
           $message .= $arFields["MESSAGE_BODY"]."\r\n";
           $message .= $arFields["MESSAGE_FOOTER"]."\r\n";   
        }
        
        $message .= "Ссылка:\r\n";
        $message .= "https://b24.alpha-soft.ru/asupport/".$arFields["ID"]."/"."\r\n";


        
      $userSupport = $arFields["RESPONSIBLE_USER_ID"] ?? 15;           
      
       $arFields = array(
         "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, 
         "TO_USER_ID" => $userSupport,
         "FROM_USER_ID" => 1,
         "MESSAGE" => $message,        

         "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,  # 1 - confirm, 2 - notify single from, 4 - notify single
         "NOTIFY_MODULE" => "main", # module id sender (ex: xmpp, main, etc)
         "NOTIFY_EVENT" => "manage", # module event id for search (ex, IM_GROUP_INVITE)         
      );
      if($is_new){
         $arFields["NOTIFY_TITLE"] = "Новый тикет №".$arFields["ID"];
      }
      else{
         $arFields["NOTIFY_TITLE"] = "Изменения в тикете №".$arFields["ID"];
      }
      
      CIMMessenger::Add($arFields);
   }
}