'tele2AbonentNoAnswer', 1 => 'tele2AbonentAnswer', 2 => 'abonentTele2Answer', 3 => 'abonentTele2NoAnswer']; private $start; private $end; public function __construct($company_id, $region_id, $refreshToken, $accessToken){ $this->company_id = $company_id; $this->region_id = $region_id; $this->refreshToken = $refreshToken; $this->accessToken = $accessToken; } private function set_header($refreshToken = false){ // var_dump($refreshToken); if($refreshToken){ $this->header = ['Content-type:application/json', 'Authorization:'.$this->refreshToken]; } else { $this->header = ['Content-type:application/json', 'Authorization:'.$this->accessToken]; } } public function getToken($agency_id){ $result = false; $this->metod = '/authorization/refresh/token'; $tokens = json_decode($this->sendCurl(false,['type'=>"PUT","body"=>[]], true)); if(isset($tokens->accessToken) && isset($tokens->refreshToken)){ $this->accessToken = $tokens->accessToken; $this->refreshToken = $tokens->refreshToken; $sql_up = "UPDATE agency_tele2 SET access_token='{$tokens->accessToken}', refresh_token='$tokens->refreshToken' WHERE agency_id={$agency_id}"; if(mysql_query($sql_up)) $result = true; } return $result; } private function sendCurl($post = false, $custom = false, $refreshToken = false){ $response = 0; $url = $this->base_url . $this->metod; //echo $url.'
'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //if($header){ $this->set_header($refreshToken); //var_dump($this->header); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header); curl_setopt($ch, CURLOPT_HEADER,0); if($post){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $this->post); } if($custom){ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $custom['type']); curl_setopt($ch, CURLOPT_POSTFIELDS,$custom['body']); } $response = curl_exec($ch); $response_info = curl_getinfo($ch); //var_dump($response); //var_dump($response_info['http_code']); if($response_info['http_code'] != 200){ $response = 0; } if($errno = curl_errno($ch)) { $error_message = curl_strerror($errno); echo "cURL error ({$errno}):\n {$error_message}"; } curl_close($ch); return $response; } public function getUsers() { $this->metod = "/employees?company_id=".$this->company_id; $res = $this->sendCurl(false); return $res; } //Сохранение пользователя МТС private function saveUserTele2($user, $agency_id){ $user_id = 0; $tele2_id = $user->employeeId; $fio = ''; $set = " SET "; if(isset($user->surname) && !empty(trim($user->surname))){ $fio .= trim($user->surname); } if(isset($user->name) && !empty(trim($user->name))){ if(!empty($fio)) $fio .= ' '; $fio .= trim($user->name); } if(isset($fio) && !empty($fio)){ if($set != " SET ") $set .= ", "; $set .= "fio='$fio'"; } if(isset($user->fullNumber) && !empty($user->fullNumber)){ $phone = $user->fullNumber; if($set != " SET ") $set .= ", "; $set .= "phone='$phone'"; } if(isset($user->shortNumber) && !empty($user->shortNumber)){ $ext = $user->shortNumber; if($set != " SET ") $set .= ", "; $set .= "ext='$ext'"; } if(isset($user->email) && !empty($user->email)){ $email = $user->email; if($set != " SET ") $set .= ", "; $set .= "email='$email'"; } //Поиск user_id if(isset($phone)){ $sql = "SELECT id FROM users WHERE phone='".$this->ver_phone($phone)."'"; $q = mysql_query($sql); if(mysql_num_rows($q) > 0){ $user_id = mysql_fetch_array($q)[0]; } } if(isset($email) && $user_id == 0){ $sql = "SELECT id FROM users WHERE email='$email'"; $q = mysql_query($sql); if(mysql_num_rows($q) > 0){ $user_id = mysql_fetch_array($q)[0]; } } if($set != " SET ") $set .= ", "; $set .= "user_id='$user_id'"; if($user_id > 0) { $sql = "SELECT id FROM tele2_users WHERE tele2_id = $tele2_id"; $q = mysql_query($sql); $row = mysql_num_rows($q); if($row > 0){ $sql_up = "UPDATE tele2_users $set WHERE tele2_id = $tele2_id"; mysql_query($sql_up); } else { if($set != " SET ") $set .= ", "; $set .= "tele2_id='$tele2_id', agency_id=$agency_id"; $sql_in = "INSERT INTO tele2_users $set"; mysql_query($sql_in); } } } public function find_user($phone, $agency_id=0){ $user_id = 0; $phone = $this->ver_phone($phone); $sql_user = "SELECT id FROM users WHERE phone = '".$phone."' and blocked=0"; $q_user = mysql_query($sql_user); if(mysql_num_rows($q_user) > 0){ $r_user = mysql_fetch_assoc($q_user); $user_id = $r_user['id']; } return $user_id; } //Сохранение данных пользователя телефонии public function saveUser($user, $agency_id){ $this->saveUserTele2($user, $agency_id); $user_id = $user->employeeId; $poles = array(); $poles_up = array(); //Проверка есть ли запись $sql = "SELECT id FROM mango_call_users WHERE user_id='".$user_id."'"; $q = mysql_query($sql); //Записываем $fio = ''; $poles[] = "user_id = '".$user_id."'"; if(isset($user->surname) && !empty(trim($user->surname))){ $fio .= trim($user->surname); } if(isset($user->name) && !empty(trim($user->name))){ if(!empty($fio)) $fio .= ' '; $fio .= trim($user->name); } if(!empty($fio)){ $poles[] = "fio = '".$fio."'"; $poles_up[] = "fio = '".$fio."'"; } $number_sip = ''; if(isset($user->fullNumber) && !empty($user->fullNumber)){ $poles[] = "number_phone = '".$user->fullNumber."'"; $number_sip = $user->fullNumber; } if(isset($user->shortNumber) && !empty($user->shortNumber)){ $poles[] = "extension = '".$user->shortNumber."'"; } $poles[] = "number_sip = '".$number_sip."'"; $poles_up[] = "number_sip = '".$number_sip."'"; if(mysql_num_rows($q) == 0){ $poles[] = "agency_id = '".$agency_id."'"; $insert = "INSERT INTO `mango_call_users` set ".implode(', ', $poles); mysql_query($insert); } else { $insert = "UPDATE `mango_call_users` set ".implode(', ', $poles_up)." WHERE user_id = ".$user_id; mysql_query($insert); } } private function getListRecords($call){ $result = false; $this->metod = '/record/list?'. 'company_id='.$this->company_id. '®ion_id='.$this->region_id. '&start='.$this->start. '&end='.$this->end. '&caller='.$call->callerNumber. '&callee='.$call->calleeNumber; //echo $this->metod."\n"; $res = $this->sendCurl(); //var_dump($res); return $result; } public function get_record($record_uuid){ $this->metod = '/call-records/file?filename='.rawurlencode($record_uuid); $res = $this->sendCurl(); return $res; } // public function recordSaveTele2($call, $agency_id){ $records = array(); if(isset($call->recordFileName) && !empty($call->recordFileName)){ if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2")) { mkdir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2", 0777); } if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2/".$agency_id)) { mkdir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2/".$agency_id, 0777); } $date = date("Ymd", $call->date); if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2/".$agency_id."/".$date)) { mkdir($_SERVER['DOCUMENT_ROOT'] . "/server/tele2/".$agency_id."/".$date, 0777); } $file = trim($this->get_record($call->recordFileName)); if(!empty($file)){ $name = explode('/', $call->recordFileName)[1].'.mp3'; if(!file_exists($_SERVER['DOCUMENT_ROOT'].'/server/tele2/'.$agency_id.'/'.$date.'/'.$name)){ file_put_contents($_SERVER['DOCUMENT_ROOT'].'/server/tele2/'.$agency_id.'/'.$date.'/'.$name, $file); } $records[] = explode('/', $call->recordFileName)[1]; } } return json_encode($records); } public function callHistory($start, $end) { $this->start = $start; $this->end = $end; $this->metod = "/call-records/info?start=$start&end=$end&size=50"; $res = json_decode($this->sendCurl()); return $res; } public function get_phone_type($phone){ $this->type_phone($phone); return $this -> phone_type; } public function type_phone($phone){ $type = 0; $number_phone = $phone->callerNumber; $sql = "SELECT id FROM tele2_users WHERE phone = '$number_phone'"; //echo $sql."\n"; $q = mysql_query($sql); if(mysql_num_rows($q) > 0){ if($phone->callStatus == 'ANSWERED_COMMON' || $phone->callStatus == 'ANSWERED_BY_ORIGINAL_CLIENT' || $phone->callStatus == 'ANSWERED_BY_BUSY_FORWARD_CLIENT' || $phone->callStatus == 'ANSWERED_BY_NO_ANSWER_FORWARD_CLIENT' ){ $type = 1; } } else { $type = 3; if($phone->callStatus == 'ANSWERED_COMMON' || $phone->callStatus == 'ANSWERED_BY_ORIGINAL_CLIENT' || $phone->callStatus == 'ANSWERED_BY_BUSY_FORWARD_CLIENT' || $phone->callStatus == 'ANSWERED_BY_NO_ANSWER_FORWARD_CLIENT' ){ $type = 2; } } $this->phone_type = $this->phone_types[$type]; } public function stat($call, $agency_id){ $id = 0; $this->type_phone($call); if(!isset($call->calleeNumber)){ $call->calleeNumber = $call->destinationNumber; } $to_number = $call->calleeNumber; $from_number = $call->callerNumber; $entry_id = $to_number; $id_uuid = $call->date; $answer = 0; $answerResult = $call->callStatus; if(isset($call->conversationDuration)) { $answer = $call->date; } $from_extension = ''; if($this->phone_type == 'tele2AbonentAnswer' || $this->phone_type == 'tele2AbonentNoAnswer'){ $from_extension = $call->calleeNumber; $to_number = $call->callerNumber; } $start = $call->date; $finish = $call->date + $call->callDuration; //echo $to_number.'
'; $sql = "SELECT id FROM mango_calls WHERE operator_id=6 and operator_call_id = '".$id_uuid."'"; $q = mysql_query($sql); $row = mysql_num_rows($q); $record = "[]"; if($this->phone_type == 'tele2AbonentAnswer' || $this->phone_type == 'abonentTele2Answer'){ $record = $this->recordSaveTele2($call, $agency_id); } if($row == 0){ $in = "INSERT INTO `mango_calls` SET `records`='".$record."', `start`= $start, `finish`=$finish, `answer`=$answer, `from_extension`='".$from_extension."', `from_number`= '".$from_number."', `to_extension`='".$call->calleeNumber."', `to_number`='".$to_number."', `disconnect_reason`='".$answerResult."', `entry_id`='".$entry_id."', `line_number`='tele2', `operator_id`=6, `location`='', `operator_call_id`='{$id_uuid}', `agency_id`=$agency_id "; //echo $in."\n"; mysql_query($in); $id = mysql_insert_id(); } else { $r = mysql_fetch_assoc($q); $id = (int)$r['id']; $in = "UPDATE `mango_calls` SET `records`='".$record."', `start`= $start, `finish`=$finish, `answer`=$answer, `from_extension`='".$from_extension."', `from_number`= '".$from_number."', `to_extension`='".$call->calleeNumber."', `to_number`='".$to_number."', `disconnect_reason`='".$answerResult."', `entry_id`='".$entry_id."', `agency_id`=$agency_id WHERE id = {$id}"; mysql_query($in); } /*else if($row > 0) { $in = "UPDATE `mango_calls` SET `records`='".$record."', `start`= $start, `finish`=$finish, `answer`=$answer, `from_extension`='".$from_extension."', `from_number`= '".$from_number."', `to_extension`='".$call->calledNumber."', `to_number`='".$to_number."', `disconnect_reason`='".$answerResult."', `entry_id`='".$entry_id."', `line_number`='tele2', `agency_id`=$agency_id WHERE operator_id=6 and operator_call_id = '".$id_uuid."' "; echo $in; //mysql_query($in); }*/ return $id; } public function save_user_call($id_call, $user_find, $main_user, $agency_id = 0){ $user_id = 0; if($id_call > 0){ $user_id = (int)$this->find_user($user_find); if($user_id == 0){ $user_id = (int)$main_user; } } if($user_id > 0){ $sql = "SELECT id FROM user_call WHERE call_id = {$id_call}"; $q = mysql_query($sql); if(mysql_num_rows($q) == 0){ $sql_in = "INSERT INTO user_call SET call_id = {$id_call}, user_id = {$user_id}"; mysql_query($sql_in); } } } }