- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_outgoing.php
- Класс: CVoxImplantOutgoing
- Вызов: CVoxImplantOutgoing::Init
static function Init($params)
{
$config = CVoxImplantConfig::GetConfig($params['CONFIG_ID']);
if ($params['CALL_ID'])
{
$call = VICall::load($params['CALL_ID']);
if($call)
{
$callFields = [
'CONFIG_ID' => $params['CONFIG_ID'],
'CRM' => $params['CRM'],
'USER_ID' => $params['USER_ID'],
'CALLER_ID' => $params['PHONE_NUMBER'],
'STATUS' => VIModelCallTable::STATUS_WAITING,
'ACCESS_URL' => $params['ACCESS_URL'],
'PORTAL_NUMBER' => $config['SEARCH_ID'],
];
if($params['CRM_ENTITY_TYPE'] && $params['CRM_ENTITY_ID'])
{
$callFields['CRM_ENTITY_TYPE'] = $params['CRM_ENTITY_TYPE'];
$callFields['CRM_ENTITY_ID'] = $params['CRM_ENTITY_ID'];
}
if($params['CRM_ACTIVITY_ID'])
{
$callFields['CRM_ACTIVITY_ID'] = $params['CRM_ACTIVITY_ID'];
}
if($params['CRM_CALL_LIST'])
{
$callFields['CRM_CALL_LIST'] = $params['CRM_CALL_LIST'];
}
if(is_array($params['CRM_BINDINGS']))
{
$callFields['CRM_BINDINGS'] = $params['CRM_BINDINGS'];
}
if($params['SESSION_ID'])
{
$callFields['SESSION_ID'] = (int)$params['SESSION_ID'];
}
$call->update($callFields);
}
}
if (!$call)
{
$call = VICall::create([
'INCOMING' => CVoxImplantMain::CALL_OUTGOING,
'CONFIG_ID' => $params['CONFIG_ID'],
'CALL_ID' => $params['CALL_ID'],
'SESSION_ID' => (int)$params['SESSION_ID'],
'CRM' => $params['CRM'],
'CRM_ACTIVITY_ID' => $params['CRM_ACTIVITY_ID'] ?? null,
'CRM_CALL_LIST' => $params['CRM_CALL_LIST'] ?? null,
'CRM_BINDINGS' => $params['CRM_BINDINGS'] ?? [],
'USER_ID' => $params['USER_ID'],
'CALLER_ID' => $params['PHONE_NUMBER'],
'STATUS' => VIModelCallTable::STATUS_WAITING,
'ACCESS_URL' => $params['ACCESS_URL'],
'DATE_CREATE' => new FieldTypeDateTime(),
'PORTAL_NUMBER' => $config['SEARCH_ID'],
'LAST_PING' => null,
'QUEUE_ID' => null,
]);
}
$call->addUsers([$params['USER_ID']], VIModelCallUserTable::ROLE_CALLER, VIModelCallUserTable::STATUS_CONNECTED);
if((string)$params['CRM_ENTITY_TYPE'] !== '' && $params['CRM_ENTITY_ID'] > 0)
{
$entity = [
'ENTITY_TYPE' => (string)$params['CRM_ENTITY_TYPE'],
'ENTITY_ID' => $params['CRM_ENTITY_ID'],
'IS_PRIMARY' => 'Y',
'IS_CREATED' => 'N'
];
$call->updateCrmEntities([$entity]);
}
$router = new VIRoutingRouter($call);
$firstAction = $router->getNextAction();
if (
in_array($firstAction->getCommand(), [VIRoutingCommand::INVITE, VIRoutingCommand::BUSY], true)
|| ($firstAction->getCommand() === VIRoutingCommand::HANGUP && isset($firstAction->getParameters()['USERS']))
)
{
// looks like internal call
$queueFields = $firstAction->getParameter('QUEUE');
if ($queueFields)
{
}
else
{
$firstUser = $firstAction->getParameter('USERS')[0];
$call->updatePortalUserId($firstUser['USER_ID']);
}
}
if (!$call->isInternalCall())
{
if($call->getPrimaryEntityType() && $call->getPrimaryEntityId())
{
//nop
}
else
{
$crmEntities = CVoxImplantCrmHelper::getCrmEntities($call);
$call->updateCrmEntities($crmEntities);
}
$activityBindings = CVoxImplantCrmHelper::getActivityBindings($call);
if(is_array($activityBindings))
{
$call->updateCrmBindings($activityBindings);
}
CVoxImplantCrmHelper::registerCallInCrm($call);
}
$call->getSignaling()->sendOutgoing($call->getUserId(), $params['CALL_DEVICE']);
return $firstAction;
}