from fastapi import FastAPI, Request from datetime import datetime, timezone, timedelta app = FastAPI() @app.post("/webhook") async def receive_webhook(request: Request): payload = await request.json() print("📥 Webhook received:") # Define GMT+3 offset gmt_plus_3 = timezone(timedelta(hours=3)) # Top-level fields print(f"Request ID: {payload.get('request_id')}") print(f"Object: {payload.get('object')}") print(f"Time (Unix): {payload.get('time')}") try: formatted_time = datetime.fromtimestamp(payload.get('time'), gmt_plus_3).strftime('%Y-%m-%d %H:%M:%S GMT+3') print(f"Time (Formatted): {formatted_time}") except Exception: print("Time (Formatted): Invalid timestamp") print("----") # Loop through entries for entry in payload.get('entry', []): print(f"Lead ID: {entry.get('id')}") print(f"Page ID: {entry.get('page_id')}") print(f"Page Name: {entry.get('page_name')}") print(f"Campaign ID: {entry.get('campaign_id')}") print(f"Campaign Name: {entry.get('campaign_name')}") print(f"Ad Group ID: {entry.get('adgroup_id')}") print(f"Ad Group Name: {entry.get('adgroup_name')}") print(f"Ad ID: {entry.get('ad_id')}") print(f"Ad Name: {entry.get('ad_name')}") create_ts = entry.get('create_time') print(f"Create Time (Unix): {create_ts}") try: formatted_create_time = datetime.fromtimestamp(create_ts, gmt_plus_3).strftime('%Y-%m-%d %H:%M:%S GMT+3') print(f"Create Time (Formatted): {formatted_create_time}") except Exception: print("Create Time (Formatted): Invalid timestamp") print(f"Advertiser ID: {entry.get('advertiser_id')}") print(f"Advertiser Name: {entry.get('advertiser_name')}") print(f"Library ID: {entry.get('library_id')}") print(f"Lead Source: {entry.get('lead_source')}") print("----") # Lead field values for change in entry.get('changes', []): print(f"{change.get('field').capitalize()}: {change.get('value')}") print("----") return {"status": "ok"}