Files
Siro/backend/marketing_engine/index.php
T

89 lines
3.5 KiB
PHP

<?php
// ============================================================
// marketing_engine/index.php
// Main API endpoint for the Marketing Microservice
// ============================================================
require_once __DIR__ . '/../core/bootstrap.php';
require_once __DIR__ . '/../functions.php';
header('Content-Type: application/json');
// Simple bot authentication
$headers = getallheaders();
$botToken = $headers['X-Bot-Token'] ?? '';
if ($botToken !== 'YOUR_SECRET_BOT_TOKEN') {
// http_response_code(401);
// exit(json_encode(['status' => 'error', 'message' => 'Unauthorized']));
}
$action = $_GET['action'] ?? '';
$platform = $_GET['platform'] ?? 'tiktok'; // Default to tiktok for new platform testing
try {
// In a real scenario, you'd use a dedicated database.
// Here we use the main DB but with marketing_ prefixed tables.
$con = Database::get('main');
switch ($action) {
case 'get_task':
// 1. First, check if the bot needs a task
// We look for pending tasks for this platform
$stmt = $con->prepare("
SELECT id, type, target_url, content_text, media_url
FROM marketing_tasks
WHERE status = 'pending' AND platform = ? AND (scheduled_at IS NULL OR scheduled_at <= NOW())
ORDER BY created_at ASC LIMIT 1
");
$stmt->execute([$platform]);
$task = $stmt->fetch(PDO::FETCH_ASSOC);
if ($task) {
// If the task requires a media file (like upload_video)
// The Android app will need to download it first using the media_url
// Mark as in progress
$update = $con->prepare("UPDATE marketing_tasks SET status = 'in_progress' WHERE id = ?");
$update->execute([$task['id']]);
echo json_encode(['status' => 'success', 'data' => $task]);
} else {
echo json_encode(['status' => 'success', 'message' => 'No tasks available', 'data' => null]);
}
break;
case 'complete_task':
$taskId = $_POST['task_id'] ?? null;
$result = $_POST['result'] ?? '';
if ($taskId) {
$stmt = $con->prepare("UPDATE marketing_tasks SET status = 'completed', completed_at = NOW() WHERE id = ?");
$stmt->execute([$taskId]);
echo json_encode(['status' => 'success']);
} else {
echo json_encode(['status' => 'error', 'message' => 'task_id required']);
}
break;
case 'fail_task':
$taskId = $_POST['task_id'] ?? null;
$errorMsg = $_POST['error_message'] ?? 'Unknown error';
if ($taskId) {
$stmt = $con->prepare("UPDATE marketing_tasks SET status = 'failed', error_message = ? WHERE id = ?");
$stmt->execute([$errorMsg, $taskId]);
echo json_encode(['status' => 'success']);
} else {
echo json_encode(['status' => 'error', 'message' => 'task_id required']);
}
break;
default:
echo json_encode(['status' => 'error', 'message' => 'Invalid action']);
}
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Server error: ' . $e->getMessage()]);
}