File size: 2,323 Bytes
f169c98
 
be9a762
f169c98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b2511b
f169c98
 
 
4e9c1aa
f169c98
 
 
 
 
4e9c1aa
f169c98
 
 
 
4e9c1aa
f169c98
e0c1af0
4e9c1aa
f169c98
 
8d2f9d4
 
 
be9a762
7b2511b
 
f169c98
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 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)