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

472 lines
19 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");
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'] == 5238){
$content = '{"bothelp_user_id":28,"created_at":1758108805,"name":"тест имя","first_name":"Владимир","last_name":"Тех","profile_link":"","email":"","phone":"+79043322538","ref":"utm_source=instayana","utm_medium":"","utm_source":"instayana","utm_campaign":"","utm_term":"","utm_content":"","conversations_count":1,"first_contact_at":1734542246,"last_contact_at":1758108805,"user_id":"1111564648","messenger_username":"technical_spec","Город для недвижимости":"","Первоначальный взнос на руках":null,"Первоначальный взнос на руках текст":"100","Порядковый номер":4,"Сколько комнат":"7","Таргет":"Таргет","Ценовой диапазон":"450-900","created_at_show":"17/09/2025 11:33:25 UTC","cuid":"a1fs.s", "token":"238f8564db0c9084fcfaf1450e2d511f"}';
}
$message = json_decode($content, true);
var_dump($message);
if(!isset($message['token']) || empty($message['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 = '{$message['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);
$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;
$confirm = 1;
if($user->agencyId == 5238) {
$user_id = 5238;
$agency_id = 5238;
$funnel_id = 0;
$funnel_id_req = 0;
$user_id_req = 5238;
}
if($user->agencyId == 19111){
$user_id = 19132;
$agency_id = 19111;
$funnel_id_req = 1400;
$user_id_req = 19132;
}
$WebHookIn = new WebHookIn($pdo);
$users = $WebHookIn->getAllUserAgency($user->agencyId);
$mango = new MangoApiClass(0, 0);
var_dump($users);
$phone = $mango->ver_phone(str_replace(['(',')',' ','-'], '', $message['phone']));
if(!isset($phone) || empty($phone)) die();
$fio_client = "";
$email = '';
$opis = '';
if(isset($message['first_name']) && !empty($message['first_name']))
$fio_client .= $message['first_name'];
if(isset($message['name']) && !empty($message['name'])){
if($fio_client != '') $fio_client .= ' ';
$fio_client .= $message['name'];
}
if(isset($message['last_name']) && !empty($message['last_name'])){
if($fio_client != '') $fio_client .= ' ';
$fio_client .= $message['last_name'];
}
if(empty(trim($fio_client))){
$fio_client = "Имя не указано";
}
if(isset($message['email'])){
$email = $message['email'];
}
$source_name = trim($message['utm_source']);
$sourceArray = array(
2474 =>'instba',
2475 =>'instayana',
2476 =>'vk',
2477 =>'offline',
2479 =>'personal',
2480 =>'yana',
2481 =>'avitopro',
2482 =>'avito',
2484 =>'tgba',
2513 =>'site',
3858 =>'tgyana',
3859 =>'tiktok',
3860 =>'treds',
3861 =>'reklama'
);
$source_id = 0;
if(!empty($source_name)){
$source_id = (int)array_search($source_name, $sourceArray);
}
$temp_mess = ['name', 'first_name', 'last_name', 'email', 'phone', 'ref', 'token'];
foreach($message as $key => $mess){
if(!in_array($key, $temp_mess)){
if($opis != '') $opis .= '<br>';
if($key == 'created_at'){
$opis .= $key.': '.date('d.m.Y H:i:s', $mess);
} else {
$opis .= $key.': '.$mess;
}
}
}
echo $opis."\n";
var_dump($source_id);
$nameSourse = '';
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` = 2";
// echo $sql_d."\n";
$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, group_id FROM `advertising_sources` WHERE source
= '".$nameSourse."' AND (user_id in (".implode(',', $users).") or manager_id in (".implode(',', $users)."))";
// echo $sql_source."\n";
$q_source = $pdo->query($sql_source);
$r_source = $pdo->fetch_assoc($q_source);
if($r_source['id'] > 0){
$source_id = $r_source['id'];
$group_id = (int)$r_source['group_id'];
} 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();
}
}
//Поиск тега
//Поиск тега
if($agency_id == 19895){
if($source_id > 0){
$sql_aa = "SELECT * FROM advertising_sources_activities WHERE source_id = {$source_id}";
echo $sql_aa."\n";
$q_aa = $pdo->query($sql_aa, true);
while($r_aa = $pdo->fetch_assoc($q_aa)) {
$activities_ids[] = (int)$r_aa['activities_id'];
}
}
} else if ($activities_id == 0 && !empty($nameSourse)) {
$sql_activites = "SELECT id FROM `activities` WHERE name = '".$nameSourse."' AND (user_id in (".implode(',', $users).") or manager_id in (".implode(',', $users)."))";
echo $sql_activites."\n";
$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();
}
}
if($agency_id == 19895){
$opis = '';
}
$hot = 0;
if($agency_id == 19895 && $group_id == 290){
$hot = 1;
}
echo $hot."\n";
$confirm = 1;
$who_work = $user_id;
if($agency_id == 19895){
//Поиск ответственного по источнику
$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;
}
}
$sql = "SELECT `id`, `stage`, `deleted` 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'];
} 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=13";
if($agency_id == 19895){
// echo $sql; die();
}
/* if($_SESSION['id'] == 19895){
echo $sql."\n";
die();
}*/
if(isset($partner) && $partner > 0){
$doers[$user_id] = 1;
$doers[$partner] = 1;
$sql .= ", doers = '".clearInputElement(json_encode($doers))."', doer_clients=1";
}
$pdo->query($sql);
$client_id = $pdo->insert_id();
if($partner > 0) {
$sql_conf = "INSERT INTO `events_clients` (`user_id`, `client_id`, `from_id`, `event`, `read`, `send_telegramm`) VALUES (".$user_id.", ".$client_id.", ".$partner.", 'transmitted_parallel', 1,1)";
$pdo->query($sql_conf);
}
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 && $user->agencyId != 17347){
$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=13, who_work={$who_work}, type_id=1, confirm=$confirm, funnel_id={$funnel_id_req}, stage=1, source= '{$source_id}'";
/* if($_SESSION['id'] == 19895){
echo $sql;
//die();
}*/
if(isset($partner) && $partner > 0){
$doers[$user_id] = 1;
$doers[$partner] = 1;
$sql .= ", doers = '".clearInputElement(json_encode($doers))."', doer_clients=1";
}
/* if($_SESSION['id'] == 19895){
echo $sql;
die();
}*/
$pdo->query($sql);
$req_id = $pdo->insert_id();
if($funnel_id_req > 0){
$Requisitions = new Requisitions();
$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){
$comment = "BotHelp";
$sql_add = "INSERT INTO `events_clients` (`user_id`, `req_id`, `from_id`, `event`, `dop_text`, `read`) ".
"VALUES ({$user_id}, {$req_id}, {$who_work}, 'add', '{$comment}', 2)";
$pdo->query($sql_add);
if($agency_id != 19895){
$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, {$who_work})";
$pdo->query($sql_in_ev);
if($partner > 0) {
$sql_conf = "INSERT INTO `events_clients` (`user_id`, `req_id`, `from_id`, `event`, `read`, `send_telegramm`) VALUES (".$user_id.", ".$req_id.", ".$partner.", 'transmitted_parallel', 2,0)";
$pdo->query($sql_conf);
}
}
}
if($agency_id == 19895 && $req_id > 0){
$arr_data = array();
if(isset($message->answers)){
foreach($message->answers as $key => $answer){
$sql_fields = "SELECT * FROM `client_req_fields` WHERE title = '".trim($answer->q)."' AND agency_id = {$agency_id}";
$q_fields = $pdo->query($sql_fields);
$r_fields = $pdo->fetch_assoc($q_fields);
if($r_fields){
if(is_array($answer->a)){
foreach($answer->a as $keyan => $an){
echo $an."\n";
}
} else {
$value = trim($answer->a);
if($r_fields['type'] == 1 || $r_fields['type'] == 0){
$arr_data[] = "({$req_id}, {$r_fields['id']}, 1, '\"{$value}\"')";
} elseif ($r_fields['type'] == 2){
$params = json_decode($r_fields['params'], true);
//var_dump($params['items']);
foreach($params['items'] as $item){
if(trim($item['name']) == $value){
$id_item = $item['value'];
$arr_data[] = "({$req_id}, {$r_fields['id']}, 1, {$id_item})";
}
}
}
// echo $answer->a."\n";
}
}
}
}
if(isset($message->extra->utm) && !empty($message->extra->utm)){
//$opis .= " &lt;br&gt;utm: ";
foreach($message->extra->utm as $keyutm => $utm){
$sql_fields = "SELECT * FROM `client_req_fields` WHERE title = 'UTM ".trim($keyutm)."' AND agency_id = {$agency_id}";
$q_fields = $pdo->query($sql_fields);
$r_fields = $pdo->fetch_assoc($q_fields);
if($r_fields){
if($r_fields['type'] == 1 || $r_fields['type'] == 0){
$arr_data[] = "({$req_id}, {$r_fields['id']}, 1, '\"{$utm}\"')";
} elseif ($r_fields['type'] == 2){
$params = json_decode($r_fields['params'], true);
//var_dump($params['items']);
foreach($params['items'] as $item){
if(trim($item['name']) == $utm){
$id_item = $item['value'];
$arr_data[] = "({$req_id}, {$r_fields['id']}, 1, {$id_item})";
}
}
}
}
}
}
if(!empty($arr_data)){
$sql_data = "INSERT INTO requisition_data (`req_id`, `field_id`, `type`, `value`) VALUES ".implode(',' , $arr_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);
}
}
}