'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);
}
}
}
}