vBot-2.1 / app /api /calls.py
Ajit Panday
Update dependencies and Hugging Face configuration
7d72bcf
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Header
from typing import Optional
from datetime import datetime
from ..models import Customer
from ..call_processor import CallProcessor
from ..auth import get_current_customer
import logging
router = APIRouter()
logger = logging.getLogger(__name__)
@router.post("/process-call")
async def process_call(
file: UploadFile = File(...),
caller_number: str = Header(...),
called_number: str = Header(...),
customer: Customer = Depends(get_current_customer)
):
"""Process a call and send results to customer's webhook"""
try:
# Create call processor for the customer
processor = CallProcessor(customer)
# Process and send the call
result = processor.process_and_send_call(file, caller_number, called_number)
if not result:
raise HTTPException(
status_code=500,
detail="Failed to send call results to webhook"
)
return result
except Exception as e:
logger.error(f"Failed to process call: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.post("/webhook")
async def update_webhook(
webhook_url: str,
customer: Customer = Depends(get_current_customer)
):
"""Update customer's webhook URL"""
try:
# Update webhook URL
customer.webhook_url = webhook_url
customer.save()
return {"message": "Webhook URL updated successfully"}
except Exception as e:
logger.error(f"Failed to update webhook URL: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/calls/{call_id}")
async def get_call(
call_id: str,
customer: Customer = Depends(get_current_customer)
):
"""Get call details from customer's database"""
try:
processor = CallProcessor(customer)
call_data = processor.get_call_details(call_id)
if not call_data:
raise HTTPException(status_code=404, detail="Call not found")
return call_data
except Exception as e:
logger.error(f"Failed to get call details: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/calls/search")
async def search_calls(
start_date: Optional[datetime] = None,
end_date: Optional[datetime] = None,
caller_number: Optional[str] = None,
called_number: Optional[str] = None,
customer: Customer = Depends(get_current_customer)
):
"""Search calls in customer's database"""
try:
processor = CallProcessor(customer)
filters = {
'start_date': start_date,
'end_date': end_date,
'caller_number': caller_number,
'called_number': called_number
}
results = processor.search_calls(filters)
return {
'calls': results,
'total': len(results)
}
except Exception as e:
logger.error(f"Failed to search calls: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))