Joywork/webhooks/leadback.php
2026-05-22 21:21:54 +03:00

369 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");
function clearInputElement($el2) // очистка входящего элимента
{
$el = $el2;
$el = strip_tags($el); // от тегов
$el = htmlspecialchars($el); // от кавычек и прочего
$el = str_replace("\n", "<br>", $el);
$el = str_replace("\r", "", $el);
$el = mysql_real_escape_string($el); // от MySQL-инъекций
$el = trim($el); // от лишних пробелов
$el = stripslashes($el); // от слэшей
return $el;
}
header('Content-Type: application/json');
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
$pdo = new MysqlPdo(hst, ndb, user, pass);
$sql = "SET NAMES 'utf8'";
$pdo->query($sql);
$content = file_get_contents('php://input');
if($_SESSION['id'] == 19895){
$content = '{"event_type":"call","data":{"id_call":"7944155","user_id":"51874","widget_id":"79918","date_create":"2025-07-09 13:30:00","date_update":"2025-07-09 13:30:00","callback_phone":"79082166604","operator_phone":"79654730400","department":null,"site":"marinagardensochi.ru","user_tariff":"pro1","tariffed_minutes":1,"duration":38,"record_url":"https:\/\/storage-gw-ru-02.voximplant.com\/voximplant-records\/2025\/07\/09\/ZmVhMWJhODM0Yjc1ODU2Yjc0OGQ4MGE3YjBjZTg0YWEvaHR0cDovL3d3dy1ydS0yOS0yOC52b3hpbXBsYW50LmNvbTo4MDgwL3JlY29yZHMvMjAyNS8wNy8wOS9DQUU3NUY4QTgyQkU1MTAwLjE3NTIwNTcwMTcuMzA5MDY1OS5tcDM-.mp3?record_id=4678339395","callback_answer":"yes","visit_uuid":"7bbd273c-9fa1-4034-a4f7-2b5a22a62171","visit_id":"d956c1e4-ef27-3823-accc-9045263c8495","visit_ip":"195.239.161.77","visit_source":"referal","delayed_time":null,"delayed_type":null,"status":"complete","call_time":"2025-07-09 13:30:00","visit_data":{"visit_id":"d956c1e4-ef27-3823-accc-9045263c8495","date_visit":"2025-07-09 13:29:31","referer_url":"https:\/\/my.creatium.io\/","page_url":"https:\/\/marinagardensochi.ru\/","call_url":"https:\/\/marinagardensochi.ru\/","visit_ip":"195.239.161.77","visit_ua":"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/138.0.0.0 Safari\/537.36","ya_cid":"1730989460591357496","ya_counter":"96046821","visit_source":"referal","utm_source":"","utm_medium":"","utm_campaign":"","utm_term":"","utm_content":""},"visit_profile":[]},"token":"61d64a35558b92a5dc79dc4f5d6bbc5f"}';
}
$data = json_decode($content, true);
//var_dump($data);
if(!isset($data['token']) || empty($data['token'])) die();
$sql_user = "SELECT api_key, users.id FROM user_api_keys LEFT JOIN users ON users.id = user_api_keys.user_id WHERE api_key = '{$data['token']}'";
$q_user = $pdo->query($sql_user, true);
$r_user = $pdo->fetch_assoc($q_user);
if(!$r_user || empty($r_user['id'])) {
die();
} else if ((int)$r_user['id'] > 0){
$user_id = (int)$r_user['id'];
$user = new User();
$user->get($user_id);
if($data['event_type'] == 'call' && isset($data['data']) && !empty($data['data'])){
$message = $data['data'];
} else {
die();
}
$domain = $message['site'];
$nameSourse = $message['visit_source'];
$WebHookIn = new WebHookIn();
$funnel_id = 0;
$user_id = 0;
$funnel_id_req = 0;
$activities_id = 0;
$source_id = 0;
$users = array();
$client_id = 0;
$email = '';
$partner = 0;
$user_id_req = 0;
$agency_id = 0;
$who_work = 0;
if($user->agencyId == 19895){
$user_id = 19895;
$agency_id = 19895;
$funnel_id_req = 1513;
$user_id_req = 19895;
}
if($user->agencyId == 5238) {
$user_id = 5238;
$agency_id = 5238;
$funnel_id = 0;
$funnel_id_req = 0;
$user_id_req = 5238;
}
$users = $WebHookIn->getAllUserAgency($user->agencyId);
$mango = new MangoApiClass(0, 0);
$phone_user = $message['operator_phone'];
$phone_user = $mango->ver_phone($phone_user);
//Поиск сотрудника ответственного
$sql_who_work = "SELECT * FROM users WHERE phone = '{$phone_user}'";
$q_who_work = $pdo->query($sql_who_work);
if($pdo->num_rows($q_who_work) > 0){
$r_who_work = $pdo->fetch_assoc($q_who_work);
$who_work = (int)$r_who_work['id'];
if($message['status'] == 'failed') {//Ищем ропа
if($r_who_work['id_manager'] > 0 && $r_who_work['manager'] != 1){
$who_work = (int)$r_who_work['id_manager'];
}
}
}
/*if($_SESSION['id'] == 19895){
echo $sql_who_work."\n";
echo $who_work."\n";
die();
}*/
$fio_client = "Имя не указано";
$opis = 'Источник: '.$nameSourse;
if(isset($message['visit_profile']) && !empty($message['visit_profile'])){
if(!empty($message['visit_profile']['name'])) $fio_client = trim($message['visit_profile']['name']);
if(!empty($message['visit_profile']['email'])) $email = trim($message['visit_profile']['email']);
}
$phone = $message['callback_phone'];
$phone = $mango->ver_phone($phone);
if($agency_id == 19895){
$opis = '';
}
if(!isset($phone)) die();
if($source_id == 0){
//Поиск источника по домену
$sql_d = "SELECT *, (SELECT group_id FROM advertising_sources WHERE id = advertising_sources_domain.adv_id) AS group_id FROM `advertising_sources_domain` WHERE domain = '{$domain}' AND `type` = 4";
$q_d = $pdo->query($sql_d, true);
$r_d = $pdo->fetch_assoc($q_d);
if($r_d){
$source_id = (int)$r_d['adv_id'];
$group_id = (int)$r_d['group_id'];
}
}
if($source_id == 0){
//Поиск источника
$sql_source = "SELECT id FROM `advertising_sources` WHERE source
= '".$nameSourse."' AND (user_id in (".implode(',', $users).") or manager_id in (".implode(',', $users)."))";
$q_source = $pdo->query($sql_source);
$r_source = $pdo->fetch_assoc($q_source);
if($r_source['id'] > 0){
$source_id = $r_source['id'];
//echo $source_id."\n";
} else {
$sql_up = "INSERT INTO `advertising_sources` SET source='".$nameSourse."', user_id={$user_id}, manager_id={$user->agencyId}";
$pdo->query($sql_up);
$source_id = $pdo->insert_id();
}
}
// echo $source_id."\n";
//die();
//Поиск тега
if($agency_id == 19895){
if($source_id > 0){
$sql_aa = "SELECT * FROM advertising_sources_activities WHERE source_id = {$source_id}";
$q_aa = $pdo->query($sql_aa, true);
while($r_aa = $pdo->fetch_assoc($q_aa)) {
$activities_ids[] = (int)$r_aa['activities_id'];
}
}
// var_dump($activities_ids);
} else {
$sql_activites = "SELECT id FROM `activities` WHERE name = '".$nameSourse."' AND (user_id in (".implode(',', $users).") or manager_id in (".implode(',', $users)."))";
$q_aclivites = $pdo->query($sql_activites);
$r_activites = $pdo->fetch_assoc($q_aclivites);
if($r_activites['id'] > 0){
$activities_id = $r_activites['id'];
//echo $activities_id."\n";
} else {
$sql_up = "INSERT INTO `activities` SET name='".$nameSourse."', user_id={$user_id}, manager_id={$user->agencyId}";
$pdo->query($sql_up);
$activities_id = $pdo->insert_id();
}
}
$hot = 0;
if($agency_id == 19895 && $group_id == 290){
$hot = 1;
}
$confirm = 1;
//$who_work = $user_id;
if($agency_id == 19895){
if($who_work == 0){
//Поиск ответственного по источнику
$sql_w = "SELECT * FROM advertising_sources_who_work WHERE adv_id = {$source_id}";
$q_w = $pdo->query($sql_w);
if($pdo->num_rows($q_w) > 0){
$r_w = $pdo->fetch_assoc($q_w);
$user_id = $who_work = (int)$r_w['who_work'];
} /*else {
$confirm = 0;
$who_work = 0;
}*/
}
}
if($who_work == 0) $who_work = $user_id;
else if($who_work > 0) $user_id = $who_work;
$sql = "SELECT `id`, `stage`, `deleted`, `fio` FROM `clients` WHERE cancel=0 AND (phone = '$phone' OR id in (SELECT client_id FROM clients_phone2 WHERE phone = '$phone')) and (who_work in (".implode(',', $users).") or id_agent in (".implode(',', $users)."))";
$client = $pdo->fetch_assoc($pdo->query($sql));
if(!empty($client) && $client){
$client_id = $client['id'];
$fio_client = $client['fio'];
} else {
$sql = "INSERT INTO clients SET phone='{$phone}', hot={$hot}, email='{$email}', fio='{$fio_client}', opis='{$opis}', id_agent={$user_id}, who_work={$who_work}, date_add=NOW(), confirm={$confirm}, funnel_id={$funnel_id}, stage=1, source= '{$source_id}', integration=12";
//echo $sql;
$pdo->query($sql);
$client_id = $pdo->insert_id();
if($funnel_id > 0){
$Clients = new Clients;
$Clients->get_class_etap($client_id, $funnel_id);
}
if($activities_id){
$sql_a = "INSERT INTO `clients_activities` (`activity_id`, `client_id`) VALUES ({$activities_id}, {$client_id})";
$pdo->query($sql_a);
} else if($activities_ids && !empty($activities_ids)){
foreach($activities_ids as $activities_id){
$sql_a = "INSERT INTO `clients_activities` (`activity_id`, `client_id`) VALUES ({$activities_id}, {$client_id})";
$pdo->query($sql_a);
}
}
}
if($client_id > 0){
$Requisitions = new Requisitions($pdo, true);
$web_hook_in = new WebHookIn($pdo);
$reqid=(int)$web_hook_in->check_is_req($who_work, $source_id, $client_id);
if($reqid > 0 && $agency_id == 19895) {
$comment = "Обращался повторно<br>";
if(!empty($activities_ids)){
$sql_activites = "SELECT * FROM activities WHERE id in (".implode(',', $activities_ids).")";
$q_aclivites = $pdo->query($sql_activites);
$comment .= "Теги: ";
while($r_activites = $pdo->fetch_assoc($q_aclivites)){
$comment .= $r_activites['name']." ";
}
$sql_ev = "INSERT INTO user_client_events (req_id, `type`, comment, user_id, from_id, create_date, calendar_view)
VALUES ($reqid, 'comment', '{$comment}', {$user_id}, {$user_id}, NOW(), 1)";
$pdo->query($sql_ev);
}
die();
}
$name_req = 'Подбор объекта для '.$fio_client;
if($agency_id == 19895){
$name_req = $fio_client;
}
//Поиск воронки по источнику
if($source_id > 0){
$sql_req_funnel="SELECT * FROM advertising_sources_funnel WHERE source_id = {$source_id}";
$q_req_funnel = $pdo->query($sql_req_funnel, true);
$r_req_funnel = $pdo->fetch_assoc($q_req_funnel);
if($r_req_funnel && $r_req_funnel['funnel_id_req'] > 0){
$funnel_id_req = (int)$r_req_funnel['funnel_id_req'];
}
}
$sql = "INSERT INTO requisitions SET client_id={$client_id}, hot={$hot}, name='{$name_req}', description='{$opis}', user_id={$user_id}, integration=12, who_work={$who_work}, type_id=1, confirm={$confirm}, funnel_id={$funnel_id_req}, stage=1, source= '{$source_id}'";
$pdo->query($sql);
$req_id = $pdo->insert_id();
if($funnel_id_req > 0){
$Requisitions->get_class_etap($req_id, $funnel_id_req);
}
if($activities_ids && !empty($activities_ids)){
foreach($activities_ids as $activities_id){
$sql_a = "INSERT INTO `requisitions_activities` (`activity_id`, `req_id`) VALUES ({$activities_id}, {$req_id})";
$pdo->query($sql_a);
}
} else
if($activities_id){
$sql_a = "INSERT INTO `requisitions_activities` (`activity_id`, `req_id`) VALUES ({$activities_id}, {$req_id})";
$pdo->query($sql_a);
}
if($who_work > 0){
if($agency_id != 19895 && $agency_id != 5238){
$comment = "Источник с leadback ".$nameSourse;
$sql_add = "INSERT INTO `events_clients` (`user_id`, `req_id`, `from_id`, `event`, `dop_text`, `read`) ".
"VALUES ({$who_work}, {$req_id}, {$who_work}, 'add', '{$comment}', 2)";
$pdo->query($sql_add);
/*$sql_in_ev = "INSERT INTO user_client_events (user_id, req_id, create_date, schedule_date, `type`, comment, calendar_view, from_id) ".
"VALUES ($user_id_req, $req_id, '".date('Y-m-d H:i:s')."', '".date('Y-m-d H:i:s', strtotime('+15 minutes'))."', 'call', '{$comment}', 0, {$user_id_req})";
$pdo->query($sql_in_ev);*/
} else {
$telega = new Telegram();
$chat_id = $Requisitions->get_caht_id($who_work);
if($chat_id > 0){
$text = "На основе Входящего звонка ".date('d.m.Y H:i', strtotime($message['call_time']));
$text .= "\nсоздана заявка ID ".$req_id;
$text .= "\nпо клиенту: ".$fio_client. " (ID ".$client_id. ")";
try {
$telega->send($text, $chat_id);
} catch(Exception $e){
}
}
file_put_contents(__DIR__.'/log_test_leadback.php.txt', date('d.m.Y H:i:s').' '.$chat_id. ' ' .$text. "\n", FILE_APPEND);
}
}
if($agency_id == 19895 && $req_id > 0){
$arr_data = array();
if(isset($nameSourse) && !empty($nameSourse)){
$arr_data[] = "({$req_id}, 321, 1, '\"{$nameSourse}\"')";
}
if(!empty($arr_data)){
$sql_data = "INSERT INTO requisition_data (`req_id`, `field_id`, `type`, `value`) VALUES ".implode(',' , $arr_data);
//echo $sql_data;
$pdo->query($sql_data);
}
$rqClass = new Requisitions(null, true);
$rqClass->set_agencyId($agency_id);
$rqClass->set_userId($user_id);
$rqClass->autoUnitReq(1, $req_id);
}
}
}