import logging import httpx logger = logging.getLogger(__name__) MESSENGER_API_BASE = "https://graph.facebook.com/v22.0" class MessengerInsightsAPI: def __init__(self, page_id: str, access_token: str): self._page_id = page_id self._access_token = access_token async def get_page_messages_metrics(self) -> dict | None: url = f"{MESSENGER_API_BASE}/{self._page_id}/insights" metrics = [ "page_messages_active_threads_unique", "page_messages_blocked_conversations_unique", "page_messages_reported_conversations_unique", "page_messages_reported_conversations_by_report_type_unique", ] params = { "metric": ",".join(metrics), "access_token": self._access_token, } try: async with httpx.AsyncClient(timeout=httpx.Timeout(30.0)) as client: resp = await client.get(url, params=params) if resp.status_code == 200: return resp.json() logger.error(f"messenger insights failed: {resp.status_code} {resp.text}") return None except Exception: logger.exception("messenger insights error") return None async def get_conversation_counts(self, since: str = "", until: str = "") -> dict | None: url = f"{MESSENGER_API_BASE}/{self._page_id}/conversations" params = {"access_token": self._access_token, "fields": "message_count,unread_count,updated_time"} if since: params["since"] = since if until: params["until"] = until try: async with httpx.AsyncClient(timeout=httpx.Timeout(30.0)) as client: resp = await client.get(url, params=params) if resp.status_code == 200: return resp.json() logger.error(f"messenger conversations failed: {resp.status_code} {resp.text}") return None except Exception: logger.exception("messenger conversations error") return None