chat / app /handlers /webhook_handler.py
ariansyahdedy's picture
Before chat history
f169c98
raw
history blame
1.85 kB
# webhook_handler.py
from dataclasses import dataclass
from typing import List, Dict
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, access_token: str) -> 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", [])
for message in messages:
self.logger.info(f"Processing message: {message}")
response = await self.message_handler.handle(
raw_message=message,
access_token=access_token
)
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)