示例#1
0
     if (CVoxImplantUser::GetPhoneActive($USER->GetId())) {
         CVoxImplantOutgoing::StartCall($USER->GetId(), $_POST['PARAMS']['NUMBER']);
     }
 } else {
     if ($_POST['COMMAND'] == 'deviceHungup') {
         $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
         CVoxImplantIncoming::SendCommand(array('CALL_ID' => $_POST['PARAMS']['CALL_ID'], 'COMMAND' => CVoxImplantIncoming::RULE_HUNGUP));
     } else {
         if ($_POST['COMMAND'] == 'wait') {
             $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
             CVoxImplantIncoming::SendCommand(array('CALL_ID' => $_POST['PARAMS']['CALL_ID'], 'COMMAND' => CVoxImplantIncoming::RULE_WAIT));
         } else {
             if ($_POST['COMMAND'] == 'answer') {
                 $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
                 CVoxImplantIncoming::SendCommand(array('CALL_ID' => $_POST['PARAMS']['CALL_ID'], 'COMMAND' => CVoxImplantIncoming::RULE_WAIT));
                 CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'answer_self', 'USER_ID' => $userId, 'CALL_ID' => $_POST['PARAMS']['CALL_ID']));
                 if (CModule::IncludeModule('im')) {
                     CIMStatus::SetIdle($userId, false);
                 }
             } else {
                 if ($_POST['COMMAND'] == 'skip') {
                     $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
                     CVoxImplantIncoming::SendCommand(array('CALL_ID' => $_POST['PARAMS']['CALL_ID'], 'COMMAND' => CVoxImplantIncoming::RULE_QUEUE));
                 } else {
                     if ($_POST['COMMAND'] == 'start') {
                         $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
                         CVoxImplantMain::CallStart($_POST['PARAMS']['CALL_ID'], $userId);
                     } else {
                         if ($_POST['COMMAND'] == 'hold' || $_POST['COMMAND'] == 'unhold') {
                             $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']);
                             CVoxImplantMain::CallHold($_POST['PARAMS']['CALL_ID'], $_POST['COMMAND'] == 'hold');
示例#2
0
 public static function RegisterEntity($params)
 {
     if (!CModule::IncludeModule('crm')) {
         return false;
     }
     $callId = $params['ORIGIN_ID'];
     $callerId = '';
     if (substr($callId, 0, 3) == 'VI_') {
         $callId = substr($callId, 3);
     }
     $res = VI\CallTable::getList(array('filter' => array('=CALL_ID' => $callId)));
     if ($call = $res->fetch()) {
         $callerId = $call['CALLER_ID'];
         CVoxImplantCrmHelper::AddCall(array('CALL_ID' => $call['CALL_ID'], 'PHONE_NUMBER' => $call['CALLER_ID'], 'INCOMING' => $call['INCOMING'], 'USER_ID' => $call['USER_ID'], 'DATE_CREATE' => $call['DATE_CREATE']));
         if ($call['USER_ID'] > 0) {
             $crmData = CVoxImplantCrmHelper::GetDataForPopup($callId, $call['CALLER_ID'], $call['USER_ID']);
             $pullResult = CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'update_crm', 'USER_ID' => $call['USER_ID'], 'CALL_ID' => $callId, 'CALLER_ID' => $callerId, 'CRM' => $crmData));
         }
         CVoxImplantHistory::WriteToLog(array($callId, $call), 'CRM ATTACH INIT CALL');
     } else {
         $res = VI\StatisticTable::getList(array('filter' => array('=CALL_ID' => $callId)));
         if ($history = $res->fetch()) {
             $history['USER_ID'] = $history['PORTAL_USER_ID'];
             $history['DATE_CREATE'] = $history['CALL_START_DATE'];
             CVoxImplantCrmHelper::AddCall(array('CALL_ID' => $history['CALL_ID'], 'PHONE_NUMBER' => $history['PHONE_NUMBER'], 'INCOMING' => $history['INCOMING'] == CVoxImplantMain::CALL_OUTGOING ? CVoxImplantMain::CALL_OUTGOING : CVoxImplantMain::CALL_INCOMING, 'USER_ID' => $history['USER_ID'], 'DATE_CREATE' => $history['DATE_CREATE']));
             CVoxImplantCrmHelper::UpdateCall($history);
             CVoxImplantCrmHelper::AttachRecordToCall(array('CALL_ID' => $history['CALL_ID'], 'CALL_WEBDAV_ID' => $history['CALL_WEBDAV_ID'], 'CALL_RECORD_ID' => $history['CALL_RECORD_ID']));
             CVoxImplantHistory::WriteToLog(array($callId), 'CRM ATTACH FULL CALL');
         }
     }
     return true;
 }
示例#3
0
 public static function Init($params)
 {
     $result['STATUS'] = 'OK';
     $result['PORTAL_CALL'] = 'N';
     if (strlen($params['PHONE_NUMBER']) > 0 && strlen($params['PHONE_NUMBER']) <= 4) {
         $res = CVoxImplantUser::GetList(array('select' => array('ID', 'IS_ONLINE_CUSTOM', 'UF_VI_PHONE', 'ACTIVE'), 'filter' => array('=UF_PHONE_INNER' => intval($params['PHONE_NUMBER']), '=ACTIVE' => 'Y')));
         if ($userData = $res->fetch()) {
             $result['PORTAL_CALL'] = 'Y';
             $result['USER_ID'] = $userData['ID'];
             $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP;
             if (CModule::IncludeModule('pull')) {
                 $orm = \Bitrix\Pull\PushTable::getList(array('select' => array('ID'), 'filter' => array('=USER_ID' => $userData['ID'])));
                 $userData['USER_HAVE_MOBILE'] = $orm->fetch() ? 'Y' : 'N';
             } else {
                 $userData['USER_HAVE_MOBILE'] = 'N';
             }
             if ($userData['ID'] == $params['USER_ID']) {
                 $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP;
             } else {
                 if ($userData['IS_ONLINE_CUSTOM'] == 'Y' || $userData['UF_VI_PHONE'] == 'Y' || $userData['USER_HAVE_MOBILE'] == 'Y') {
                     $result['COMMAND'] = CVoxImplantIncoming::RULE_WAIT;
                     $result['TYPE_CONNECT'] = CVoxImplantIncoming::TYPE_CONNECT_DIRECT;
                     $result['USER_HAVE_PHONE'] = $userData['UF_VI_PHONE'] == 'Y' ? 'Y' : 'N';
                     $result['USER_HAVE_MOBILE'] = $userData['USER_HAVE_MOBILE'];
                     $result['USER_SHORT_NAME'] = '';
                 }
             }
         }
     }
     $callAdd = true;
     if ($params['CALL_ID_TMP']) {
         $res = VI\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID_TMP'])));
         if ($call = $res->fetch()) {
             $res = VI\CallTable::update($call['ID'], array('CONFIG_ID' => $params['CONFIG_ID'], 'CALL_ID' => $params['CALL_ID'], 'CRM' => $params['CRM'], 'USER_ID' => $params['USER_ID'], 'CALLER_ID' => $params['PHONE_NUMBER'], 'STATUS' => VI\CallTable::STATUS_CONNECTING, 'ACCESS_URL' => $params['ACCESS_URL'], 'PORTAL_USER_ID' => $result['PORTAL_CALL'] == 'Y' ? $result['USER_ID'] : 0));
             if ($res) {
                 $callAdd = false;
             }
         }
     }
     if ($callAdd) {
         VI\CallTable::add(array('CONFIG_ID' => $params['CONFIG_ID'], 'CALL_ID' => $params['CALL_ID'], 'CRM' => $params['CRM'], 'USER_ID' => $params['USER_ID'], 'CALLER_ID' => $params['PHONE_NUMBER'], 'STATUS' => VI\CallTable::STATUS_CONNECTING, 'ACCESS_URL' => $params['ACCESS_URL'], 'PORTAL_USER_ID' => $result['PORTAL_CALL'] == 'Y' ? $result['USER_ID'] : 0, 'DATE_CREATE' => new FieldType\DateTime()));
     }
     $config = self::GetConfigByUserId($params['USER_ID']);
     if ($params['CRM'] == 'Y' && $result['PORTAL_CALL'] == 'N') {
         if ($config['CRM_CREATE'] == CVoxImplantConfig::CRM_CREATE_LEAD) {
             $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['PHONE_NUMBER']);
             if ($crmData['FOUND'] == 'N') {
                 CVoxImplantCrmHelper::AddLead(array('USER_ID' => $params['USER_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'SEARCH_ID' => $config['SEARCH_ID'], 'CRM_SOURCE' => $config['CRM_SOURCE'], 'INCOMING' => false));
             }
         }
         CVoxImplantCrmHelper::AddCall(array('CALL_ID' => $params['CALL_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'INCOMING' => CVoxImplantMain::CALL_OUTGOING, 'USER_ID' => $params['USER_ID'], 'DATE_CREATE' => new FieldType\DateTime()));
         $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['PHONE_NUMBER'], $params['USER_ID']);
     } else {
         $crmData = array();
     }
     CVoxImplantHistory::WriteToLog(array('COMMAND' => 'outgoing', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'], 'CALL_DEVICE' => $params['CALL_DEVICE'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'EXTERNAL' => $params['CALL_ID_TMP'] ? true : false, 'PORTAL_CALL' => $result['PORTAL_CALL'], 'PORTAL_CALL_USER_ID' => $params['USER_ID'], 'CRM' => $crmData));
     $portalUser = array();
     if ($result['PORTAL_CALL'] == 'Y') {
         if (CModule::IncludeModule('im')) {
             $portalUser = CIMContactList::GetUserData(array('ID' => array($params['USER_ID'], $result['USER_ID']), 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
         } else {
             $portalUser = array();
         }
     }
     self::SendPullEvent(array('COMMAND' => 'outgoing', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'], 'CALL_DEVICE' => $params['CALL_DEVICE'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'EXTERNAL' => $params['CALL_ID_TMP'] ? true : false, 'PORTAL_CALL' => $result['PORTAL_CALL'], 'PORTAL_CALL_USER_ID' => $result['USER_ID'], 'PORTAL_CALL_DATA' => $portalUser, 'CONFIG' => array('RECORDING' => $config['RECORDING'], 'CRM_CREATE' => $config['CRM_CREATE']), 'CRM' => $crmData));
     if ($result['PORTAL_CALL'] == 'Y' && $result['USER_ID'] > 0) {
         CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'invite', 'USER_ID' => $result['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['USER_DIRECT_CODE'], 'PHONE_NAME' => $params['CALLER_ID'], 'PORTAL_CALL' => 'Y', 'PORTAL_CALL_USER_ID' => $params['USER_ID'], 'PORTAL_CALL_DATA' => $portalUser, 'CONFIG' => array('RECORDING' => $config['RECORDING'], 'CRM_CREATE' => $config['CRM_CREATE'])));
     }
     return $result;
 }
示例#4
0
         $res = Bitrix\Voximplant\QueueTable::getList(array('filter' => array('=CONFIG_ID' => $call['CONFIG_ID'])));
         while ($queue = $res->fetch()) {
             if ($call['TRANSFER_USER_ID'] == $queue['USER_ID']) {
                 continue;
             }
             $userTimeout[$queue['USER_ID']] = true;
             CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $queue['USER_ID'], 'CALL_ID' => $call['CALL_ID']));
         }
         if ($call['TRANSFER_USER_ID'] > 0 && !isset($userTimeout[$call['TRANSFER_USER_ID']])) {
             CVoxImplantTransfer::SendPullEvent(array('COMMAND' => 'timeoutTransfer', 'USER_ID' => $call['TRANSFER_USER_ID'], 'CALL_ID' => $call['CALL_ID']));
         }
         if ($call['USER_ID'] > 0 && !isset($userTimeout[$call['USER_ID']])) {
             CVoxImplantTransfer::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['USER_ID'], 'CALL_ID' => $call['CALL_ID']));
         }
     } else {
         CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID']));
     }
     CVoxImplantHistory::WriteToLog($call, 'PORTAL HANGUP');
     echo json_encode($result);
 } else {
     if ($params["COMMAND"] == "GetNextInQueue") {
         $excludeUsers = array();
         if (isset($params['EXCLUDE_USERS'])) {
             $excludeUsers = explode('|', $params['EXCLUDE_USERS']);
         }
         if (in_array($params['LAST_TYPE_CONNECT'], array(CVoxImplantIncoming::TYPE_CONNECT_DIRECT, CVoxImplantIncoming::TYPE_CONNECT_CRM))) {
             $result = CVoxImplantIncoming::GetNextAction(array('SEARCH_ID' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'LAST_USER_ID' => $params['LAST_USER_ID'], 'LAST_TYPE_CONNECT' => $params['LAST_TYPE_CONNECT'], 'LAST_ANSWER_USER_ID' => $params['LAST_ANSWER_USER_ID'], 'EXCLUDE_USERS' => $excludeUsers));
         } else {
             $result = CVoxImplantIncoming::GetNextInQueue(array('SEARCH_ID' => $params['PHONE_NUMBER'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['CALLER_ID'], 'LAST_USER_ID' => $params['LAST_USER_ID'], 'LAST_TYPE_CONNECT' => $params['LAST_TYPE_CONNECT'], 'LAST_ANSWER_USER_ID' => $params['LAST_ANSWER_USER_ID'], 'EXCLUDE_USERS' => $excludeUsers));
         }
         CVoxImplantHistory::WriteToLog($result, 'PORTAL ANSWER');