• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_outgoing.php
  • Класс: CVoxImplantOutgoing
  • Вызов: CVoxImplantOutgoing::StartCall
static function StartCall($userId, $phoneNumber, $params)
{
	$phoneNormalized = CVoxImplantPhone::Normalize($phoneNumber);
	if (!$phoneNormalized)
	{
		$phoneNormalized = preg_replace("/[^0-9#*]/i", "", $phoneNumber);
	}

	$userId = intval($userId);
	if ($userId <= 0 || !$phoneNormalized)
		return false;

	$additionalParams = array();
	if(isset($params['LINE_ID']))
	{
		$additionalParams['LINE_ID'] = $params['LINE_ID'];
	}

	$viHttp = new CVoxImplantHttp();
	$result = $viHttp->StartOutgoingCall($userId, $phoneNumber, $additionalParams);
	if(!$result)
	{
		return array(
			'ERROR' => $viHttp->GetError()->msg
		);
	}

	$config = self::GetConfigByUserId($userId);
	$callFields = array(
		'CALL_ID' =>  $result->call_id,
		'CONFIG_ID' => $config['ID'],
		'USER_ID' => $userId,
		'INCOMING' => CVoxImplantMain::CALL_OUTGOING,
		'CALLER_ID' => $phoneNormalized,
		'ACCESS_URL' => $result->access_url,
		'STATUS' => VIModelCallTable::STATUS_WAITING,
		'DATE_CREATE' => new FieldTypeDateTime(),
		'LAST_PING' => null,
		'QUEUE_ID' => null
	);

	if(isset($params['SRC_ACTIVITY_ID']))
	{
		$callFields['CRM_ACTIVITY_ID'] = $params['SRC_ACTIVITY_ID'];
	}
	if(isset($params['CALL_LIST_ID']))
	{
		$callFields['CRM_CALL_LIST'] = $params['CALL_LIST_ID'];
	}

	$call = VICall::create($callFields);
	$call->addUsers([$userId], VIModelCallUserTable::ROLE_CALLEE, VIModelCallUserTable::STATUS_INVITING);

	$crmEntities = [];
	if(isset($params['ENTITY_TYPE']) && isset($params['ENTITY_ID']) && mb_strpos($params['ENTITY_TYPE'], 'CRM_') === 0)
	{
		$crmEntities[] = [
			'ENTITY_TYPE' => mb_substr($params['ENTITY_TYPE'], 4),
			'ENTITY_ID' => $params['ENTITY_ID'],
			'IS_PRIMARY' => 'Y',
			'IS_CREATED' => 'N'
		];
	}
	if(isset($params['ENTITY_TYPE_NAME']) && isset($params['ENTITY_ID']))
	{
		$crmEntities[] = [
			'ENTITY_TYPE' => $params['ENTITY_TYPE_NAME'],
			'ENTITY_ID' => $params['ENTITY_ID'],
			'IS_PRIMARY' => 'Y',
			'IS_CREATED' => 'N'
		];
	}
	$call->updateCrmEntities($crmEntities);

	return array(
		'USER_ID' => $userId,
		'PHONE_NUMBER' => $phoneNormalized,
		'CALL_ID' => $call->getCallId(),
		'CALL_DEVICE' => 'PHONE',
		'EXTERNAL' => true,
		'CONFIG' => CVoxImplantConfig::getConfigForPopup($call->getCallId()),
	);
}