Добавлена система уведомлений для Telegram AI бота

- Реализована функция createTelegramAINotification() в telegram_ai_qa.php
- Автоматическое создание уведомлений при общении клиента с AI ботом
- Уведомления отправляются ответственному по проекту
- Умная дедупликация - обновление существующих непрочитанных уведомлений
- Краткий заголовок с именем клиента и началом вопроса (до 80 символов)
- Ссылка ведет на проект с комментариями диалога
- Добавлена документация TELEGRAM_AI_NOTIFICATIONS.md
- Протестировано и работает корректно
This commit is contained in:
Fedor
2025-10-16 16:20:54 +03:00
parent 0f7e8ba247
commit 119a74b0e8
2 changed files with 248 additions and 1 deletions

View File

@@ -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
);