chat / app /handlers /webhook_handler.py
ariansyahdedy's picture
Add memory
7b2511b
# 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__)
@dataclass
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, agentMemory:Any = None, memory: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,
agentMemory = agentMemory,
memory = memory
)
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)