72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
import json
|
|
import logging
|
|
from django.http import JsonResponse, HttpResponse
|
|
from .services import FacebookService
|
|
from django.conf import settings
|
|
|
|
# Configure logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
PAGE_ACCESS_TOKEN = settings.PAGE_ACCESS_TOKEN
|
|
|
|
def verify_webhook_token(mode, token, challenge, verify_token):
|
|
"""
|
|
Verifies the webhook token and mode.
|
|
"""
|
|
if mode == "subscribe" and token == verify_token:
|
|
logger.info("Webhook verified successfully.")
|
|
return HttpResponse(challenge, status=200)
|
|
else:
|
|
logger.warning(f"Webhook verification failed. Mode: {mode}, Token: {token}")
|
|
return HttpResponse("Forbidden", status=403)
|
|
|
|
|
|
def parse_webhook_payload(payload):
|
|
"""
|
|
Parses the webhook payload and extracts relevant data.
|
|
"""
|
|
try:
|
|
entry = payload.get("entry", [{}])[0]
|
|
changes = entry.get("changes", [{}])[0]
|
|
value = changes.get("value", {})
|
|
return value
|
|
except Exception as e:
|
|
logger.error(f"Error parsing payload: {e}")
|
|
raise
|
|
|
|
|
|
def handle_comment_event(page_id, sender_id, data):
|
|
"""
|
|
Handles incoming comment events.
|
|
"""
|
|
if sender_id == page_id:
|
|
logger.info(f"Skipping self-generated comment. Sender ID: {sender_id}, Page ID: {page_id}")
|
|
return JsonResponse({"status": "skipped"}, status=200)
|
|
|
|
comment_id = data.get("comment_id")
|
|
original_message = data.get("message")
|
|
|
|
if comment_id and original_message:
|
|
fb_service = FacebookService(PAGE_ACCESS_TOKEN)
|
|
fb_service.reply_to_comment(page_id, comment_id, original_message)
|
|
logger.info(f"Successfully replied to comment ID: {comment_id} with bot response: {original_message}")
|
|
|
|
return JsonResponse({"status": "comment_handled"}, status=200)
|
|
|
|
|
|
def handle_share_event(page_id, data):
|
|
"""
|
|
Handles incoming share events.
|
|
"""
|
|
share_link = data.get("link")
|
|
post_id = data.get("post_id")
|
|
share_id = data.get("share_id")
|
|
original_message = data.get("message")
|
|
|
|
logger.info(f"Post {post_id} was shared. Share ID: {share_id}, Link: {share_link}")
|
|
|
|
fb_service = FacebookService(PAGE_ACCESS_TOKEN)
|
|
fb_service.post_comment_on_share(page_id, post_id, original_message)
|
|
|
|
return JsonResponse({"status": "share_logged"}, status=200)
|