chat / app /services /webhook_handler.py
ariansyahdedy's picture
Before chat history
f169c98
raw
history blame
2.12 kB
import logging
from fastapi import Request, status
from fastapi.responses import JSONResponse, Response
from fastapi.exceptions import HTTPException
from app.services.cache import MessageCache
from app.services.download_media import download_whatsapp_media
from app.utils.handle_message import handle_message
from app.utils.load_env import ACCESS_TOKEN
import time
logger = logging.getLogger(__name__)
message_cache = MessageCache()
user_chats = {}
# async def webhook(request: Request):
# request_id = f"req_{int(time.time()*1000)}"
# payload = await request.json()
# logger.info(f"Processing webhook request {payload}")
# processed_count = 0
# error_count = 0
# results = []
# entries = payload.get("entry", [])
# for entry in entries:
# entry_id = entry.get("id")
# logger.info(f"Processing entry_id: {entry_id}")
# changes = entry.get("changes", [])
# for change in changes:
# messages = change.get("value", {}).get("messages", [])
# media = {}
# for message in messages:
# logger.info(f"Processing message: {message}")
# response = await handle_message(message=message, user_chats = user_chats, message_cache = message_cache, access_token = ACCESS_TOKEN)
# results.append(response)
# response_data = {
# "request_id": request_id,
# # "processed": processed_count,
# # "errors": error_count,
# "results": results,
# }
# logger.info(f"Webhook processing completed - Processed: {processed_count}, Errors: {error_count}")
# return JSONResponse(content=response_data, status_code=status.HTTP_200_OK)
async def verify_webhook(request: Request):
mode = request.query_params.get('hub.mode')
token = request.query_params.get('hub.verify_token')
challenge = request.query_params.get('hub.challenge')
if mode == 'subscribe' and token == 'test':
return Response(content=challenge, media_type="text/plain")
else:
raise HTTPException(status_code=403, detail="Verification failed")