Joywork/cron/mango_call.php

573 lines
26 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?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);
}