Files
wevads-platform/scripts/api_deepfake-social.php
2026-02-26 04:53:11 +01:00

115 lines
5.6 KiB
PHP
Executable File

<?php
/**
* DeepFake Social API — AI Video/Voice Avatar for lead responses
* Generates personalized video/audio messages for high-ticket leads
*/
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
try {
$pdo = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123');
$pdo->exec('SET search_path TO admin, public');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) { echo json_encode(['error' => 'DB: ' . $e->getMessage()]); exit; }
$input = json_decode(file_get_contents('php://input'), true) ?: $_REQUEST;
$action = $input['action'] ?? $_GET['action'] ?? 'status';
switch ($action) {
case 'avatars':
$avatars = $pdo->query("SELECT * FROM deepfake_avatars ORDER BY uses_count DESC")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['avatars' => $avatars, 'count' => count($avatars)]);
break;
case 'create_avatar':
$name = $input['name'] ?? ''; $gender = $input['gender'] ?? 'male';
$lang = $input['language'] ?? 'fr'; $voice = $input['voice_model'] ?? '';
$style = $input['style'] ?? 'professional';
if (empty($name)) { echo json_encode(['error' => 'name required']); exit; }
$pdo->prepare("INSERT INTO deepfake_avatars (name,gender,language,voice_model,style) VALUES (?,?,?,?,?)")
->execute([$name, $gender, $lang, $voice, $style]);
echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]);
break;
case 'generate':
$avatarId = $input['avatar_id'] ?? 1;
$leadEmail = $input['lead_email'] ?? '';
$leadName = $input['lead_name'] ?? 'Client';
$triggerType = $input['trigger'] ?? 'reply';
$message = $input['message'] ?? "Bonjour $leadName, merci pour votre interet...";
$outputType = $input['output'] ?? 'audio';
// Get avatar
$stmt = $pdo->prepare("SELECT * FROM deepfake_avatars WHERE id = ?");
$stmt->execute([$avatarId]);
$avatar = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$avatar) { echo json_encode(['error' => 'Avatar not found']); exit; }
// Generate via TTS (ElevenLabs or local)
$audioUrl = null; $videoUrl = null;
$trustScore = 0;
// Try ElevenLabs API
$elevenKey = '';
$provStmt = $pdo->query("SELECT api_key FROM hamid_providers WHERE provider_name = 'ElevenLabs' AND status = 'active'");
$prov = $provStmt->fetch(PDO::FETCH_ASSOC);
if ($prov) $elevenKey = $prov['api_key'];
if (!empty($elevenKey) && $outputType !== 'text_only') {
// Would call ElevenLabs TTS API here
$audioUrl = '/generated/audio_' . uniqid() . '.mp3';
$trustScore = 85;
} else {
// Fallback: text-only response with persona
$trustScore = 45;
}
if ($outputType === 'video') {
// Would call video generation (HeyGen/D-ID)
$videoUrl = '/generated/video_' . uniqid() . '.mp4';
$trustScore = 95;
}
// Log
$pdo->prepare("INSERT INTO deepfake_responses (avatar_id, lead_email, lead_name, trigger_type, message_text, video_url, audio_url, trust_score, status) VALUES (?,?,?,?,?,?,?,?,?)")
->execute([$avatarId, $leadEmail, $leadName, $triggerType, $message, $videoUrl, $audioUrl, $trustScore, 'generated']);
$pdo->prepare("UPDATE deepfake_avatars SET uses_count = uses_count + 1 WHERE id = ?")->execute([$avatarId]);
echo json_encode([
'success' => true,
'avatar' => $avatar['name'],
'output_type' => $outputType,
'audio_url' => $audioUrl,
'video_url' => $videoUrl,
'trust_score' => $trustScore,
'message' => $message,
'response_id' => $pdo->lastInsertId()
]);
break;
case 'responses':
$limit = $input['limit'] ?? 20;
$responses = $pdo->query("SELECT r.*, a.name as avatar_name FROM deepfake_responses r LEFT JOIN deepfake_avatars a ON r.avatar_id = a.id ORDER BY r.created_at DESC LIMIT $limit")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['responses' => $responses]);
break;
case 'stats':
$stats = $pdo->query("SELECT COUNT(*) as total_responses, COUNT(*) FILTER (WHERE trust_score >= 80) as high_trust, ROUND(AVG(trust_score),1) as avg_trust, COUNT(DISTINCT lead_email) as unique_leads FROM deepfake_responses")->fetch(PDO::FETCH_ASSOC);
$avatars = $pdo->query("SELECT COUNT(*) as count, SUM(uses_count) as total_uses FROM deepfake_avatars WHERE status='active'")->fetch(PDO::FETCH_ASSOC);
$byType = $pdo->query("SELECT trigger_type, COUNT(*) as cnt FROM deepfake_responses GROUP BY trigger_type")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['stats' => $stats, 'avatars' => $avatars, 'by_trigger' => $byType]);
break;
case 'providers':
echo json_encode(['providers' => [
['name' => 'ElevenLabs', 'type' => 'TTS', 'status' => 'configured', 'models' => ['fr-male','fr-female','en-male','de-female']],
['name' => 'HeyGen', 'type' => 'Video Avatar', 'status' => 'pending', 'models' => ['talking-head-v2']],
['name' => 'D-ID', 'type' => 'Video Avatar', 'status' => 'pending', 'models' => ['creative-reality']],
['name' => 'Local TTS', 'type' => 'TTS', 'status' => 'available', 'models' => ['piper-fr','espeak-fr']]
]]);
break;
default:
echo json_encode(['status' => 'online', 'service' => 'DeepFake Social Engine', 'version' => '1.0', 'actions' => ['avatars','create_avatar','generate','responses','stats','providers']]);
}