158 lines
5.7 KiB
PHP
Executable File
158 lines
5.7 KiB
PHP
Executable File
<?php
|
|
require_once("/opt/wevads/config/credentials.php");
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
|
|
$db_config = [
|
|
'host' => 'localhost',
|
|
'dbname' => 'wevads',
|
|
'user' => 'admin',
|
|
'password' => WEVADS_DB_PASS
|
|
];
|
|
|
|
try {
|
|
$pdo = new PDO(
|
|
"pgsql:host={$db_config['host']};dbname={$db_config['dbname']}",
|
|
$db_config['user'],
|
|
$db_config['password'],
|
|
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
|
|
);
|
|
|
|
$pdo->exec("SET search_path TO admin, public;");
|
|
|
|
$action = $_GET['action'] ?? 'stats';
|
|
|
|
switch ($action) {
|
|
case 'inbox':
|
|
$stmt = $pdo->query("
|
|
SELECT * FROM admin.shadow_responses
|
|
WHERE direction = 'in' AND ai_response IS NULL
|
|
ORDER BY created_at DESC
|
|
LIMIT 30
|
|
");
|
|
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'data' => $data,
|
|
'count' => count($data),
|
|
'message' => 'Emails entrants à traiter'
|
|
]);
|
|
break;
|
|
|
|
case 'history':
|
|
$stmt = $pdo->query("
|
|
SELECT * FROM admin.shadow_responses
|
|
WHERE ai_response IS NOT NULL
|
|
ORDER BY created_at DESC
|
|
LIMIT 50
|
|
");
|
|
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'data' => $data,
|
|
'count' => count($data),
|
|
'message' => 'Historique des réponses'
|
|
]);
|
|
break;
|
|
|
|
case 'stats':
|
|
$stats = $pdo->query("
|
|
SELECT
|
|
COUNT(*) as total_in,
|
|
SUM(CASE WHEN ai_response IS NOT NULL THEN 1 ELSE 0 END) as auto_responded,
|
|
SUM(CASE WHEN converted = true THEN 1 ELSE 0 END) as converted,
|
|
ROUND(100.0 * SUM(CASE WHEN ai_response IS NOT NULL THEN 1 ELSE 0 END) / COUNT(*), 2) as auto_rate,
|
|
ROUND(100.0 * SUM(CASE WHEN converted = true THEN 1 ELSE 0 END) / COUNT(*), 2) as conversion_rate
|
|
FROM admin.shadow_responses
|
|
")->fetch(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'data' => $stats,
|
|
'summary' => 'Shadow Responder Statistics'
|
|
]);
|
|
break;
|
|
|
|
case 'respond':
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$input = json_decode(file_get_contents('php://input'), true);
|
|
$id = $input['id'] ?? null;
|
|
$response = $input['response'] ?? '';
|
|
|
|
if (!$id) {
|
|
echo json_encode(['status' => 'error', 'message' => 'ID requis']);
|
|
break;
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
UPDATE admin.shadow_responses
|
|
SET ai_response = :response, ai_provider = 'deepseek'
|
|
WHERE id = :id
|
|
");
|
|
$stmt->execute([':response' => $response, ':id' => $id]);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'Réponse enregistrée',
|
|
'rows_updated' => $stmt->rowCount()
|
|
]);
|
|
}
|
|
break;
|
|
|
|
case 'auto_mode':
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$input = json_decode(file_get_contents('php://input'), true);
|
|
$enabled = $input['enabled'] ?? false;
|
|
|
|
// Simuler le stockage dans un fichier de config
|
|
$configFile = '/tmp/shadow_auto_mode.json';
|
|
file_put_contents($configFile, json_encode(['auto_mode' => $enabled, 'updated' => time()]));
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'Mode auto ' . ($enabled ? 'activé' : 'désactivé'),
|
|
'auto_mode' => $enabled
|
|
]);
|
|
} else {
|
|
$configFile = '/tmp/shadow_auto_mode.json';
|
|
$config = file_exists($configFile) ? json_decode(file_get_contents($configFile), true) : ['auto_mode' => false];
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'auto_mode' => $config['auto_mode'] ?? false,
|
|
'updated' => $config['updated'] ?? null
|
|
]);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Action non reconnue',
|
|
'available_actions' => [
|
|
'GET ?action=inbox' => 'Emails entrants à traiter',
|
|
'GET ?action=history' => 'Historique des réponses',
|
|
'GET ?action=stats' => 'Statistiques',
|
|
'POST ?action=respond' => 'Enregistrer une réponse IA',
|
|
'POST ?action=auto_mode' => 'Activer/désactiver mode auto'
|
|
]
|
|
]);
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Erreur base de données: ' . $e->getMessage(),
|
|
'fallback' => [
|
|
'status' => 'shadow_fallback',
|
|
'inbox' => [
|
|
['id' => 1, 'lead_email' => 'test@example.com', 'subject' => 'Test']
|
|
],
|
|
'data' => ['total_in' => 15, 'auto_responded' => 8, 'converted' => 3]
|
|
]
|
|
]);
|
|
}
|
|
?>
|