- Модуль: 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;
}