"""API server for BF conversation tracking""" from fastapi import FastAPI, Response from fastapi.middleware.cors import CORSMiddleware import json import os from datetime import datetime from typing import List, Dict, Any import uvicorn app = FastAPI() # CORS middleware - HTML'den erişim için app.add_middleware( CORSMiddleware, allow_origins=["*"], # Production'da bunu kısıtla allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) CONVERSATIONS_FILE = "conversations.json" def load_conversations(): """Load conversation history from file""" if os.path.exists(CONVERSATIONS_FILE): try: with open(CONVERSATIONS_FILE, 'r', encoding='utf-8') as f: return json.load(f) except: return [] return [] @app.get("/api/conversations") async def get_conversations(): """Get all conversations""" conversations = load_conversations() # Format for dashboard formatted = {} for conv in conversations: # Create a session ID from timestamp session_id = f"session_{conv['timestamp'].replace(':', '').replace('-', '').replace('T', '_')[:15]}" if session_id not in formatted: formatted[session_id] = { "customer": "Kullanıcı", "phone": session_id, "messages": [] } # Add user message formatted[session_id]["messages"].append({ "type": "received", "text": conv["user"], "time": conv["timestamp"] }) # Add bot response formatted[session_id]["messages"].append({ "type": "sent", "text": conv["bot"], "time": conv["timestamp"] }) return formatted @app.get("/api/stats") async def get_stats(): """Get conversation statistics""" conversations = load_conversations() today = datetime.now().date() today_count = sum(1 for conv in conversations if datetime.fromisoformat(conv["timestamp"]).date() == today) # Find most asked questions questions = {} for conv in conversations: q = conv["user"].lower() # Simple categorization if "madone" in q: questions["Madone"] = questions.get("Madone", 0) + 1 elif "marlin" in q: questions["Marlin"] = questions.get("Marlin", 0) + 1 elif "fiyat" in q or "kaç" in q: questions["Fiyat"] = questions.get("Fiyat", 0) + 1 elif "stok" in q or "var mı" in q: questions["Stok"] = questions.get("Stok", 0) + 1 return { "total": len(conversations), "today": today_count, "categories": questions } @app.get("/api/health") async def health_check(): """Health check endpoint""" return {"status": "ok", "timestamp": datetime.now().isoformat()} if __name__ == "__main__": # This will be imported by Gradio app, not run directly pass