Spaces:
Build error
Build error
| # webhook_handler.py | |
| from dataclasses import dataclass | |
| from typing import List, Dict, Any | |
| import time | |
| import logging | |
| from fastapi import Request, status | |
| from fastapi.responses import JSONResponse | |
| logger = logging.getLogger(__name__) | |
| class WebhookResponse: | |
| request_id: str | |
| results: List[Dict] | |
| class WebhookHandler: | |
| def __init__(self, message_handler): | |
| self.message_handler = message_handler | |
| self.logger = logging.getLogger(__name__) | |
| async def process_webhook(self, payload: dict, whatsapp_token: str, whatsapp_url:str,gemini_api:str, rag_system:Any = None) -> WebhookResponse: | |
| request_id = f"req_{int(time.time()*1000)}" | |
| results = [] | |
| # self.logger.info(f"Processing webhook request {payload}") | |
| try: | |
| entries = payload.get("entry", []) | |
| for entry in entries: | |
| entry_id = entry.get("id") | |
| # self.logger.info(f"Processing entry_id: {entry_id}") | |
| changes = entry.get("changes", []) | |
| for change in changes: | |
| messages = change.get("value", {}).get("messages", []) | |
| # self.logger.info(f"message length: {len(messages)}") | |
| for message in messages: | |
| # self.logger.info(f"Processing message: {message}") | |
| response = await self.message_handler.handle( | |
| raw_message=message, | |
| whatsapp_token=whatsapp_token, | |
| whatsapp_url=whatsapp_url, | |
| gemini_api=gemini_api, | |
| rag_system=rag_system, | |
| ) | |
| results.append(response) | |
| except Exception as e: | |
| self.logger.error(f"Error processing webhook: {str(e)}") | |
| return WebhookResponse( | |
| request_id=request_id, | |
| results=[{"status": "error", "error": str(e)}] | |
| ) | |
| self.logger.info(f"Webhook processing completed - Results: {len(results)}") | |
| return WebhookResponse(request_id=request_id, results=results) |