Joywork/engine/classes/Tele2ApiClass.php
2026-05-22 21:21:54 +03:00

492 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of Tele2ApiClass
*
* @author Ira
*/
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
class Tele2ApiClass extends MangoApiClass {
private $company_id;
private $region_id;
private $base_url = "https://ats2.t2.ru/crm/openapi";
private $metod;
private $header;
private $users = array();
private $phone_type;
private $refreshToken;
private $accessToken;
private $phone_types = [0 => '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.'<br>';
$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.
'&region_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.'<br>';
$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);
}
}
}
}