'undefined', 1 => 'megafonAbonentAnswer', 2 => 'abonentMegafonAnswer', 3 => 'noAnswer']; public $account = ''; private $translationPhone = array(); private $dbpg = null; public function __construct($api_key, $api_pass, $url){ $this->api_key = $api_key; $this->api_pass = $api_pass; $this->base_url = $url; $this->dbpg = new MysqlPdo(hstpg, ndbpg, userpg, passpg, false, '5432', true); } public function get_base_url(){ echo $this->base_url; } public function get_phone_type($phone){ $this->type_phone($phone); return $this->phone_type; } public function setCmd($cmd){ $this->cmd = $cmd; } public function get_users_ats(){ $this->post = array( 'token' => $this->api_key, 'cmd' => $this->cmd ); $res = $this->sendCurl(); return $res; } public function get_history($date, $today = false, $yesterday = false){ $this->post = array( 'token' => $this->api_key, 'cmd' => $this->cmd, 'start'=> $date ); if($today){ $this->post['period'] = 'today'; } if($yesterday){ $this->post['period'] = 'yesterday'; } $res = $this->sendCurl(); return $res; } public function get_dnd($name){ $this->post = array( 'token' => $this->api_key, 'cmd' => $this->cmd, 'user' => $name, ); $res = $this->sendCurl(); return $res; } public function set_dnd($name, $state=true) { $this->post = array( 'token' => $this->api_key, 'cmd' => $this->cmd, 'user' => $name, 'state' => false, ); $res = $this->sendCurl(); return $res; } public function set_phones($phones){ $this->phones_users = $phones; } public function set_phones2($phones2){ $this->phones_users2 = $phones2; } public function set_users1($usersIds){ $this->users1 = $usersIds; } public function set_users2($usersIds2){ $this->users2 = $usersIds2; } private function sendCurl($post = true){ $response = 0; $url = trim($this->base_url); // echo $url."\n"; // var_dump($this->post); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($post){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $this->post); } $response = curl_exec($ch); $info = curl_getinfo($ch); // var_dump($info); curl_close($ch); //var_dump($response); return $response; } private function type_phone($typePhone){ $type = 0; if($typePhone == 'in'){ $type = 2; } else if($typePhone == 'out') { $type = 1; } else if($typePhone == 'missed') { $type = 3; } $this->phone_type = $this->phone_types[$type]; } public function getTranslationPhone($agency_id){ $result = array(); if($agency_id == 13154){ $result['79312485724'] = 13530; $result['79312486002'] = 13530; $result['79312486030'] = 13530; $result['79312486204'] = 13530; $result['79991225674'] = 13530; $result['79991225734'] = 19342; $result['79319520783'] = 19342; $result['79312483730'] = 19342; $result['79991225174'] = 19342; $result['79319520091'] = 13531; $result['79319520105'] = 13531; $result['79312483257'] = 17011; $result['79319520565'] = 17011; $result['79319520757'] = 17011; $result['79319520784'] = 17011; $result['79312485404'] = 14352; $result['79312486130'] = 14352; $result['79312486612'] = 14352; $result['79319520094'] = 14352; $result['79319520523'] = 16193; $result['79319520134'] = 16193; $result['79319520487'] = 16193; $result['79319520540'] = 16193; $result['79312486247'] = 20130; $result['79312486481'] = 20130; $result['79312486505'] = 20130; $result['79312486724'] = 20130; $result['79312484529'] = 20160; $result['79312484689'] = 20160; $result['79312484890'] = 20160; $result['79312485684'] = 20160; } $this->translationPhone = $result; } public function find_user($phone, $agency_id = 0){ $user_id = 0; if(!empty($this->phones_users)){ if(in_array('+'.$phone,$this->phones_users)){ $user_id = (int)array_search('+'.$phone, $this->phones_users); } } if($user_id == 0){ if(!empty($this->phones_users2)){ if(in_array('+'.$phone,$this->phones_users2)){ $user_id = (int)array_search('+'.$phone, $this->phones_users2); } } } if(!empty($this->translationPhone)){ if(isset($this->translationPhone[$phone])) $user_id = $this->translationPhone[$phone]; } if($user_id == 0){ $arrAccount = explode('@', $this->account); $sql_user = "SELECT user_id FROM megafon_users WHERE (phone = '+".$phone."'"; if(isset($arrAccount[0]) ){ if($arrAccount[0] != 'admin'){ $sql_user .= " or name = '".$arrAccount[0]."'"; } } $sql_user .= ") "; if($agency_id > 0) { $sql_user .= " AND agency_id = {$agency_id}"; } $sql_user .= " order by id desc"; $q_user = mysql_query($sql_user); if(mysql_num_rows($q_user) > 0){ while($r_user = mysql_fetch_assoc($q_user)){ if($r_user['user_id'] > 0){ $sql_global_user = "SELECT * FROM users WHERE id = {$r_user['user_id']}"; $q_global_user = mysql_query($sql_global_user); $r_global_user = mysql_fetch_assoc($q_global_user); if(isset($r_global_user['id']) && $r_global_user['blocked'] == 0){ $user_id = $r_user['user_id']; break; } } } if(!in_array($user_id, $this->users)){ $user_id = 0; } // $user_id = $r_user['user_id']; } } return $user_id; } public function recordSave($link){ if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/server/mega")) { mkdir($_SERVER['DOCUMENT_ROOT'] . "/server/mega", 0777); } $name = trim(basename($link), "\n"); $name = trim($name); if(!empty($name)){ $is_req = false; $path = $_SERVER['DOCUMENT_ROOT'].'/server/mega/'.$name; // echo $path."\n"; if(file_exists($path)){ $is_req = true; } else { $href = 'https://voice.joywork.ru/mega/'.$name; $Headers = @get_headers($href,1); // var_dump($Headers); if(strpos($Headers[0],'200') && $Headers['Content-Length'] > 0) { $is_req = true; } } // var_dump($is_req); //var_dump($link); if(!$is_req){ //file_put_contents($_SERVER['DOCUMENT_ROOT'].'/server/mega/'.$name, file_get_contents($link, false)); // Что скачиваем $from = trim($link); // Куда скачиваем $to = $_SERVER['DOCUMENT_ROOT'].'/server/mega/'.$name; $ch = curl_init($from); $fp = fopen($to, 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); //curl_setopt($ch, CURLOPT_VERBOSE, true); //curl_setopt($ch, CURLOPT_STDERR, fopen($_SERVER['DOCUMENT_ROOT'] . '/curl_megafon.txt', 'a+')); curl_exec($ch); //$info = curl_getinfo($ch); //var_dump($info); curl_close($ch); fclose($fp); } } return $name; } private function recordName($link){ $res = ''; $name = trim(basename($link), "\n"); $name = trim($name); $exName = explode('.',$name); if(isset($exName[0])){ $res = $exName[0]; } return $res; } public function set_users_agency($agency_id){ if(in_array($agency_id,$this->users1)){ echo 'users1'."\n"; $this->set_users($this->users1); } else if(in_array($agency_id,$this->users2)){ echo 'users2'."\n"; $this->set_users($this->users2); } else { $sql_users = "SELECT id FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in (select id from users where id_manager=$agency_id or id_manager in (select id from users where id_manager=$agency_id)))"; //echo $sql_users; $q_users = mysql_query($sql_users); while($r_users = mysql_fetch_assoc($q_users)){ $usersIds[] = (int)$r_users['id']; } $this->set_users($usersIds); } } public function getAgencyId($user, $agency_id, $agency_id2, $set_users = false){ $agencyId = $agency_id; $usersIds = array(); if(empty($this->users2)){ $sql_users = "SELECT * FROM users WHERE id in (select id from users where id=$agency_id2 or id_manager=$agency_id2 or id_manager in (select id from users where id_manager=$agency_id2 or id_manager in (select id from users where id_manager=$agency_id2)))"; $q_users = mysql_query($sql_users); while($r_users = mysql_fetch_assoc($q_users)){ $usersIds[] = (int)$r_users['id']; $this->phones_users2[(int)$r_users['id']] = $r_users['phone']; } $this->users2 = $usersIds; } $phone = false; if(isset($user['telnum']) && !empty($user['telnum'])){ $phone = $this->ver_phone($user['telnum']); } if($phone){ if(in_array($phone, $this->phones_users2)){ $agencyId = $agency_id2; } } return $agencyId; } public function saveUserMega($user, $agency_id, $agency_id2 = 0){ // Защита от невалидных данных (например, API вернул ошибку или строку) if (!is_array($user) || !isset($user['name'])) { return $agency_id; } $agencyId = $agency_id; if($agency_id2 > 0){ $agencyId = $this->getAgencyId($user, $agency_id, $agency_id2); } $phone = ''; $url_main = explode("/", str_replace("https://", "", $this->base_url))[0]; // telnum необязателен по документации API $user_id = isset($user['telnum']) ? $user['telnum'] : ''; $user_name = isset($user['realName']) ? $user['realName'] : ''; $extension = isset($user['ext']) ? $user['ext'] : ''; $sql = "SELECT id, number_phone FROM mango_call_users WHERE user_id='".$user_id."'"; $q = mysql_query($sql); $sql_p = "SELECT phone FROM megafon_users WHERE agency_id=$agencyId and name = '".$user['name']."'"; $q_p = mysql_query($sql_p); if(mysql_num_rows($q_p) > 0){ $r_p = mysql_fetch_assoc($q_p); $phone = $r_p['phone']; } $user_sip = $user['name'].'@'.trim($url_main); $department = ''; //Записываем if(mysql_num_rows($q) == 0){ $in = "INSERT INTO `mango_call_users` SET user_id = '".$user_id."', fio = '".$user_name."', number_phone = '".$phone."', number_sip = '".$user_sip."', extension = '".$extension."', agency_id = $agencyId "; mysql_query($in); } else { $up = "UPDATE `mango_call_users` SET fio = '".$user_name."', number_phone = '".$phone."', number_sip = '".$user_sip."', extension = '".$extension."', agency_id = $agencyId WHERE user_id = '".$user_id."'"; mysql_query($up); return $agencyId; } //return $phone; } public function stat($call, $agency_id){ $id = 0; $idpg = 0; $from_extension = ''; $to_extension = ''; if($call['type'] == 'out'){ $to_number = $call['account']; $from_number = $call['account']; $from_extension = $call['via']; $entry_id = $call['client']; } else { $to_number = $call['account']; $from_number = $call['client']; $to_extension = $call['account']; $entry_id = $call['via']; } $operator_call_id = $call['UID']; //echo $to_number.'
'; // $sql = "SELECT id FROM mango_calls WHERE operator_id=4 and operator_call_id = $operator_call_id"; //$q = mysql_query($sql); $date = $call['start']; //if(mysql_num_rows($q) == 0){ $recordArr = array(); if(!empty(trim($call['record'], '\n'))){ $recordArr[]=$this->recordName(trim($call['record'], '\n')); $this->recordSave(trim($call['record'], '\n')); } $answerResult = 'answered'; $answer = $date; if($call['type'] == 'missed'){ $answerResult = 'not answered'; $answer = 0; } else { $recordTemp = $this->recordName(trim($call['record'], '\n')); $acauntTemp = ''; $arrAccount = explode('@', $this->account); if(isset($arrAccount[0])){ $acauntTemp = $arrAccount[0]; } if($acauntTemp != ''){ /*if(strpos($recordTemp, $acauntTemp) === false){ $answerResult = 'not answered'; $answer = 0; $recordArr = array(); }*/ } } $record = json_encode($recordArr); $start = $date; $finish = ($date + $call['duration'] + $call['wait']); if((int)$call['duration'] == 0 && $answer > 0){ $answerResult = 'no take place'; } // проверка записанных звонков с виджета $update = false; $updatepg = false; $_sql = "SELECT id FROM mango_calls WHERE operator_id=4 and operator_call_id = '{$operator_call_id}'"; // echo $_sql."\n"; /* $_c = mysql_fetch_assoc(mysql_query($_sql)); if(isset($_c['id'])){ $update = true; $id = (int)$_c['id']; }*/ $_cpg = $this->dbpg->fetch_assoc($this->dbpg->query($_sql)); if(isset($_cpg['id'])){ $updatepg = true; $idpg = (int)$_cpg['id']; } /* if($update){ $in = "UPDATE `mango_calls` SET `records`='" . $record . "', `start`= $start, `finish`=$finish, `answer`=$answer, `from_extension`='" . $from_extension . "', `from_number`= '" . $from_number . "', `to_extension`='" . $to_extension . "', `to_number`='" . $to_number . "', `disconnect_reason`='" . $answerResult . "', `entry_id`='" . $entry_id . "', `operator_call_id`=".$operator_call_id.", `operator_id`=4, `agency_id`=".$agency_id.", `uuid`='" . $call['UID'] . "' WHERE id =".$_c['id']; } else { $in = "INSERT INTO `mango_calls` SET `records`='" . $record . "', `start`= $start, `finish`=$finish, `answer`=$answer, `from_extension`='" . $from_extension . "', `from_number`= '" . $from_number . "', `to_extension`='" . $to_extension . "', `to_number`='" . $to_number . "', `disconnect_reason`='" . $answerResult . "', `entry_id`='" . $entry_id . "', `line_number`='megafon', `location`='', `uuid`='" . $call['UID'] . "', `agency_id`=$agency_id, `operator_id`=4, `operator_call_id`=$operator_call_id "; //} }*/ if($updatepg){ $inpg = "UPDATE mango_calls SET records='" . $record . "', start= $start, finish=$finish, answer=$answer, from_extension='" . $from_extension . "', from_number= '" . $from_number . "', to_extension='" . $to_extension . "', to_number='" . $to_number . "', disconnect_reason='" . $answerResult . "', entry_id='" . $entry_id . "', operator_call_id='".$operator_call_id."', operator_id=4, agency_id=".$agency_id.", uuid='" . $call['UID'] . "' WHERE id =".$_cpg['id']; } else { $inpg = "INSERT INTO mango_calls ( records, start, finish, answer, from_extension, from_number, to_extension, to_number, disconnect_reason, entry_id, line_number, location, uuid, agency_id, operator_id, operator_call_id ) VALUES ( '" . $record . "', {$start}, {$finish}, {$answer}, '" . $from_extension . "', '" . $from_number . "', '" . $to_extension . "', '" . $to_number . "', '" . $answerResult . "', '" . $entry_id . "', 'megafon', '', '" . $call['UID'] . "', {$agency_id}, 4, '{$operator_call_id}' ) "; //} } mysql_query($in); if(!$update){ $id = mysql_insert_id(); } // file_put_contents($_SERVER['DOCUMENT_ROOT']."/webhooks/log_call_sql.txt", $inpg."\n", FILE_APPEND); $this->dbpg->query($inpg); if(!$updatepg){ $idpg = $this->dbpg->insert_id(); } $result['id'] = $id; $result['idpg'] = $idpg; return $result; } 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, $agency_id); 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); } } } public function save_user_call_pg($id_call, $user_find, $main_user, $agency_id=0){ $user_id = 0; if($id_call > 0){ $user_id = (int)$this->find_user($user_find, $agency_id); 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 = $this->dbpg->query($sql); if($this->dbpg->num_rows($q) == 0){ $sql_in = "INSERT INTO user_call (call_id, user_id) VALUES ($id_call, $user_id)"; //file_put_contents($_SERVER['DOCUMENT_ROOT']."/webhooks/log_call_sql.txt", $sql_in."\n", FILE_APPEND); $this->dbpg->query($sql_in); } } } }