Spaces:
Running
Running
| from fastapi import FastAPI, Request | |
| from datetime import datetime | |
| app = FastAPI() | |
| async def receive_webhook(request: Request): | |
| payload = await request.json() | |
| print("📥 Webhook received:") | |
| # 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: | |
| readable_time = datetime.utcfromtimestamp(payload.get('time')).strftime('%Y-%m-%d %H:%M:%S UTC') | |
| print(f"Time (Formatted): {readable_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')}") | |
| # Format create time if present | |
| create_ts = entry.get('create_time') | |
| print(f"Create Time (Unix): {create_ts}") | |
| try: | |
| create_time_fmt = datetime.utcfromtimestamp(create_ts).strftime('%Y-%m-%d %H:%M:%S UTC') | |
| print(f"Create Time (Formatted): {create_time_fmt}") | |
| 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("----") | |
| # Loop through lead fields (changes) | |
| for change in entry.get('changes', []): | |
| print(f"{change.get('field').capitalize()}: {change.get('value')}") | |
| print("----") | |
| return {"status": "ok"} | |
| # Run with: uvicorn filename:app --reload |