- Добавлен SSE endpoint (aiassist/ai_sse.php) для real-time получения ответов от n8n - Обновлен n8n_proxy.php: убран callback, добавлена передача Redis параметров в n8n - Обновлен ai-drawer-simple.js: переход с polling на SSE с fallback через Redis - Добавлен check_redis_response.php для прямого чтения из Redis кэша - Добавлена документация: N8N_REDIS_SETUP.md, N8N_REDIS_FIX.md, AI_DRAWER_REDIS_SSE.md - Поддержка plain text ответов от n8n (автоматическое определение формата) - Кэширование ответов в Redis для надежности (TTL 5 минут)
108 lines
3.4 KiB
PHP
108 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* check_redis_response.php
|
|
* Проверка ответа в Redis (fallback если SSE не работает)
|
|
* Проверяет ключ Redis где хранится последний ответ
|
|
*/
|
|
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
header('Access-Control-Allow-Methods: GET, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type');
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
|
|
http_response_code(200);
|
|
exit();
|
|
}
|
|
|
|
try {
|
|
$taskId = $_GET['task_id'] ?? null;
|
|
|
|
if (!$taskId) {
|
|
throw new Exception('Missing task_id parameter');
|
|
}
|
|
|
|
$redisKey = "ai:response:cache:{$taskId}";
|
|
|
|
// Подключаемся к Redis
|
|
if (class_exists('Redis')) {
|
|
$redis = new Redis();
|
|
if (!$redis->connect('crm.clientright.ru', 6379)) {
|
|
throw new Exception('Redis connection failed');
|
|
}
|
|
$redis->auth('CRM_Redis_Pass_2025_Secure!');
|
|
|
|
// Пробуем получить ответ из кеша
|
|
$cachedResponse = $redis->get($redisKey);
|
|
|
|
if ($cachedResponse) {
|
|
$responseData = json_decode($cachedResponse, true);
|
|
|
|
if ($responseData && isset($responseData['response'])) {
|
|
echo json_encode([
|
|
'found' => true,
|
|
'response' => $responseData['response'],
|
|
'status' => $responseData['status'] ?? 'completed',
|
|
'timestamp' => $responseData['timestamp'] ?? null
|
|
]);
|
|
} else {
|
|
// Если это просто строка
|
|
echo json_encode([
|
|
'found' => true,
|
|
'response' => $cachedResponse
|
|
]);
|
|
}
|
|
} else {
|
|
echo json_encode([
|
|
'found' => false,
|
|
'message' => 'Ответ еще не готов или истек TTL'
|
|
]);
|
|
}
|
|
|
|
$redis->close();
|
|
} else {
|
|
require_once '/var/www/fastuser/data/www/crm.clientright.ru/vendor/autoload.php';
|
|
|
|
$redis = new Predis\Client([
|
|
'scheme' => 'tcp',
|
|
'host' => 'crm.clientright.ru',
|
|
'port' => 6379,
|
|
'password' => 'CRM_Redis_Pass_2025_Secure!',
|
|
]);
|
|
|
|
$cachedResponse = $redis->get($redisKey);
|
|
|
|
if ($cachedResponse) {
|
|
$responseData = json_decode($cachedResponse, true);
|
|
|
|
if ($responseData && isset($responseData['response'])) {
|
|
echo json_encode([
|
|
'found' => true,
|
|
'response' => $responseData['response'],
|
|
'status' => $responseData['status'] ?? 'completed',
|
|
'timestamp' => $responseData['timestamp'] ?? null
|
|
]);
|
|
} else {
|
|
echo json_encode([
|
|
'found' => true,
|
|
'response' => $cachedResponse
|
|
]);
|
|
}
|
|
} else {
|
|
echo json_encode([
|
|
'found' => false,
|
|
'message' => 'Ответ еще не готов или истек TTL'
|
|
]);
|
|
}
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'found' => false,
|
|
'error' => $e->getMessage()
|
|
]);
|
|
}
|
|
?>
|
|
|