hadler event for comments in fb agents
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Ekaropolus 2025-05-20 15:29:14 -06:00
parent db72590b8d
commit 27b940284d

View File

@ -1,14 +1,18 @@
import json import json
import logging import logging
from django.http import JsonResponse, HttpResponse from django.http import JsonResponse, HttpResponse
from .services import FacebookService
from django.conf import settings from django.conf import settings
from .services import FacebookService
from .models import FacebookPageAssistant, EventType, FacebookEvent
# Configure logging # Configure logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
PAGE_ACCESS_TOKEN = settings.PAGE_ACCESS_TOKEN PAGE_ACCESS_TOKEN = settings.PAGE_ACCESS_TOKEN
def verify_webhook_token(mode, token, challenge, verify_token): def verify_webhook_token(mode, token, challenge, verify_token):
""" """
Verifies the webhook token and mode. Verifies the webhook token and mode.
@ -37,8 +41,11 @@ def parse_webhook_payload(payload):
def handle_comment_event(page_id, sender_id, data): def handle_comment_event(page_id, sender_id, data):
""" """
Handles incoming comment events. Handles incoming comment events:
1) Persiste el evento en la BD.
2) Responde al comentario vía FacebookService.
""" """
# Si el comentario viene de la propia página, lo saltamos
if sender_id == page_id: if sender_id == page_id:
logger.info(f"Skipping self-generated comment. Sender ID: {sender_id}, Page ID: {page_id}") logger.info(f"Skipping self-generated comment. Sender ID: {sender_id}, Page ID: {page_id}")
return JsonResponse({"status": "skipped"}, status=200) return JsonResponse({"status": "skipped"}, status=200)
@ -46,26 +53,63 @@ def handle_comment_event(page_id, sender_id, data):
comment_id = data.get("comment_id") comment_id = data.get("comment_id")
original_message = data.get("message") original_message = data.get("message")
# 1) Registrar en la base de datos
try:
page = FacebookPageAssistant.objects.get(page_id=page_id)
et = EventType.objects.get(code="comment")
FacebookEvent.objects.create(
page=page,
event_type=et,
sender_id=sender_id,
object_id=comment_id,
message=original_message
)
except Exception as e:
logger.error(f"Error logging FB comment event: {e}")
# 2) Responder al comentario via API de Facebook
if comment_id and original_message: if comment_id and original_message:
fb_service = FacebookService(PAGE_ACCESS_TOKEN) try:
fb_service.reply_to_comment(page_id, comment_id, original_message) fb_service = FacebookService(PAGE_ACCESS_TOKEN)
logger.info(f"Successfully replied to comment ID: {comment_id} with bot response: {original_message}") 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}")
except Exception as e:
logger.error(f"Error replying to comment via FacebookService: {e}")
return JsonResponse({"status": "comment_handled"}, status=200) return JsonResponse({"status": "comment_handled"}, status=200)
def handle_share_event(page_id, data): def handle_share_event(page_id, data):
""" """
Handles incoming share events. Handles incoming share events:
1) Persiste el evento en la BD.
2) Publica un comentario en la share vía FacebookService.
""" """
share_link = data.get("link")
post_id = data.get("post_id")
share_id = data.get("share_id") share_id = data.get("share_id")
post_id = data.get("post_id")
original_message = data.get("message") original_message = data.get("message")
share_link = data.get("link")
logger.info(f"Post {post_id} was shared. Share ID: {share_id}, Link: {share_link}") logger.info(f"Post {post_id} was shared. Share ID: {share_id}, Link: {share_link}")
fb_service = FacebookService(PAGE_ACCESS_TOKEN) # 1) Registrar en la base de datos
fb_service.post_comment_on_share(page_id, post_id, original_message) try:
page = FacebookPageAssistant.objects.get(page_id=page_id)
et = EventType.objects.get(code="share")
FacebookEvent.objects.create(
page=page,
event_type=et,
object_id=share_id,
message=original_message
)
except Exception as e:
logger.error(f"Error logging FB share event: {e}")
# 2) Comentar en la publicación compartida via API de Facebook
try:
fb_service = FacebookService(PAGE_ACCESS_TOKEN)
fb_service.post_comment_on_share(page_id, post_id, original_message)
except Exception as e:
logger.error(f"Error posting comment on share via FacebookService: {e}")
return JsonResponse({"status": "share_logged"}, status=200) return JsonResponse({"status": "share_logged"}, status=200)