simple-api / main.py
Mr-Help's picture
Update main.py
e5c6457 verified
import os
import requests
from fastapi import FastAPI, Request
from datetime import datetime, timezone, timedelta
app = FastAPI()
# Load Supabase environment variables
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_API_KEY = os.getenv("SUPABASE_API_KEY")
@app.post("/webhook")
async def receive_webhook(request: Request):
payload = await request.json()
print("πŸ“₯ Webhook received:")
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', []):
lead_id = entry.get('id')
campaign_id = entry.get('campaign_id')
campaign_name = entry.get('campaign_name')
adset_id = entry.get('adgroup_id')
adset_name = entry.get('adgroup_name')
ad_id = entry.get('ad_id')
ad_name = entry.get('ad_name')
advertiser_id = entry.get('advertiser_id')
create_ts = entry.get('create_time')
print(f"Lead ID: {lead_id}")
print(f"Campaign ID: {campaign_id}")
print(f"Campaign Name: {campaign_name}")
print(f"Ad Group ID: {adset_id}")
print(f"Ad Group Name: {adset_name}")
print(f"Ad ID: {ad_id}")
print(f"Ad Name: {ad_name}")
try:
formatted_create_time = datetime.fromtimestamp(create_ts, gmt_plus_3).isoformat()
print(f"Create Time: {formatted_create_time}")
except Exception:
formatted_create_time = None
print("Create Time: Invalid")
# Extract lead fields
field_map = {}
for change in entry.get('changes', []):
field = change.get('field').lower()
value = change.get('value')
field_map[field] = value
print(f"{field}: {value}")
print("----")
# Prepare data for Supabase insertion
insert_data = {
"platform": "tiktok",
"campaign_id": campaign_id,
"campaign_name": campaign_name,
"adset_id": adset_id,
"adset_name": adset_name,
"ad_id": ad_id,
"lead_id": lead_id,
"full_name": field_map.get("name"),
"email": field_map.get("email"),
"phone": field_map.get("phone_number"),
"city": field_map.get("city"),
"lead_timestamp": formatted_create_time
}
headers = {
"apikey": SUPABASE_API_KEY,
"Authorization": f"Bearer {SUPABASE_API_KEY}",
"Content-Type": "application/json"
}
supa_resp = requests.post(
f"{SUPABASE_URL}/rest/v1/binrushdleads",
headers=headers,
json=insert_data
)
print("πŸ’Ύ Supabase insert status:", supa_resp.status_code)
if supa_resp.status_code == 201:
print("βœ… Lead inserted successfully.")
else:
try:
print("❌ Supabase Error:", supa_resp.json())
except Exception:
print("❌ Supabase Response:", supa_resp.text)
return {"status": "ok"}