Joywork/cron/tele2_call.php
2026-05-22 21:21:54 +03:00

308 lines
15 KiB
PHP
Raw Permalink 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
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
header('Content-Type: application/json');
//Функция для записи звонков в базу
function read_phone($tele2, $p, $agency_id, $type, $main_user_id, $dataApi){
//echo $agency_id.' -- '. $only_widget."<br>";
//поиск пользователя
//echo $p->user_find_number."++<br>";
$user_id = $tele2 -> find_user($p->user_find_number);
//echo $user_id.'<br>';
$new_client = false;
if($user_id == 0) $user_id = $main_user_id;
//echo $user_id.'<br>';
if($user_id != 0){
//Поиск клиента
$client_id = $tele2 -> find_client($p->client_find_number);
$source = $tele2->findSource($tele2->ver_phone($p->source_find));
if($client_id == 0){
$new_client = true;
$sql_cl_mango = "INSERT INTO `clients` (fio, phone, opis, id_agent, date_add, who_work, confirm, stage) " .
" VALUES ('Клиент tele2', '".$tele2->ver_phone($p->client_find_number)."', '".$p->comment."', {$user_id}, '".date('Y-m-d H:i:s', $p->date)."', {$user_id}, '1', '1')";
//echo $sql_cl_mango."\n";
if($agency_id == 21939 || $agency_id == 19793){
if($type == 'abonentTele2NoAnswer' || $type == 'abonentTele2Answer'){
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 == 'abonentTele2Answer'){
$cl_stage = $tele2 -> 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 &laquo;Закрыт&raquo; на &laquo;Новый&raquo; (По входящему звонку tele2)";
$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;
$sql_m = "SELECT id FROM user_client_events WHERE client_id = {$client_id} AND create_date = '".date('Y-m-d H:i:s', $p->date)."'".
" AND `type` = 'call' AND tele2 = 1 AND tracking = 0";
$q_m = mysql_query($sql_m);
if(mysql_num_rows($q_m) == 0){
$record=$tele2->recordSaveTele2($p,$agency_id);
if(!empty($record)){
$isRecord = true;
}
//Поиск чей клиент
$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 == 'abonentTele2Answer'){
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 == 'tele2AbonentNoAnswer'){
$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, tele2) ".
"VALUES (".$r_t['user_id'].", {$client_id}, '".date('Y-m-d H:i:s', $p->date)."', '".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, tele2, record) ".
"VALUES ({$who_work}, {$client_id}, '".date('Y-m-d H:i:s', $p->date)."', '".date('Y-m-d H:i:s', $p->date)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
//echo $sql_in_ev.'</br>';
mysql_query($sql_in_ev);
}
}
//Поиск заявки по клиенту
if($dataApi['is_req'] > 0){
if(!$isRecord){
$record = $tele2->recordSaveTele2($p,$agency_id);
$isRecord = true;
}
$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->date)."'".
" AND user_id={$user_id} AND `type` = 'call' AND tele2 = 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, tele2, record) ".
"VALUES ($req[who_work], $req[id], '".date('Y-m-d H:i:s', $p->date)."', '".date('Y-m-d H:i:s', $p->date)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
}
} else {
$nameReq = 'Заявка Теле2';
$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, who_work={$user_id}, description='{$req_comm}'";
if($agency_id == 19793){
if($type == 'abonentTele2NoAnswer' || $type == 'abonentTele2Answer'){
mysql_query($sql_req);
$req_id = mysql_insert_id();
$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, tele2, record) ".
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p->date)."', '".date('Y-m-d H:i:s', $p->date)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
}
} else
if($agency_id != 13285 && $agency_id != 22045 && $agency_id != 22282 && $agency_id != 21939){
mysql_query($sql_req);
$req_id = mysql_insert_id();
$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, tele2, record) ".
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p->date)."', '".date('Y-m-d H:i:s', $p->date)."', 'call', '".$p->comment_in."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
}
}
}
}
}
}
$sql_tel = "SELECT * FROM agency_tele2";
//echo $sql_tel;
$q_tel = mysql_query($sql_tel);
while($r_tel = mysql_fetch_assoc($q_tel)){
$company_id = $r_tel['company_id'];
$region_id = $r_tel['region_id'];
$lost_date= $r_tel['lost_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'];
$access_token = $r_tel['access_token'];
$refresh_token = $r_tel['refresh_token'];
//$refresh_token = 'eyJhbGciOiJIUzUxMiJ9.eyJVc2VyRGV0YWlsc0ltcGwiOnsiY29tcGFueUlkIjo0MzEyLCJ1c2VySWQiOjExNTk4LCJsb2dpbiI6Ijc5MDEwODcwMzAwIn0sImV4cCI6MTY2MjM4MjM3NSwic3ViIjoiUkVGUkVTSF9PUEVOQVBJX1RPS0VOIn0.iL7FvfjDIKtHVewQdCVL2pCipG-Uv1qlm9ESa-fuVQ43FJfsfqKjyIYLiqWU9dHUbDSVfx7sQQaOiS_t81vpGQ';
//echo $refresh_token."\n";
$phones_type=array();
$tele2 = new Tele2ApiClass($company_id, $region_id, $refresh_token, $access_token);
// echo urldecode('https://ats2.tele2.ru/crm/openapi/call-records/info');
if($tele2->validate_agency($agency_id) && $tele2->getToken($agency_id)){
$usersTele2 = array();
$usersCall = json_decode($tele2->getUsers());
// var_dump($usersCall);
foreach($usersCall as $user){
$tele2->saveUser($user, $agency_id);
}
$tele2->setUsers($agency_id);
//История вызовов
//('Ymd',(strtotime($last_date) - 4*60*60)).'T'.date('His', (strtotime($last_date) - 4*60*60)).'Z';
// $start_date = strtotime($lost_date) - 60*60;
//$end_date = time();
$start_date = date('Y-m-d', (strtotime($lost_date) - 4*60*60)).'T'. date('H:i:s', (strtotime($lost_date) - 4*60*60)).'+03:00';
// echo $start_date;
//$start_date = date('Y-m-d H:i:s', (strtotime('2020-10-10 10:40:00') - 2*60*60));
$end_date= date('Y-m-d').'T'.date('H:i:s').'+03:00';
$calls = $tele2->callHistory(rawurlencode($start_date), rawurlencode($end_date));
foreach($calls as $call){
//var_dump($call);
$call->date = strtotime($call->date) + $gmt*60*60;
$call_id = $tele2->stat($call, $agency_id);
//echo $call_id."\n";
$user_find_number = 0;
if(!isset($call->calleeNumber)){
$call->calleeNumber = $call->destinationNumber;
}
$type = $tele2->get_phone_type($call);
switch ($type){
case 'tele2AbonentAnswer': {
$call->comment = 'Клиент записан по исходящему звонку в tele2';
$call->comment_in = 'Исходящий звонок в Теле2';
$call->user_find_number = $call->callerNumber;
$user_find_number = $call->callerNumber;
$call->source_find = $call->callerNumber;
$call->client_find_number = $call->calleeNumber;
$call->comment_in .= ' '.'(Сотрудник '.$call->callerName.')';
$phones_type['tele2AbonentAnswer'][] = $call;
break;
}
case 'abonentTele2Answer': {
$call->comment = 'Клиент записан по входящему звонку в tele2';
$call->comment_in = 'Входящий звонок в Теле2';
$call->user_find_number = $call->calleeNumber;
$user_find_number = $call->calleeNumber;
$call->source_find = $call->calleeNumber;
$call->client_find_number = $call->callerNumber;
$call->comment_in .= ' '.'(Сотрудник '.(isset($call->calleeName) ? $call->calleeName : '').')';
$phones_type['abonentTele2Answer'][] = $call;
break;
}
case 'tele2AbonentNoAnswer': {
$call->comment = 'Клиент записан по исходящему звонку в tele2';
$call->comment_in = 'Исходящий звонок в Теле2.<br>Абонент не ответил';
$call->user_find_number = $call->callerNumber;
$user_find_number = $call->callerNumber;
$call->source_find = $call->callerNumber;
$call->client_find_number = $call->calleeNumber;
$call->comment_in .= ' '.'(Сотрудник '.$call->callerName.')';
$phones_type['tele2AbonentNoAnswer'][] = $call;
break;
}
case 'abonentTele2NoAnswer':{
$call->comment = 'Клиент записан по входящему звонку в tele2';
$call->comment_in = 'Пропущеный входящий звонок в Теле2';
$call->user_find_number = $call->calleeNumber;
$user_find_number = $call->calleeNumber;
$call->source_find = $call->calleeNumber;
$call->client_find_number = $call->callerNumber;
$call->comment_in .= ' '.'(Сотрудник '.(isset($call->calleeName) ? $call->calleeName : '').')';
$phones_type['abonentTele2NoAnswer'][] = $call;
break;
}
}
$tele2->save_user_call($call_id, $user_find_number, $main_user_id);
}
if(isset($phones_type['tele2AbonentAnswer'])){
foreach ($phones_type['tele2AbonentAnswer'] as $p) {
read_phone($tele2, $p, $agency_id, 'tele2AbonentAnswer', $main_user_id, $r_tel);
}
}
if(isset($phones_type['abonentTele2Answer'])){
foreach ($phones_type['abonentTele2Answer'] as $p) {
read_phone($tele2, $p, $agency_id, 'abonentTele2Answer', $main_user_id, $r_tel);
}
}
if(isset($phones_type['tele2AbonentNoAnswer'])){
foreach ($phones_type['tele2AbonentNoAnswer'] as $p) {
read_phone($tele2, $p, $agency_id, 'tele2AbonentNoAnswer', $main_user_id, $r_tel);
}
}
if(isset($phones_type['abonentTele2NoAnswer'])){
foreach ($phones_type['abonentTele2NoAnswer'] as $p) {
read_phone($tele2, $p, $agency_id, 'abonentTele2NoAnswer', $main_user_id, $r_tel);
}
}
$sql_up_tel = "UPDATE agency_tele2 SET lost_date = '".date('Y-m-d H:i:s')."' WHERE id = ".$r_tel['id'];
// echo $sql_up_tel;
mysql_query($sql_up_tel);
}
}