• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_outgoing.php
  • Класс: CVoxImplantOutgoing
  • Вызов: CVoxImplantOutgoing::startCallBack
static function startCallBack($lineSearchId, $number, $textToPronounce, $voice = '', array $customData = array(), $redialAttempt = 0)
{
	$result = new Result();
	CVoxImplantHistory::WriteToLog(Array($lineSearchId, $number, $textToPronounce, $voice), 'startCallBack');

	$line = CVoxImplantConfig::GetLine($lineSearchId);
	if(!$line)
	{
		$result->addError(new Error('Could not find line '.$lineSearchId));
		return $result;
	}

	if($line['TYPE'] === 'REST')
	{
		$lineNumber = mb_substr($line['LINE_NUMBER'], 0, 8) === 'REST_APP' ? '' : $line['LINE_NUMBER'];
		$restAppParams = $customData;
		$restAppParams['APP_ID'] = $line['REST_APP_ID'];
		$restAppParams['LINE_NUMBER'] = $lineNumber;
		$restAppParams['PHONE_NUMBER'] = $number;
		$restAppParams['TEXT'] = $textToPronounce;
		$restAppParams['VOICE'] = $voice;
		VIRestHelper::startCallBack($restAppParams);
		return $result;
	}

	$numberConfig = CVoxImplantConfig::GetConfigBySearchId($lineSearchId);
	if (isset($numberConfig['ERROR']))
	{
		$result->addError(new Error('Could not find config for number '.$lineSearchId));
		return $result;
	}

	$phoneNormalized = CVoxImplantPhone::stripLetters($number);
	if (!$phoneNormalized)
	{
		$result->addError(new Error('Phone number is not correct'));
		return $result;
	}

	$callFields = array(
		'CONFIG_ID' => $numberConfig['ID'],
		'CALLER_ID' => $phoneNormalized,
		'STATUS' => VIModelCallTable::STATUS_CONNECTING,
		'DATE_CREATE' => new FieldTypeDateTime(),
		'INCOMING' => CVoxImplantMain::CALL_CALLBACK,
		'CALLBACK_PARAMETERS' => array(
			'lineSearchId' => $lineSearchId,
			'number' => $number,
			'textToPronounce' => $textToPronounce,
			'voice' => $voice,
			'customData' => $customData,
			'redialAttempt' => $redialAttempt,
		),
		'LAST_PING' => null,
		'QUEUE_ID' => null,
	);

	if(isset($customData['CRM_ENTITY_TYPE']) && isset($customData['CRM_ENTITY_ID']))
	{
		$callFields['CRM_ENTITY_TYPE'] = $customData['CRM_ENTITY_TYPE'];
		$callFields['CRM_ENTITY_ID'] = $customData['CRM_ENTITY_ID'];
	}

	$voice = $voice ?: TtsLanguage::getDefaultVoice(BitrixMainContext::getCurrent()->getLanguage());
	$viHttp = new CVoxImplantHttp();
	$callBackResult = $viHttp->StartCallBack($lineSearchId, $phoneNormalized, $textToPronounce, $voice);

	if($callBackResult === false)
	{
		$result->addError(new Error($viHttp->GetError()->msg, $viHttp->GetError()->code));
	}
	else
	{
		$callId = $callBackResult->call_id;
		$callFields['CALL_ID'] = $callId;
		$call = VICall::create($callFields);

		$result->setData(array(
			'CALL_ID' => $call->getCallId()
		));
	}

	return $result;
}