397 lines
17 KiB
PHP
397 lines
17 KiB
PHP
<?php
|
||
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
|
||
|
||
ini_set('error_reporting', E_ALL);
|
||
ini_set('display_errors', 1);
|
||
ini_set('display_startup_errors', 1);
|
||
|
||
//Функция для записи звонков в базу
|
||
function read_phone($mts, $p, $agency_id, $type, $main_user_id, $dataApi){
|
||
//echo $agency_id.' -- '. $only_widget."<br>";
|
||
//поиск пользователя
|
||
//echo $p->user_find_number."++<br>";
|
||
$user_id = $mts -> find_user($p->user_find_number);
|
||
|
||
$source = 0;
|
||
$new_client = false;
|
||
$funnel_id = 0;
|
||
if($user_id == 0) $user_id = $main_user_id;
|
||
//echo $user_id.'<br>';
|
||
if ($agency_id == 17664){
|
||
$funnel_id = 1180;
|
||
}
|
||
if($user_id != 0){
|
||
//Поиск клиента
|
||
$client_id = $mts -> find_client($p->client_find_number);
|
||
|
||
$source = $mts->findSource($mts->ver_phone($p->source_find));
|
||
if($client_id == 0 && $dataApi['only_widget'] == 0){
|
||
$new_client = true;
|
||
|
||
$sql_cl_mango = "INSERT INTO `clients` (fio, phone, opis, id_agent, date_add, who_work, source, confirm, stage, funnel_id) " .
|
||
" VALUES ('Клиент mts', '".$mts->ver_phone($p->client_find_number)."', '".$p->comment."', {$user_id}, '".date('Y-m-d H:i:s', $p->callTime)."', {$user_id}, {$source}, '1', '1', {$funnel_id})";
|
||
|
||
if($agency_id == 12061){
|
||
if($type == 'abonentMtsAnswer' || $type =='abonentMtsNoAnswer'){
|
||
mysql_query($sql_cl_mango);
|
||
$client_id = mysql_insert_id();
|
||
|
||
}
|
||
|
||
} else {
|
||
mysql_query($sql_cl_mango);
|
||
$client_id = mysql_insert_id();
|
||
}
|
||
|
||
|
||
}
|
||
|
||
if($client_id != 0){
|
||
|
||
if($type == 'abonentMtsAnswer'){
|
||
$cl_stage = $mts -> get_client_stage();
|
||
//Перевод клиента в стадию "Новый", если он был закрыт
|
||
if($cl_stage == 8 || $cl_stage == 10){
|
||
$up_client = "UPDATE `clients` SET `stage`='1', `who_work`='{$user_id}', `deleted` = 0 WHERE `id`={$client_id}";
|
||
mysql_query($up_client);
|
||
$dop_text = "c «Закрыт» на «Новый» (По входящему звонку mts)";
|
||
$in_ev = "INSERT INTO `events_clients` (`user_id`, `client_id`, `event`, `dop_text`, `read`) VALUES ('{$user_id}', '{$client_id}', 'stageedit', '{$dop_text}', 1)";
|
||
mysql_query($in_ev);
|
||
}
|
||
}
|
||
|
||
$record = '';
|
||
$isRecord = false;
|
||
|
||
$record=$mts->recordSaveMTS($p,$agency_id);
|
||
if(!empty($record) && $record != '[]'){
|
||
$isRecord = true;
|
||
}
|
||
|
||
$sql_m = "SELECT id FROM user_client_events WHERE client_id = {$client_id} AND create_date = '".date('Y-m-d H:i:s', $p->callTime)."'".
|
||
" AND `type` = 'call' AND mts = 1 AND tracking = 0";
|
||
|
||
|
||
$q_m = mysql_query($sql_m);
|
||
|
||
if(mysql_num_rows($q_m) == 0){
|
||
|
||
|
||
|
||
|
||
//Поиск чей клиент
|
||
$sql_who = "SELECT who_work FROM clients WHERE id = {$client_id}";
|
||
$q_who = mysql_query($sql_who);
|
||
$r_who = mysql_fetch_assoc($q_who);
|
||
$who_work = $user_id;
|
||
if($r_who['who_work'] != 0){
|
||
$who_work = $r_who['who_work'];
|
||
}
|
||
|
||
/*if($type == 'abonentMtsAnswer'){
|
||
if(!$new_client && $who_work != $user_id){
|
||
$tg_notif = "INSERT INTO telephony_notifications (user_id, who_work, from_mes, to_mes, client_id, type_phone) ".
|
||
"VALUES ({$user_id},{$who_work},0,1,{$client_id}, 1),".
|
||
"({$who_work},{$user_id},1,0,{$client_id}, 1)";
|
||
mysql_query($tg_notif);
|
||
}
|
||
}*/
|
||
|
||
//Поиск отслеживаемого звонка
|
||
$sql_t = "SELECT * FROM user_client_events WHERE client_id = {$client_id} AND user_id={$who_work} AND `type` = 'call' AND tracking = 1 AND calendar_view = 0";
|
||
$q_t = mysql_query($sql_t);
|
||
if(mysql_num_rows($q_t) > 0){
|
||
$r_t = mysql_fetch_assoc($q_t);
|
||
mysql_query("UPDATE user_client_events SET calendar_view = 1, record='".$record."' WHERE id = ".$r_t['id']);
|
||
if($type == 'mtsAbonentNoAnswer'){
|
||
$sql_in_ev = "INSERT INTO user_client_events (user_id, client_id, create_date, schedule_date_to, schedule_date, `type`, comment, calendar_view, from_id, mts) ".
|
||
"VALUES (".$r_t['user_id'].", {$client_id}, '".date('Y-m-d H:i:s', $p->callTime)."', '".date('Y-m-d H:i:s')."', '".date('Y-m-d H:i:s', time()+3600)."', 'call', '".$r_t['comment'].' '.$p->comment_in."', 0, ".$r_t['from_id'].", 1)";
|
||
mysql_query($sql_in_ev);
|
||
}
|
||
} else {
|
||
|
||
$sql_in_ev = "INSERT INTO user_client_events (user_id, client_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, mts, record) ".
|
||
"VALUES ({$who_work}, {$client_id}, '".date('Y-m-d H:i:s', $p->callTime)."', '".date('Y-m-d H:i:s', $p->callTime)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
|
||
//echo $sql_in_ev.'</br>';
|
||
mysql_query($sql_in_ev);
|
||
}
|
||
} else if($isRecord) {
|
||
$r_m = mysql_fetch_assoc($q_m);
|
||
if(empty($r_m['record']) || $r_m['record'] == '[]'){
|
||
$sql_who = "SELECT who_work FROM clients WHERE id = {$client_id}";
|
||
$q_who = mysql_query($sql_who);
|
||
$r_who = mysql_fetch_assoc($q_who);
|
||
$who_work = $user_id;
|
||
if($r_who['who_work'] != 0){
|
||
$who_work = $r_who['who_work'];
|
||
}
|
||
mysql_query("UPDATE user_client_events SET calendar_view = 1, record='".$record."', comment='{$p->comment_in}', user_id={$who_work}, from_id={$user_id} WHERE id = ".$r_m['id']);
|
||
}
|
||
|
||
}
|
||
|
||
//Поиск заявки по клиенту
|
||
if($dataApi['is_req'] > 0){
|
||
if(!$isRecord){
|
||
|
||
$record = $mts->recordSaveMTS($p,$agency_id);
|
||
$isRecord = true;
|
||
|
||
}
|
||
|
||
if($agency_id == 12061){
|
||
$funnel_id = 573;
|
||
} else if ($agency_id == 17664){
|
||
$funnel_id = 1180;
|
||
}
|
||
|
||
$req_s = "SELECT id, user_id, who_work FROM requisitions WHERE client_id=$client_id and who_work={$user_id} and cancel=0 and deleted=0";
|
||
|
||
$req_q = mysql_query($req_s);
|
||
$req_rows = mysql_num_rows($req_q);
|
||
$req_comm = str_replace(["Клиент","записан"], ["Заявка","записана"], $p->comment);
|
||
if($req_rows > 0){
|
||
|
||
$req = mysql_fetch_assoc($req_q);
|
||
$sql_m = "SELECT id FROM user_client_events WHERE req_id = $req[id] AND create_date = '".date('Y-m-d H:i:s', $p->callTime)."'".
|
||
" AND user_id={$user_id} AND `type` = 'call' AND mts = 1 AND tracking = 0";
|
||
$q_m = mysql_query($sql_m);
|
||
if(mysql_num_rows($q_m) == 0){
|
||
$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, mts, record) ".
|
||
"VALUES ($req[who_work], $req[id], '".date('Y-m-d H:i:s', $p->callTime)."', '".date('Y-m-d H:i:s', $p->callTime)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
|
||
mysql_query($sql_in_ev);
|
||
}
|
||
} else {
|
||
|
||
$nameReq = 'Заявка МТС';
|
||
$sql_cl = "SELECT fio FROM clients WHERE id={$client_id}";
|
||
$q_cl = mysql_query($sql_cl);
|
||
$r_cl = mysql_fetch_assoc($q_cl);
|
||
if(isset($r_cl['fio'])){
|
||
$nameReq = "Подбор объекта для ".$r_cl['fio'];
|
||
}
|
||
$sql_req = "INSERT INTO `requisitions` SET name='{$nameReq}', user_id={$user_id}, integration=1, client_id={$client_id}, stage=1, type_id=1, source={$source}, who_work={$user_id}, description='{$req_comm}'";
|
||
if($funnel_id > 0) {
|
||
$sql_req .= ", funnel_id={$funnel_id}";
|
||
$reqClass = new Requisitions();
|
||
}
|
||
|
||
if($agency_id == 12061){
|
||
if($type == 'abonentMtsAnswer' || $type =='abonentMtsNoAnswer'){
|
||
mysql_query($sql_req);
|
||
$req_id = mysql_insert_id();
|
||
if($req_id > 0 && $funnel_id > 0){
|
||
$reqClass->get_class_etap($req_id, $funnel_id);
|
||
}
|
||
}
|
||
if(isset($req_id) && $req_id > 0){
|
||
$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, mts, record) ".
|
||
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p->callTime)."', '".date('Y-m-d H:i:s', $p->callTime)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
|
||
|
||
|
||
mysql_query($sql_in_ev);
|
||
}
|
||
|
||
} else{
|
||
mysql_query($sql_req);
|
||
$req_id = mysql_insert_id();
|
||
if($req_id > 0 && $funnel_id > 0){
|
||
$reqClass->get_class_etap($req_id, $funnel_id);
|
||
}
|
||
|
||
if(isset($req_id) && $req_id > 0){
|
||
$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, mts, record) ".
|
||
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p->callTime)."', '".date('Y-m-d H:i:s', $p->callTime)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
|
||
|
||
|
||
mysql_query($sql_in_ev);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
header('Content-Type: application/json');
|
||
|
||
|
||
$sql_tel = "SELECT * FROM agency_mango WHERE `type` = 'mts'";
|
||
//echo $sql_tel;
|
||
|
||
$q_tel = mysql_query($sql_tel);
|
||
|
||
while($r_tel = mysql_fetch_assoc($q_tel)){
|
||
$api_key = $r_tel['api_key'];
|
||
$last_date = $r_tel['last_date'];
|
||
$agency_id =$r_tel['agency_id'];
|
||
$main_user_id = $r_tel['main_user'];
|
||
$lost_update = $r_tel['lost_update'];
|
||
$gmt = (int)$r_tel['gmt'];
|
||
$phones_type=array();
|
||
$mts = new MtsApiClass($api_key);
|
||
$calls_list = array();
|
||
|
||
if($mts->validate_agency($agency_id)){
|
||
$usersMts = array();
|
||
$usersCall=json_decode($mts->getUsers());
|
||
|
||
if (!empty($usersCall)) {
|
||
if (is_object($usersCall)) {
|
||
$usersCall = (array)$usersCall;
|
||
}
|
||
foreach($usersCall as $userM){
|
||
|
||
//Проверка подписки
|
||
$mts->chechSubscription($userM);
|
||
|
||
if((time() - $lost_update) >= 86400){
|
||
$mts->saveUser($userM, $agency_id);
|
||
}
|
||
}
|
||
}
|
||
if((time() - $lost_update) >= 86400){
|
||
$sql_up_tel = "UPDATE agency_mango SET lost_update = '".time()."' WHERE id = ".$r_tel['id'];
|
||
mysql_query($sql_up_tel);
|
||
}
|
||
|
||
|
||
$mts->setUsers($agency_id);
|
||
|
||
//История вызовов
|
||
$start_date = (strtotime($last_date) - 2*60*60)*1000;
|
||
$end_date = time()*1000;
|
||
//echo $start_date."\n";
|
||
//echo $end_date."\n";
|
||
|
||
|
||
$arrGroup = array();
|
||
$page = 0;
|
||
$pages = 1;
|
||
$calls = $mts->callHistory($start_date, $end_date, $page);
|
||
|
||
|
||
if(isset($calls->totalElements) && $calls->totalElements > 0){
|
||
//echo $calls->totalElements."\n";
|
||
|
||
$calls_list[0] = $calls;
|
||
if($calls->totalElements > 100){
|
||
$pages = $calls->totalPages;
|
||
// echo "страниц ".$pages."\n";
|
||
}
|
||
|
||
if($pages > 1){
|
||
for($i = 1; $i<=($pages-1); $i++){
|
||
$page = $i;
|
||
$calls_list[$i] = $mts->callHistory($start_date, $end_date, $page);
|
||
}
|
||
}
|
||
|
||
//var_dump($calls_list);
|
||
|
||
$ii = 0;
|
||
foreach($calls_list as $key => $calls){
|
||
|
||
foreach($calls->content as $call){
|
||
|
||
$call->callTime = ceil($call->callTime/1000);
|
||
// echo date('d.m.Y H:i:s', $call->callTime)."\n";
|
||
//if(!in_array($call->callGroupId, $arrGroup) || $call->status == 'PLACED'){
|
||
$arrGroup[] = $call->callGroupId;
|
||
$call_id = $mts->stat($call, $agency_id, $r_tel['only_widget']);
|
||
$user_find_number = 0;
|
||
$type = $mts->get_phone_type($call);
|
||
switch ($type){
|
||
case 'mtsAbonentAnswer': {
|
||
$call->comment = 'Клиент записан по исходящему звонку в mts';
|
||
$call->comment_in = 'Исходящий звонок в МТС';
|
||
$call->user_find_number = $call->callingNumber;
|
||
$user_find_number = $call->callingNumber;
|
||
$call->source_find = $call->callingNumber;
|
||
$call->client_find_number = $call->calledNumber;
|
||
$call->comment_in .= ' '.'(Сотрудник '.$call->abonentName.')';
|
||
|
||
$phones_type['mtsAbonentAnswer'][] = $call;
|
||
break;
|
||
}
|
||
case 'abonentMtsAnswer': {
|
||
|
||
$call->comment = 'Клиент записан по входящему звонку в mts';
|
||
$call->comment_in = 'Входящий звонок в МТС';
|
||
$call->user_find_number = $call->calledNumber;
|
||
$user_find_number = $call->calledNumber;
|
||
$call->source_find = $call->calledNumber;
|
||
$call->client_find_number = $call->callingNumber;
|
||
$call->comment_in .= ' '.'(Сотрудник '.$call->abonentName.')';
|
||
|
||
$phones_type['abonentMtsAnswer'][] = $call;
|
||
break;
|
||
}
|
||
case 'mtsAbonentNoAnswer': {
|
||
$call->comment = 'Клиент записан по исходящему звонку в mts';
|
||
$call->comment_in = 'Исходящий звонок в МТС.<br>Абонент не ответил';
|
||
$call->user_find_number = $call->callingNumber;
|
||
$user_find_number = $call->callingNumber;
|
||
$call->source_find = $call->callingNumber;
|
||
$call->client_find_number = $call->calledNumber;
|
||
$call->comment_in .= ' '.'(Сотрудник '.$call->abonentName.')';
|
||
|
||
$phones_type['mtsAbonentNoAnswer'][] = $call;
|
||
break;
|
||
}
|
||
case 'abonentMtsNoAnswer':{
|
||
$call->comment = 'Клиент записан по входящему звонку в mts';
|
||
$call->comment_in = 'Пропущеный входящий звонок в МТС';
|
||
$call->user_find_number = $call->calledNumber;
|
||
$user_find_number = $call->calledNumber;
|
||
$call->source_find = $call->calledNumber;
|
||
$call->client_find_number = $call->callingNumber;
|
||
$call->comment_in .= ' '.'(Сотрудник '.$call->abonentName.')';
|
||
|
||
$phones_type['abonentMtsNoAnswer'][] = $call;
|
||
break;
|
||
}
|
||
}
|
||
$mts->save_user_call($call_id, $user_find_number, $main_user_id);
|
||
//}
|
||
//$ii++;
|
||
|
||
}
|
||
|
||
//echo "ii".$ii."\n";
|
||
}
|
||
}
|
||
|
||
|
||
|
||
if(isset($phones_type['mtsAbonentAnswer'])){
|
||
foreach ($phones_type['mtsAbonentAnswer'] as $p) {
|
||
read_phone($mts, $p, $agency_id, 'mtsAbonentAnswer', $main_user_id, $r_tel);
|
||
}
|
||
}
|
||
if(isset($phones_type['abonentMtsAnswer'])){
|
||
foreach ($phones_type['abonentMtsAnswer'] as $p) {
|
||
read_phone($mts, $p, $agency_id, 'abonentMtsAnswer', $main_user_id, $r_tel);
|
||
}
|
||
}
|
||
if(isset($phones_type['mtsAbonentNoAnswer'])){
|
||
foreach ($phones_type['mtsAbonentNoAnswer'] as $p) {
|
||
read_phone($mts, $p, $agency_id, 'mtsAbonentNoAnswer', $main_user_id, $r_tel);
|
||
}
|
||
}
|
||
if(isset($phones_type['abonentMtsNoAnswer'])){
|
||
foreach ($phones_type['abonentMtsNoAnswer'] as $p) {
|
||
read_phone($mts, $p, $agency_id, 'abonentMtsNoAnswer', $main_user_id, $r_tel);
|
||
}
|
||
}
|
||
|
||
|
||
$sql_up_tel = "UPDATE agency_mango SET last_date = '".date('Y-m-d H:i:s')."' WHERE id = ".$r_tel['id'];
|
||
mysql_query($sql_up_tel);
|
||
}
|
||
|
||
}
|