system-prompts-and-models-o.../salesflow-saas/backend/app/api/v1/master.py

226 lines
9.4 KiB
Python

"""
Dealix Master API — Full Power Endpoints
أقوى وأشمل API في مجال المبيعات السعودية
"""
from fastapi import APIRouter, BackgroundTasks, Query
from pydantic import BaseModel
from typing import Optional, List
import os
router = APIRouter(prefix="/dealix", tags=["🏰 Dealix Master API"])
def _key():
return os.getenv("GROQ_API_KEY", "")
# ── Lead Generation ───────────────────────────────────────────
@router.post("/generate-leads")
async def generate_leads(
sector: str = Query(default="تقنية المعلومات", description="القطاع"),
city: str = Query(default="الرياض", description="المدينة"),
count: int = Query(default=10, le=50)
):
"""🎯 توليد leads مؤهلة تلقائياً لأي قطاع وأي مدينة سعودية."""
from app.services.lead_generation import GoogleMapsLeadScraper
scraper = GoogleMapsLeadScraper()
leads = await scraper.generate_leads_for_sector(sector, city, count)
return {"sector": sector, "city": city, "count": len(leads), "leads": leads}
@router.post("/daily-leads")
async def get_daily_leads(target_count: int = Query(default=50, le=100)):
"""📋 الحصة اليومية من الـ leads — يولّدها النظام تلقائياً."""
from app.services.lead_generation import DealixLeadGenerationHub
hub = DealixLeadGenerationHub()
return await hub.generate_daily_leads(target_count)
@router.get("/bulk-generate")
async def bulk_generate(background_tasks: BackgroundTasks):
"""⚡ توليد leads من جميع القطاعات والمدن السعودية في الخلفية."""
from app.services.lead_generation import DealixLeadGenerationHub
hub = DealixLeadGenerationHub()
background_tasks.add_task(hub.generate_daily_leads, 100)
return {"status": "generating", "message": "جاري توليد 100 lead من 5 قطاعات..."}
# ── Company Research ──────────────────────────────────────────
class CompanyInput(BaseModel):
company_name: str
website: Optional[str] = None
extra_info: Optional[str] = ""
@router.post("/research-company")
async def research_company(company: CompanyInput):
"""🔍 تحليل عميق لأي شركة — SWOT + درجة ملاءمة + استراتيجية البيع."""
from app.services.company_research import DeepCompanyAnalyzer
analyzer = DeepCompanyAnalyzer(_key())
return await analyzer.analyze(company.company_name, company.website, company.extra_info)
@router.post("/research-person")
async def research_decision_maker(name: str, company: str):
"""👤 تحليل شخصية المقرر ونفسيته وأفضل أسلوب للتعامل معه."""
from app.services.lead_generation import LinkedInIntelligence
li = LinkedInIntelligence()
return await li.research_decision_maker(name, company)
@router.post("/compare-companies")
async def compare_companies(company_a: str, company_b: str):
"""⚖️ مقارنة شركتين وتحديد الأفضل للاستهداف."""
from app.services.company_research import DeepCompanyAnalyzer
analyzer = DeepCompanyAnalyzer(_key())
return await analyzer.compare_companies(company_a, company_b)
# ── WhatsApp ──────────────────────────────────────────────────
class OutreachCampaign(BaseModel):
leads: List[dict]
message_template: str = "أهلاً {name}، أنا من ديليكس وأتمنى التحدث معك عن تطوير مبيعات {company}"
@router.post("/whatsapp/campaign")
async def run_whatsapp_campaign(campaign: OutreachCampaign, background_tasks: BackgroundTasks):
"""📱 حملة واتساب تلقائية لقائمة leads."""
from app.services.whatsapp_service import WhatsAppService
wa = WhatsAppService()
background_tasks.add_task(wa.run_outreach_campaign, campaign.leads, campaign.message_template)
return {"status": "campaign_started", "leads_count": len(campaign.leads)}
@router.post("/whatsapp/reply")
async def generate_whatsapp_reply(phone: str, message: str, customer_name: str = ""):
"""💬 رد واتساب ذكي ومخصص باللهجة السعودية."""
from app.services.whatsapp_service import WhatsAppService
wa = WhatsAppService()
reply = await wa._generate_intelligent_reply(phone, message)
return {"reply": reply, "phone": phone}
# ── Meeting Intelligence ──────────────────────────────────────
class MeetingPrepInput(BaseModel):
company_name: str
contact_name: str
contact_title: Optional[str] = ""
meeting_time: Optional[str] = ""
company_website: Optional[str] = None
@router.post("/meeting/prepare")
async def prepare_meeting(meeting: MeetingPrepInput):
"""📊 حقيبة تحضير الاجتماع الكاملة — نقاط الحوار + الشرائح + الاستراتيجية."""
from app.services.meeting_intelligence import MeetingPreparationService
from app.services.company_research import DeepCompanyAnalyzer
analyzer = DeepCompanyAnalyzer(_key())
research = await analyzer.analyze(meeting.company_name, meeting.company_website)
prep_service = MeetingPreparationService()
return await prep_service.prepare_meeting_package({
"company_name": meeting.company_name,
"contact_name": meeting.contact_name,
"contact_title": meeting.contact_title,
"meeting_time": meeting.meeting_time,
"company_research": research
})
@router.get("/meeting/slots")
async def get_meeting_slots():
"""📅 المواعيد المتاحة للاجتماعات (Cal.com)."""
from app.services.meeting_intelligence import CalComService
cal = CalComService()
return {"slots": await cal.get_available_slots()}
# ── ZATCA Compliance ──────────────────────────────────────────
class DealForCompliance(BaseModel):
id: Optional[str] = None
amount: float
company_name: str
service_description: str = "خدمات ذكاء اصطناعي للمبيعات"
buyer_vat: Optional[str] = ""
buyer_cr: Optional[str] = ""
city: Optional[str] = "الرياض"
generate_invoice: bool = True
@router.post("/compliance/check")
async def check_compliance(deal: DealForCompliance):
"""⚖️ فحص امتثال كامل (ZATCA + عقاري + AML) لأي صفقة."""
from app.services.zatca_compliance import DealixComplianceOrchestrator
import asyncio
orchestrator = DealixComplianceOrchestrator()
return await orchestrator.full_compliance_check(deal.model_dump())
@router.post("/compliance/invoice")
async def generate_zatca_invoice(deal: DealForCompliance):
"""🧾 فاتورة ZATCA Phase 2 متوافقة — جاهزة للتقديم."""
from app.services.zatca_compliance import ZATCAInvoiceEngine
engine = ZATCAInvoiceEngine()
return engine.generate_invoice(deal.model_dump())
@router.get("/compliance/validate-vat/{vat_number}")
async def validate_vat(vat_number: str):
"""✅ التحقق من صحة الرقم الضريبي السعودي."""
from app.services.zatca_compliance import ZATCAInvoiceEngine
engine = ZATCAInvoiceEngine()
return engine.validate_vat_number(vat_number)
# ── Full Power Endpoint ───────────────────────────────────────
class MegaRequest(BaseModel):
company_name: str
contact_name: str
contact_phone: str
contact_title: Optional[str] = ""
website: Optional[str] = None
@router.post("/full-power")
async def full_power_pipeline(req: MegaRequest):
"""
🏰 FULL POWER — كل شيء في طلب واحد:
Company Research + Qualification + WhatsApp Message
+ Meeting Prep + Compliance Check + Executive Strategy
"""
from app.services.company_research import DeepCompanyAnalyzer
from app.services.lead_pipeline import DealixLeadPipeline, Lead, Company
from app.services.meeting_intelligence import MeetingPreparationService
import asyncio
# 1. Deep research
analyzer = DeepCompanyAnalyzer(_key())
research = await analyzer.analyze(req.company_name, req.website)
# 2. Full pipeline
pipeline = DealixLeadPipeline(_key())
from app.services.lead_pipeline import Lead, Company
lead = Lead(
id=f"fp_{req.contact_phone}",
contact_name=req.contact_name,
contact_phone=req.contact_phone,
contact_title=req.contact_title,
company=Company(name=req.company_name, website=req.website)
)
pipeline_result = await pipeline.run_full_pipeline(lead)
# 3. Meeting prep
prep = MeetingPreparationService()
meeting_prep = await prep.prepare_meeting_package({
"company_name": req.company_name,
"contact_name": req.contact_name,
"contact_title": req.contact_title,
"company_research": research
})
return {
"status": "FULL_POWER_COMPLETE",
"company": req.company_name,
"research": research,
"pipeline": pipeline_result,
"meeting_preparation": meeting_prep,
"generated_at": __import__('datetime').datetime.utcnow().isoformat()
}