示例#1
0
 public static function RegisterCall($config, $params)
 {
     Bitrix\Voximplant\CallTable::add(array('CONFIG_ID' => $config['ID'], 'CALL_ID' => $params['CALL_ID'], 'USER_ID' => 0, 'CALLER_ID' => $params['CALLER_ID'], 'STATUS' => Bitrix\Voximplant\CallTable::STATUS_CONNECTING, 'CRM' => $config['CRM'], 'ACCESS_URL' => $params['ACCESS_URL'], 'DATE_CREATE' => new Bitrix\Main\Type\DateTime()));
     if ($config['WORKTIME_SKIP_CALL'] == 'Y') {
         $config['WORKTIME_USER_ID'] = 0;
         if ($config['CRM'] == 'Y') {
             $existsLead = false;
             $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['CALLER_ID']);
             if (isset($crmData['RESPONSIBILITY']['ID']) && $crmData['RESPONSIBILITY']['ID'] > 0) {
                 $config['WORKTIME_USER_ID'] = $crmData['RESPONSIBILITY']['ID'];
                 $existsLead = true;
             } else {
                 $res = VI\QueueTable::getList(array('select' => array('ID', 'USER_ID'), 'filter' => array('=CONFIG_ID' => $config['ID']), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'), 'limit' => 1));
                 $queueUser = $res->fetch();
                 if ($queueUser) {
                     VI\QueueTable::update($queueUser['ID'], array('LAST_ACTIVITY_DATE' => new FieldType\DateTime()));
                     $config['WORKTIME_USER_ID'] = $queueUser["USER_ID"];
                 }
                 if ($config['WORKTIME_USER_ID'] > 0 && $crmData['FOUND'] == 'N' && $config['CRM_CREATE'] == CVoxImplantConfig::CRM_CREATE_LEAD) {
                     $id = CVoxImplantCrmHelper::AddLead(array('USER_ID' => $config['WORKTIME_USER_ID'], 'PHONE_NUMBER' => $params['CALLER_ID'], 'SEARCH_ID' => $params['SEARCH_ID'], 'CRM_SOURCE' => $config['CRM_SOURCE'], 'INCOMING' => true));
                     if ($id) {
                         $existsLead = true;
                     }
                 }
             }
             if ($existsLead) {
                 CVoxImplantCrmHelper::AddCall(array('CALL_ID' => $params['CALL_ID'], 'PHONE_NUMBER' => $params['CALLER_ID'], 'INCOMING' => CVoxImplantMain::CALL_INCOMING, 'USER_ID' => $config['WORKTIME_USER_ID'], 'DATE_CREATE' => new FieldType\DateTime()));
                 CVoxImplantCrmHelper::UpdateCall(array('CALL_ID' => $params['CALL_ID'], 'PHONE_NUMBER' => $params['CALLER_ID'], 'INCOMING' => CVoxImplantMain::CALL_INCOMING, 'USER_ID' => $config['WORKTIME_USER_ID'], 'DESCRIPTION' => GetMessage("WORKTIME_CALL")));
             }
         } else {
             $res = VI\QueueTable::getList(array('select' => array('ID', 'USER_ID'), 'filter' => array('=CONFIG_ID' => $config['ID']), 'order' => array('LAST_ACTIVITY_DATE' => 'asc'), 'limit' => 1));
             $queueUser = $res->fetch();
             if ($queueUser) {
                 $config['WORKTIME_USER_ID'] = $queueUser["USER_ID"];
             }
         }
     }
     return $config;
 }
示例#2
0
 public static function CallStart($callId, $userId, $callDevice = 'WEBRTC', $external = false)
 {
     // TODO check $callId, $userId
     $res = Bitrix\Voximplant\CallTable::getList(array('select' => array('ID', 'CALL_ID', 'CALLER_ID', 'DATE_CREATE', 'CRM_LEAD', 'PORTAL_USER_ID'), 'filter' => array('=CALL_ID' => $callId)));
     if ($call = $res->fetch()) {
         $crmData = false;
         if ($call['CRM_LEAD'] > 0) {
             CVoxImplantCrmHelper::UpdateLead($call['CRM_LEAD'], array('ASSIGNED_BY_ID' => $userId));
             $crmData = CVoxImplantCrmHelper::GetDataForPopup($call['CALL_ID'], $call['CALLER_ID'], $userId);
         }
         Bitrix\Voximplant\CallTable::update($call['ID'], array('USER_ID' => $userId, 'STATUS' => Bitrix\Voximplant\CallTable::STATUS_CONNECTED));
         foreach (GetModuleEvents("voximplant", "onCallStart", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array(array('CALL_ID' => $call['CALL_ID'], 'USER_ID' => $userId)));
         }
         $pushUser = array($userId);
         if ($call['PORTAL_USER_ID'] > 0) {
             $pushUser[] = $call['PORTAL_USER_ID'];
         }
         foreach ($pushUser as $userId) {
             self::SendPullEvent(array('COMMAND' => 'start', 'USER_ID' => $userId, 'CALL_ID' => $callId, 'CALL_DEVICE' => $callDevice, 'EXTERNAL' => $external ? true : false, 'CRM' => $crmData));
         }
     }
 }
示例#3
0
            echo json_encode($result);
        } elseif ($params["COMMAND"] == "UnlinkExpirePhoneNumber") {
            $result = CVoxImplantConfig::DeleteConfigBySearchId($params['PHONE_NUMBER']);
            CVoxImplantHistory::WriteToLog($result, 'CONTROLLER UNLINK EXPIRE PHONE NUMBER');
            echo json_encode($result);
        } elseif ($params["COMMAND"] == "UpdateOperatorRequest") {
            $params['OPERATOR_CONTRACT'] = \Bitrix\Main\Text\Encoding::convertEncodingToCurrent($params['OPERATOR_CONTRACT']);
            CVoxImplantPhoneOrder::Update($params);
            $result = array('RESULT' => 'OK');
            CVoxImplantHistory::WriteToLog($result, 'UPDATE OPERATOR REQUEST');
            echo json_encode($result);
        } else {
            if ($params["COMMAND"] == "ExternalHungup") {
                $res = Bitrix\Voximplant\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID_TMP'])));
                if ($call = $res->fetch()) {
                    Bitrix\Voximplant\CallTable::delete($call['ID']);
                    CVoxImplantOutgoing::SendPullEvent(array('COMMAND' => 'timeout', 'USER_ID' => $call['USER_ID'], 'CALL_ID' => $call['CALL_ID'], 'FAILED_CODE' => intval($params['CALL_FAILED_CODE']), 'MARK' => 'timeout_hit_7'));
                    CVoxImplantHistory::WriteToLog($call, 'EXTERNAL CALL HANGUP');
                }
            } else {
                if ($params["COMMAND"] == "VerifyResult") {
                    $params['REVIEWER_COMMENT'] = \Bitrix\Main\Text\Encoding::convertEncodingToCurrent($params['REVIEWER_COMMENT']);
                    $ViDocs = new CVoxImplantDocuments();
                    $ViDocs->SetVerifyResult($params);
                }
            }
        }
    } else {
        echo "You don't have access to this page.";
    }
}