• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/voximplant/eventhandler.php
  • Класс: Bitrix\Crm\Integration\VoxImplant\EventHandler
  • Вызов: EventHandler::onCallRegisteredInCrm
static function onCallRegisteredInCrm(Event $event): void
{
	$data = $event->getParameters();
	$isIncoming = !isset($data['INCOMING'])
		|| in_array((int)$data['INCOMING'], [CVoxImplantMain::CALL_INCOMING, CVoxImplantMain::CALL_INCOMING_REDIRECT], true);

	if (empty($data) || empty($data['CRM_DATA']) || !$isIncoming)
	{
		return; // nothing event data
	}

	if (isset($data['CALL_ID']))
	{
		$logMessageId = LogMessageEntry::detectIdByParams(
			$data['CALL_ID'],
			LogMessageType::CALL_INCOMING
		);
		if (isset($logMessageId))
		{
			return; // record already created
		}
	}

	$createdEntities = array_values(
		array_filter(
			$data['CRM_DATA'],
			static fn($row) => in_array((int)$row['OWNER_TYPE_ID'], [CCrmOwnerType::Lead, CCrmOwnerType::Deal], true)
		)
	);
	$baseEntities = array_values(
		array_filter(
			$data['CRM_DATA'],
			static fn($row) => in_array((int)$row['OWNER_TYPE_ID'], [CCrmOwnerType::Contact, CCrmOwnerType::Company], true)
		)
	);

	if (empty($createdEntities))
	{
		return;
	}

	$input = [
		"ENTITY_TYPE_ID" => $createdEntities[0]['OWNER_TYPE_ID'],
		"ENTITY_ID" => $createdEntities[0]['OWNER_ID'],
	];

	if (!empty($baseEntities))
	{
		$input['BASE_ENTITY_TYPE_ID'] = $baseEntities[0]['OWNER_TYPE_ID'];
		$input['BASE_ENTITY_ID'] = $baseEntities[0]['OWNER_ID'];

		if (isset($data['CALLER_ID']))
		{
			$input['BASE_SOURCE'] = $data['CALLER_ID'];
		}

		if (isset($data['CALL_ID']))
		{
			$input['BASE_SOURCE_ID'] = $data['CALL_ID'];
		}
	}

	LogMessageController::getInstance()->onCreate(
		$input,
		LogMessageType::CALL_INCOMING,
		$data['USER_ID'] ?? null
	);
}