45 lines
1.6 KiB
Python

from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
import json
import logging
from django.conf import settings
from .webhook_handlers import verify_webhook_token, parse_webhook_payload, handle_comment_event, handle_share_event
# Configure logging
logger = logging.getLogger(__name__)
VERIFY_TOKEN = settings.VERIFY_TOKEN
@csrf_exempt
def facebook_webhook(request):
"""
Handles incoming webhook requests from Facebook.
"""
if request.method == "POST":
try:
logger.info("Received POST request.")
payload = json.loads(request.body)
data = parse_webhook_payload(payload)
sender_id = data.get("from", {}).get("id")
page_id = payload.get("entry", [{}])[0].get("id")
item_type = data.get("item")
if item_type == "share":
return handle_share_event(page_id, data)
elif item_type == "comment":
return handle_comment_event(page_id, sender_id, data)
except json.JSONDecodeError as e:
logger.error(f"JSON decoding error: {e}")
return JsonResponse({"error": "Invalid JSON payload"}, status=400)
except Exception as e:
logger.error(f"Error processing webhook: {e}")
return JsonResponse({"error": str(e)}, status=500)
logger.info("POST request processed successfully.")
return JsonResponse({"status": "success"}, status=200)
logger.warning(f"Received unsupported HTTP method: {request.method}")
return HttpResponse("Method Not Allowed", status=405)