'error', 'message' => 'Не переданы обязательные поля: tgid, question, answer'); $logstring = date('Y-m-d H:i:s').' ОШИБКА: '.json_encode($error).PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); echo json_encode($error); exit; } $tgid = $data['tgid']; $question = $data['question']; $answer = $data['answer']; $projectid = isset($data['projectid']) ? $data['projectid'] : null; $botname = isset($data['botname']) ? $data['botname'] : 'AI Bot'; $user = Users::getActiveAdminUser(); // 1. Находим контакт по tgid $query = 'select c.contactid, c.firstname, c.lastname, e.smownerid as userid from vtiger_contactdetails c left join vtiger_crmentity e on e.crmid = c.contactid where e.deleted = 0 and c.phone = ?'; $result = $adb->pquery($query, array($tgid)); if ($adb->num_rows($result) == 0) { $error = array('status' => 'error', 'message' => 'Контакт с tgid='.$tgid.' не найден'); $logstring = date('Y-m-d H:i:s').' ОШИБКА: '.json_encode($error).PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); echo json_encode($error); exit; } $contactid = $adb->query_result($result, 0, 'contactid'); $userid = $adb->query_result($result, 0, 'userid'); $firstname = $adb->query_result($result, 0, 'firstname'); $lastname = $adb->query_result($result, 0, 'lastname'); $logstring = date('Y-m-d H:i:s').' Найден контакт: '.$firstname.' '.$lastname.' (ID: '.$contactid.')'.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); // 2. Если projectid не передан - ищем активный проект if (empty($projectid)) { $query = 'select p.projectid from vtiger_project p left join vtiger_crmentity e on e.crmid = p.projectid where e.deleted = 0 and p.linktoaccountscontacts = ? and p.projectstatus <> "completed" order by e.modifiedtime desc limit 1'; $result = $adb->pquery($query, array($contactid)); if ($adb->num_rows($result) == 0) { $error = array('status' => 'error', 'message' => 'Не найден активный проект для контакта ID='.$contactid); $logstring = date('Y-m-d H:i:s').' ОШИБКА: '.json_encode($error).PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); echo json_encode($error); exit; } $projectid = $adb->query_result($result, 0, 'projectid'); $logstring = date('Y-m-d H:i:s').' Найден активный проект: '.$projectid.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); } else { // 3. Если projectid передан - проверяем что он существует и связан с контактом $query = 'select p.projectid from vtiger_project p left join vtiger_crmentity e on e.crmid = p.projectid where e.deleted = 0 and p.projectid = ? and p.linktoaccountscontacts = ?'; $result = $adb->pquery($query, array($projectid, $contactid)); if ($adb->num_rows($result) == 0) { $error = array('status' => 'error', 'message' => 'Проект ID='.$projectid.' не найден или не связан с контактом'); $logstring = date('Y-m-d H:i:s').' ОШИБКА: '.json_encode($error).PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); echo json_encode($error); exit; } $logstring = date('Y-m-d H:i:s').' Проверен проект: '.$projectid.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); } // Получаем ответственного за проект $query = 'select smownerid from vtiger_crmentity where crmid = ?'; $result = $adb->pquery($query, array($projectid)); $ownerid = $adb->query_result($result, 0, 'smownerid'); // ID пользователя AI Bot $ai_bot_userid = 23; // Используем просто ID проекта (как в обычных комментариях) $date_var = date('Y-m-d H:i:s'); // 4. Создаём комментарий с ВОПРОСОМ (напрямую через SQL) $question_commentid = $adb->getUniqueID("vtiger_crmentity"); // Вставляем в crmentity $sql = "insert into vtiger_crmentity (crmid, smcreatorid, smownerid, setype, description, createdtime, modifiedtime, presence, deleted) values(?, ?, ?, 'ModComments', '', ?, ?, 1, 0)"; $params = array($question_commentid, $ownerid, $ownerid, $adb->formatDate($date_var, true), $adb->formatDate($date_var, true)); $adb->pquery($sql, $params); // Вставляем в modcomments $sql = "insert into vtiger_modcomments (modcommentsid, commentcontent, related_to, customer, userid, reasontoedit, channel, parent_comments) values(?, ?, ?, ?, 0, '', 'Telegram AI', 0)"; $params = array($question_commentid, $question, $projectid, $contactid); $adb->pquery($sql, $params); // Вставляем в modcommentsrel // $sql = "insert into vtiger_modcommentsrel (modcommentsid, related_to) values(?, ?)"; // $adb->pquery($sql, array($question_commentid, $projectid)); $logstring = date('Y-m-d H:i:s').' ✅ Создан комментарий с ВОПРОСОМ: '.$question_commentid.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); // Задержка 1 секунда, чтобы ответ был позже вопроса sleep(1); $date_var_answer = date('Y-m-d H:i:s'); // 5. Создаём комментарий с ОТВЕТОМ (напрямую через SQL) $answer_commentid = $adb->getUniqueID("vtiger_crmentity"); // Вставляем в crmentity (от AI Bot пользователя) $sql = "insert into vtiger_crmentity (crmid, smcreatorid, smownerid, setype, description, createdtime, modifiedtime, presence, deleted) values(?, ?, ?, 'ModComments', '', ?, ?, 1, 0)"; $params = array($answer_commentid, $ai_bot_userid, $ai_bot_userid, $adb->formatDate($date_var_answer, true), $adb->formatDate($date_var_answer, true)); $adb->pquery($sql, $params); // Вставляем в modcomments (от AI Bot, поэтому customer = 0, userid = AI Bot) $sql = "insert into vtiger_modcomments (modcommentsid, commentcontent, related_to, customer, userid, reasontoedit, channel, parent_comments) values(?, ?, ?, 0, ?, '', 'Telegram AI Bot', 0)"; $params = array($answer_commentid, $answer, $projectid, $ai_bot_userid); $adb->pquery($sql, $params); // Вставляем в modcommentsrel // $sql = "insert into vtiger_modcommentsrel (modcommentsid, related_to) values(?, ?)"; // $adb->pquery($sql, array($answer_commentid, $projectid)); $logstring = date('Y-m-d H:i:s').' ✅ Создан комментарий с ОТВЕТОМ: '.$answer_commentid.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); // 6. Возвращаем успех $response = array( 'status' => 'success', 'contact_id' => $contactid, 'project_id' => $projectid, 'question_comment_id' => $question_commentid, 'answer_comment_id' => $answer_commentid, 'botname' => $botname ); $logstring = date('Y-m-d H:i:s').' ✅ SUCCESS: '.json_encode($response).PHP_EOL.PHP_EOL; file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND); echo json_encode($response); ?>