Files
crm.clientright.ru/aiassist/check_redis_response.php
Fedor 1a4653298d Реализован SSE + Redis Pub/Sub для AI Drawer
- Добавлен 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 минут)
2025-11-11 15:16:27 +03:00

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()
]);
}
?>