Добавлена система уведомлений для Telegram AI бота
- Реализована функция createTelegramAINotification() в telegram_ai_qa.php - Автоматическое создание уведомлений при общении клиента с AI ботом - Уведомления отправляются ответственному по проекту - Умная дедупликация - обновление существующих непрочитанных уведомлений - Краткий заголовок с именем клиента и началом вопроса (до 80 символов) - Ссылка ведет на проект с комментариями диалога - Добавлена документация TELEGRAM_AI_NOTIFICATIONS.md - Протестировано и работает корректно
This commit is contained in:
@@ -42,6 +42,63 @@ $botname = isset($data['botname']) ? $data['botname'] : 'AI Bot';
|
||||
|
||||
$user = Users::getActiveAdminUser();
|
||||
|
||||
// Функция для создания уведомления о диалоге с AI ботом
|
||||
function createTelegramAINotification($projectId, $contactId, $contactName, $questionPreview) {
|
||||
global $adb;
|
||||
|
||||
$logstring = date('Y-m-d H:i:s').' Создаем уведомление для проекта '.$projectId.' о диалоге с AI ботом'.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
|
||||
// Получаем ответственного по проекту
|
||||
$query = 'SELECT e.smownerid FROM vtiger_crmentity e WHERE e.crmid = ? AND e.deleted = 0';
|
||||
$result = $adb->pquery($query, array($projectId));
|
||||
|
||||
if ($adb->num_rows($result) === 0) {
|
||||
$logstring = date('Y-m-d H:i:s').' WARNING: Проект '.$projectId.' не найден или удален'.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
return false;
|
||||
}
|
||||
|
||||
$userId = $adb->query_result($result, 0, 'smownerid');
|
||||
|
||||
$logstring = date('Y-m-d H:i:s').' Ответственный по проекту: пользователь '.$userId.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
|
||||
// Формируем текст уведомления
|
||||
// Обрезаем вопрос до 80 символов для краткости
|
||||
$shortQuestion = mb_strlen($questionPreview) > 80 ? mb_substr($questionPreview, 0, 80) . '...' : $questionPreview;
|
||||
$notificationTitle = "Telegram AI: " . $contactName . " - " . $shortQuestion;
|
||||
|
||||
// Формируем ссылку на проект (VDNotifierPro убирает index.php? из ссылки)
|
||||
$projectLink = "module=Project&view=Detail&record=" . $projectId;
|
||||
|
||||
// Проверяем, нет ли уже непрочитанного уведомления для этого проекта от AI бота
|
||||
// Используем modulename='Project' и проверяем title на начало с "Telegram AI:"
|
||||
$checkQuery = "SELECT id FROM vtiger_vdnotifierpro WHERE userid = ? AND crmid = ? AND modulename = 'Project' AND title LIKE 'Telegram AI:%' AND status = 5 ORDER BY modifiedtime DESC LIMIT 1";
|
||||
$checkResult = $adb->pquery($checkQuery, array($userId, $projectId));
|
||||
|
||||
if ($adb->num_rows($checkResult) > 0) {
|
||||
// Обновляем существующее уведомление - обновляем заголовок и время
|
||||
$existingId = $adb->query_result($checkResult, 0, 'id');
|
||||
$updateQuery = "UPDATE vtiger_vdnotifierpro SET title = ?, modifiedtime = NOW() WHERE id = ?";
|
||||
$adb->pquery($updateQuery, array($notificationTitle, $existingId));
|
||||
|
||||
$logstring = date('Y-m-d H:i:s').' Обновлено существующее уведомление ID: '.$existingId.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
return $existingId;
|
||||
} else {
|
||||
// Создаем новое уведомление
|
||||
$insertQuery = "INSERT INTO vtiger_vdnotifierpro (userid, modulename, crmid, modiuserid, link, title, action, modifiedtime, status) VALUES (?, 'Project', ?, 0, ?, ?, '', NOW(), 5)";
|
||||
$adb->pquery($insertQuery, array($userId, $projectId, $projectLink, $notificationTitle));
|
||||
|
||||
$notificationId = $adb->getLastInsertID();
|
||||
$logstring = date('Y-m-d H:i:s').' ✅ Создано новое уведомление ID: '.$notificationId.' для пользователя '.$userId.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
|
||||
return $notificationId;
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Находим контакт по tgid
|
||||
$query = 'select c.contactid, c.firstname, c.lastname, e.smownerid as userid
|
||||
from vtiger_contactdetails c
|
||||
@@ -166,13 +223,18 @@ $adb->pquery($sql, $params);
|
||||
$logstring = date('Y-m-d H:i:s').' ✅ Создан комментарий с ОТВЕТОМ: '.$answer_commentid.PHP_EOL;
|
||||
file_put_contents('logs/tg_ai_qa.log', $logstring, FILE_APPEND);
|
||||
|
||||
// 6. Возвращаем успех
|
||||
// 6. Создаем уведомление для ответственного по проекту
|
||||
$contactName = $firstname . ' ' . $lastname;
|
||||
$notificationId = createTelegramAINotification($projectid, $contactid, $contactName, $question);
|
||||
|
||||
// 7. Возвращаем успех
|
||||
$response = array(
|
||||
'status' => 'success',
|
||||
'contact_id' => $contactid,
|
||||
'project_id' => $projectid,
|
||||
'question_comment_id' => $question_commentid,
|
||||
'answer_comment_id' => $answer_commentid,
|
||||
'notification_id' => $notificationId,
|
||||
'botname' => $botname
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user