'Método no permitido']); exit; } try { $input = json_decode(file_get_contents('php://input'), true); if (!$input || !isset($input['message'])) { http_response_code(400); echo json_encode(['error' => 'Mensaje requerido']); exit; } $filter = $input['filter'] ?? 'all'; $message = $input['message']; $db = Database::getInstance(); $whatsappService = new WhatsAppService(); // Construir query según filtro $whereClause = "WHERE u.status = 'active'"; switch ($filter) { case 'active': $whereClause .= " AND EXISTS ( SELECT 1 FROM conversations c WHERE c.user_id = u.id AND c.created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) )"; break; case 'recent': $whereClause .= " AND u.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)"; break; } // Obtener usuarios según filtro $users = $db->fetchAll( "SELECT phone_number FROM users u " . $whereClause ); $sentCount = 0; $errorCount = 0; foreach ($users as $user) { try { $response = $whatsappService->sendTextMessage($user['phone_number'], $message); if ($response) { $sentCount++; } // Pequeña pausa para no saturar la API usleep(100000); // 0.1 segundo } catch (Exception $e) { $errorCount++; error_log("Error sending broadcast to {$user['phone_number']}: " . $e->getMessage()); } } echo json_encode([ 'success' => true, 'sent_count' => $sentCount, 'error_count' => $errorCount, 'total_users' => count($users) ]); } catch (Exception $e) { error_log("Error in send_broadcast.php: " . $e->getMessage()); http_response_code(500); echo json_encode(['error' => 'Error interno del servidor: ' . $e->getMessage()]); } ?>