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

573 lines
26 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
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($mango, $p, $agency_id, $type, $main_user_id, $dataApi){
//поиск пользователя
$user_id = $mango -> find_user($p['user_find_number']);
if($user_id == 0) $user_id = $main_user_id;
$funnel_id = 0;
if($user_id == 6630){
$funnel_id = 59;
} else if($agency_id == 10387){
$funnel_id = 484;
} else if($agency_id == 12028){
$funnel_id = 996;
} else if ($agency_id == 21213){
$funnel_id = 1793;
} else if ($agency_id == 20624){
$funnel_id = 1832;
} else if ($agency_id == 12461){
$funnel_id = 1854;
}
// echo $user_id."\n";
//echo $p['user_find_number'].' - '.$p['client_find_number'].' - '.date('d.m.Y', $p['start'])."\n";
$who_work_i = $user_id;
$confirm = 1;
if($agency_id == 12461){
$who_work_i = 0;
$confirm = 0;
}
if( strpos($p['client_find_number'], 'sip:') === false && $user_id != 0 && $mango->ver_phone($p['user_find_number']) != '+79917792953' && $mango->ver_phone($p['user_find_number']) != 'fmc:89917792953'){
//Поиск клиента
$client_id = $mango -> find_client($p['client_find_number']);
$source = $mango->findSource($mango->ver_phone($p['user_find_number']));
if($agency_id == 21790){
$source = $mango->findSource(isset($p['entry_id']) ? $p['entry_id'] : '');
}
//echo $source."\n";
if($client_id == 0 && strlen($mango -> ver_phone($p['client_find_number'])) == 12){
$sql_cl_mango = "INSERT INTO `clients` (fio, phone, opis, id_agent, date_add, who_work, confirm, stage, funnel_id, source) " .
" VALUES ('Клиент mango', '".$mango -> ver_phone($p['client_find_number'])."', '".$p['comment']."', {$user_id}, '".date('Y-m-d H:i:s', $p['start'])."', {$who_work_i}, '{$confirm}', '1', {$funnel_id}, '{$source}')";
if($agency_id == 4){
$sql_cl_mango = "INSERT INTO `clients` (fio, phone, opis, id_agent, date_add, who_work, confirm, stage, work_type,role, source) " .
" VALUES ('Клиент mango', '".$mango -> ver_phone($p['client_find_number'])."', '".$p['comment']."', {$user_id}, '".date('Y-m-d H:i:s', $p['start'])."', {$who_work_i}, '{$confirm}', '1','[&quot;Новостройки&quot;]', '[&quot;Покупатель&quot;]', '{$source}')";
}
mysql_query($sql_cl_mango);
$client_id = mysql_insert_id();
if($funnel_id> 0 && $client_id > 0){
$client = new Clients;
$client->get_class_etap($client_id, $funnel_id);
}
}
if($client_id != 0){
if($type == 'abonentMangoAnswer'){
$cl_stage = $mango -> 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; (По входящему звонку Mango)";
$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);
}
}
/* $sql_m = "SELECT id FROM user_client_events WHERE user_id = {$user_id} AND client_id = {$client_id} AND create_date = '".date('Y-m-d H:i:s', $p['start'])."'".
" AND `type` = 'call' AND mango = 1";
if($agency_id == 4){*/
$sql_m = "SELECT id FROM user_client_events WHERE client_id = {$client_id} AND create_date = '".date('Y-m-d H:i:s', $p['start'])."'".
" AND `type` = 'call' AND mango = 1";
// echo $sql_m."\n";
// }
$record = '';
$isRecord = false;
$q_m = mysql_query($sql_m);
//if(mysql_num_rows($q_m) == 0){
$arr_rec = explode(",", str_replace(["[","]"], "", $p['records']));
$record = '';
if(!empty($arr_rec)){
$isRecord = true;
foreach($arr_rec as $rec){
$data_rec = array(
"recording_id" => $rec,
"action" => "download"
);
$mango->params = $data_rec;
$mango->recordingSave();
}
$record = json_encode($arr_rec);
}
if(mysql_num_rows($q_m) > 0 && !empty($record)){
$r_m = mysql_fetch_assoc($q_m);
mysql_query("UPDATE user_client_events SET record='{$record}' WHERE id = {$r_m['id']}");
$req_s = "SELECT id, user_id, who_work FROM requisitions WHERE client_id=$client_id and cancel=0 and deleted=0";
// echo $req_s."\n";
$req_q = mysql_query($req_s);
$req_rows = mysql_num_rows($req_q);
$req_comm = str_replace(["Клиент","записан"], ["Заявка","записана"], $p['comment']);
if($req_rows > 0){
// if($req_rows > 1){
while($req = mysql_fetch_assoc($req_q)){
$sql_m1 = "SELECT id FROM user_client_events WHERE req_id = $req[id] AND create_date = '".date('Y-m-d H:i:s', $p['start'])."'".
" AND user_id={$req['who_work']} AND `type` = 'call' AND mango = 1 AND tracking = 0";
// echo $sql_m1."\n";
$q_m1 = mysql_query($sql_m1);
if(mysql_num_rows($q_m) > 0){
{
if(!empty($record)){
$r_m1 = mysql_fetch_assoc($q_m1);
mysql_query("UPDATE user_client_events SET record='{$record}' WHERE id = {$r_m1['id']}");
}
}
}
//}
}
}
}
else {
//Поиск чей клиент
$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'];
}
$sql_in_ev = "INSERT INTO user_client_events (user_id, client_id, create_date, schedule_date, `type`, comment, calendar_view, from_id, mango, record) ".
"VALUES ({$who_work}, {$client_id}, '".date('Y-m-d H:i:s', $p['start'])."', '".date('Y-m-d H:i:s', $p['start'])."', 'call', '".$p['comment_in']."', 1, {$user_id}, 1, '".$record."')";
// echo $sql_in_ev;
mysql_query($sql_in_ev);
if($agency_id == 8826 && !$isRecord) usleep(500000);
}
//Поиск заявки по клиенту
//var_dump($dataApi['is_req'] > 0);
if($dataApi['is_req'] > 0){
if(!$isRecord){
if(!empty(trim($p['records'], '\n'))){
$arr_rec = explode(",", str_replace(["[","]"], "", $p['records']));
$record = '';
if(!empty($arr_rec)){
$isRecord = true;
foreach($arr_rec as $rec){
$data_rec = array(
"recording_id" => $rec,
"action" => "download"
);
$mango->params = $data_rec;
$mango->recordingSave();
}
$record = json_encode($arr_rec);
}
}
}
$req_s = "SELECT id, user_id, who_work FROM requisitions WHERE client_id=$client_id and cancel=0 and deleted=0";
if($agency_id == 22666){ //Поиск любой заявки по клиенту с телефонии
$req_s = "SELECT id, user_id, who_work, created_at, deleted FROM requisitions WHERE client_id=$client_id and cancel=0 and integration in (1,2) order by id desc limit 1";
}
$req_q = mysql_query($req_s);
$req_rows = mysql_num_rows($req_q);
$req_comm = str_replace(["Клиент","записан"], ["Заявка","записана"], $p['comment']);
//echo $req_rows."\n";
if($req_rows > 0){
if($req_rows > 1){
while($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['start'])."'".
" AND user_id={$req['who_work']} AND `type` = 'call' AND mango = 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, mango, record) ".
"VALUES ($req[who_work], $req[id], '".date('Y-m-d H:i:s', $p['start'])."', '".date('Y-m-d H:i:s', $p['start'])."', 'call', '".$p['comment_in']."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
} else {
if(!empty($record)){
$r_m = mysql_fetch_assoc($q_m);
mysql_query("UPDATE user_client_events SET record='{$record}' WHERE id = {$r_m['id']}");
}
}
}
} else {
$req = mysql_fetch_assoc($req_q);
if($agency_id == 22666){
if($req['deleted'] > 0 && !isset($_SESSION['id'])){
$up_client = "UPDATE `requisitions` SET `stage`='1', `deleted` = 0, confirm=1, `who_work`='{$user_id}' WHERE `id`=$req[id]";
mysql_query($up_client);
$dop_text = "Переведена в активные по звонку ".date('Y-m-d H:i:s', $p['start']);
$in_ev = "INSERT INTO `events_clients` (`user_id`, `req_id`, `event`, `dop_text`, `read`) VALUES ('{$user_id}', '$req[id]', 'update', '{$dop_text}', 1)";
mysql_query($in_ev);
}
}
$sql_m = "SELECT id FROM user_client_events WHERE req_id = $req[id] AND create_date = '".date('Y-m-d H:i:s', $p['start'])."'".
" AND user_id={$req['who_work']} AND `type` = 'call' AND mango = 1 AND tracking = 0";
if($agency_id == 22666){
$sql_m = "SELECT id FROM user_client_events WHERE req_id = $req[id] AND create_date = '".date('Y-m-d H:i:s', $p['start'])."'".
" AND `type` = 'call' AND mango = 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, mango, record) ".
"VALUES ($req[who_work], $req[id], '".date('Y-m-d H:i:s', $p['start'])."', '".date('Y-m-d H:i:s', $p['start'])."', 'call', '".$p['comment_in']."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
} else if(!empty($record)){
$r_m = mysql_fetch_assoc($q_m);
mysql_query("UPDATE user_client_events SET record='{$record}' WHERE id = {$r_m['id']}");
}
}
}
else {
$funnel_id = 0;
$nameReq = 'Заявка Mango';
$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'];
}
$req_id = 0;
if($agency_id == 11082){
$funnel_id = 479;
} else if($agency_id == 10429){
$funnel_id = 551;
} else if($agency_id == 13339){
$funnel_id = 665;
} else if($agency_id == 13386){
$funnel_id = 796;
} else if($agency_id == 10387){
$funnel_id = 482;
} else if ($agency_id == 19570) {
$funnel_id = 1484;
} else if ($agency_id == 21213) {
$funnel_id = 1793;
} else if ($agency_id == 21790) {
$funnel_id = 1980;
} else if ($agency_id == 22746){
if($type == 'abonentMangoAnswer' || $type == 'abonentMangoNoAnswer'){
$funnel_id = 2155;
} else {
$funnel_id = 2108;
}
} else if ($agency_id == 22666) {
$funnel_id = 2096;
}
$sql_req = "INSERT INTO `requisitions` SET name='{$nameReq}', integration=1, user_id={$user_id}, client_id={$client_id}, stage=1, type_id=1, who_work={$user_id}, description='{$req_comm}', source='{$source}'";
// echo $sql_req."\n";
if($funnel_id > 0) {
$sql_req .= ", funnel_id={$funnel_id}";
$reqClass = new Requisitions();
}
if($agency_id == 9973 || $agency_id == 7864 || $agency_id == 10982){
if($type == 'abonentMangoAnswer' || $type == 'abonentMangoNoAnswer'){
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, mango, record) ".
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p['start'])."', '".date('Y-m-d H:i:s', $p['start'])."', 'call', '".$p['comment_in']."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
}
} else if($agency_id != 11082 && $agency_id != 12254 && $agency_id != 12343 && $agency_id != 12482 && $agency_id != 12762 && $agency_id != 8826 && $agency_id != 13394 && $agency_id != 13430 && $agency_id != 14191 && $agency_id != 14310 && $agency_id != 16553 && $agency_id != 20624 && $agency_id != 12461 && $agency_id != 20947) {
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, mango, record) ".
"VALUES ($user_id, $req_id, '".date('Y-m-d H:i:s', $p['start'])."', '".date('Y-m-d H:i:s', $p['start'])."', 'call', '".$p['comment_in']."', 1, {$user_id}, 1, '".$record."')";
mysql_query($sql_in_ev);
}
if($req_id > 0 && $funnel_id > 0){
$reqClass->get_class_etap($req_id, $funnel_id);
}
}
}
}
}
}
$sql_mango = "SELECT * FROM agency_mango WHERE `type` = 'mango'";
if(!empty($_SESSION['id'])){
$sql_mango = "SELECT * FROM agency_mango WHERE `type` = 'mango' and agency_id=22666";
}
$q_mango = mysql_query($sql_mango);
while($r_mango = mysql_fetch_assoc($q_mango)){
$api_key = $r_mango['api_key'];
$api_salt = $r_mango['api_salt'];
$last_date = $r_mango['last_date'];
$agency_id =$r_mango['agency_id'];
$main_user_id = $r_mango['main_user'];
$lost_update = $r_mango['lost_update'];
$mango = new MangoApiClass($api_key, $api_salt);
if((time() - $lost_update) >= 86400){
$groupsMango = json_decode($mango->groups());
if (!empty($groupsMango->groups)) {
$mango->saveGroups($groupsMango->groups, $agency_id);
}
}
$users = json_decode($mango->configUsers());
$userArr = array();
//Проверка пользователей телефонии
if(isset($users->users)){
foreach($users->users as $user){
$userArr[] = array();
// echo json_encode($user, JSON_UNESCAPED_UNICODE);
// if((time() - $lost_update) >= 86400){
$mango->saveUser($user, $agency_id);
// }
$mango_user = array();
$mango_user['agency_id'] = $agency_id;
if(isset($user->general->email)){
$mango_user['mango_email'] = $user->general->email;
} else {
$mango_user['mango_email'] = '';
}
foreach($user->telephony->numbers as $number){
if($number->protocol == 'sip') $mango_user['mango_sip'] = $number->number;
if($number->protocol == 'tel') $mango_user['mango_tel'] = $number->number;
}
if($mango_user['mango_email'] != '' || isset($mango_user['mango_tel'])){
$sql = "SELECT `id`, `agency_name`, `first_name`, `last_name`, `middle_name` FROM `users`"; //email = '{$mango_user['mango_email']}'";
$where_mango = "";
if(isset($mango_user['mango_email']) && !empty($mango_user['mango_email'])){
$where_mango .= " WHERE email = '{$mango_user['mango_email']}'";
}
if(isset($mango_user['mango_tel'])){
if($where_mango == ''){
$where_mango .= " WHERE phone = '+".str_replace('+','',$mango_user['mango_tel'])."'";
} else {
$where_mango .= " OR phone = '+".str_replace('+','',$mango_user['mango_tel'])."'";
}
}
if($where_mango != ''){
$sql .= $where_mango;
$q = mysql_query($sql);
if(mysql_num_rows($q) > 0){
$r = mysql_fetch_assoc($q);
$mango_user['user_id'] = $r['id'];
$sql_very = "SELECT id FROM mango_users WHERE user_id = ".$r['id'];
$q_very = mysql_query($sql_very);
if(mysql_num_rows($q_very) > 0){
$set = '';
foreach ($mango_user as $key => $val){
if($key != 'user_id'){
if($set != '') $set .= ', ';
$set .= $key." = '".$val."'";
}
}
$sql_up = "UPDATE mango_users SET ".$set." WHERE user_id = ".$mango_user['user_id'];
mysql_query($sql_up);
} else {
$keys = '';
$values = '';
foreach ($mango_user as $key => $val){
if($keys != '') $keys .= ', ';
if($values != '') $values .= ', ';
$keys .= $key;
$values .= "'".$val."'";
}
$sql_in = "INSERT INTO mango_users (".$keys.") VALUES (".$values.")";
//echo $sql_in;
mysql_query($sql_in);
}
}
}
}
}
if((time() - $lost_update) >= 86400){
$sql_up_mango = "UPDATE agency_mango SET lost_update = '".time()."' WHERE id = ".$r_mango['id'];
mysql_query($sql_up_mango);
}
$usersIds = array();
$w = new WebHookIn();
$usersIds = $w->getAllUserAgency($agency_id);
//var_dump($usersIds);
$mango->set_users($usersIds);
/*if($_SESSION['id'] > 0){
$last_date='2026-03-27 08:00:00';
}*/
$data = array(
"date_from" => (strtotime($last_date) - 60*60),
"date_to" => time(),
"from" => array(
"extension"=>"",
"number" => ""
),
"to"=> array(
"extension"=>"",
"number"=>""
)
);
$mango->params = $data;
$mango->requestPhones();
//$mango->params = $data;
$phones = $mango->resultPhones();
if(empty($phones)){
sleep(10);
$phones = $mango->resultPhones();
}
// var_dump($phones);
$arr_heder = array('records', 'start', 'finish', 'answer', 'from_extension', 'from_number', 'to_extension', 'to_number', 'disconnect_reason', 'entry_id', 'line_number', 'location');
$arr_phone = explode("\r\n", $phones);
//var_dump($arr_phone);
$phone_data = array();
foreach ($arr_phone as $str){
if (trim($str) === '') {
continue;
}
//echo $str.'<br>';
$arr_str = explode(";", $str);
$phone_temp = array();
foreach($arr_str as $key => $value){
if (isset($arr_heder[$key])) {
$phone_temp[$arr_heder[$key]] = $value;
}
}
$phone_data[] = $phone_temp;
}
//var_dump($phone_data);
//Массив по типам звонков
$phones_type = array();
foreach ($phone_data as $p){
/* if($agency_id == 8826){
}*/
//echo json_encode($p).'<br>';
// var_dump($p)."\n";
$type = $mango->get_phone_type($p);
$calls_ids = $mango->stat($p, $agency_id);
$call_id = $calls_ids['id'];
$call_id_pg = $calls_ids['idpg'];
$type = $mango->get_phone_type($p);
$user_find_number = 0;
switch ($type){
case 'mangoAbonentAnswer': {
$p['comment'] = 'Клиент записан по исходящему звонку в mango';
$p['comment_in'] = 'Исходящий звонок в Mango';
$p['user_find_number'] = isset($p['from_number']) ? $p['from_number'] : '';
$user_find_number = isset($p['from_number']) ? $p['from_number'] : '';
$p['client_find_number'] = isset($p['to_number']) ? $p['to_number'] : '';
$phones_type['mangoAbonentAnswer'][] = $p;
break;
}
case 'abonentMangoAnswer': {
$p['comment'] = 'Клиент записан по входящему звонку в mango';
$p['comment_in'] = 'Входящий звонок в Mango';
$p['user_find_number'] = isset($p['to_number']) ? $p['to_number'] : '';
$user_find_number = isset($p['to_number']) ? $p['to_number'] : '';
$p['client_find_number'] = isset($p['from_number']) ? $p['from_number'] : '';
$phones_type['abonentMangoAnswer'][] = $p;
break;
}
case 'mangoAbonentNoAnswer': {
$p['comment'] = 'Клиент записан по исходящему звонку в mango';
$p['comment_in'] = 'Исходящий звонок в Mango.<br>Абонент не ответил';
$p['user_find_number'] = isset($p['from_number']) ? $p['from_number'] : '';
$user_find_number = isset($p['from_number']) ? $p['from_number'] : '';
$p['client_find_number'] = isset($p['to_number']) ? $p['to_number'] : '';
$phones_type['mangoAbonentNoAnswer'][] = $p;
break;
}
case 'abonentMangoNoAnswer':{
$p['comment'] = 'Клиент записан по входящему звонку в mango';
$p['comment_in'] = 'Пропущеный входящий звонок в Mango';
$p['user_find_number'] = isset($p['to_number']) ? $p['to_number'] : '';
$user_find_number = isset($p['to_number']) ? $p['to_number'] : '';
$p['client_find_number'] = isset($p['from_number']) ? $p['from_number'] : '';
$phones_type['abonentMangoNoAnswer'][] = $p;
break;
}
}
// $mango->save_user_call($call_id, $user_find_number, $main_user_id);
$mango->save_user_call_pg($call_id_pg, $user_find_number, $main_user_id);
}
if (!empty($phones_type['abonentMangoAnswer'])) {
foreach ($phones_type['abonentMangoAnswer'] as $p) {
read_phone($mango, $p, $agency_id, 'abonentMangoAnswer', $main_user_id, $r_mango);
}
}
if (!empty($phones_type['mangoAbonentAnswer'])) {
foreach ($phones_type['mangoAbonentAnswer'] as $p) {
read_phone($mango, $p, $agency_id, 'mangoAbonentAnswer',$main_user_id, $r_mango);
}
}
if (!empty($phones_type['mangoAbonentNoAnswer'])) {
foreach ($phones_type['mangoAbonentNoAnswer'] as $p) {
read_phone($mango, $p, $agency_id, 'mangoAbonentNoAnswer',$main_user_id, $r_mango);
}
}
if (!empty($phones_type['abonentMangoNoAnswer'])) {
foreach ($phones_type['abonentMangoNoAnswer'] as $p) {
read_phone($mango, $p, $agency_id, 'abonentMangoNoAnswer',$main_user_id, $r_mango);
}
}
}
$sql_up_mango = "UPDATE agency_mango SET last_date = '".date('Y-m-d H:i:s')."' WHERE id = ".$r_mango['id'];
// if($agency_id != 8826)
mysql_query($sql_up_mango);
}