| """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() |
|
|
| |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["*"], |
| 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() |
| |
| |
| formatted = {} |
| for conv in conversations: |
| |
| 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": [] |
| } |
| |
| |
| formatted[session_id]["messages"].append({ |
| "type": "received", |
| "text": conv["user"], |
| "time": conv["timestamp"] |
| }) |
| |
| |
| 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) |
| |
| |
| questions = {} |
| for conv in conversations: |
| q = conv["user"].lower() |
| |
| 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__": |
| |
| pass |