Mr-Help commited on
Commit
a854e2d
·
verified ·
1 Parent(s): b5f9518

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +70 -23
main.py CHANGED
@@ -1,14 +1,19 @@
 
 
1
  from fastapi import FastAPI, Request
2
  from datetime import datetime, timezone, timedelta
3
 
4
  app = FastAPI()
5
 
 
 
 
 
6
  @app.post("/webhook")
7
  async def receive_webhook(request: Request):
8
  payload = await request.json()
9
  print("📥 Webhook received:")
10
 
11
- # Define GMT+3 offset
12
  gmt_plus_3 = timezone(timedelta(hours=3))
13
 
14
  # Top-level fields
@@ -24,33 +29,75 @@ async def receive_webhook(request: Request):
24
 
25
  # Loop through entries
26
  for entry in payload.get('entry', []):
27
- print(f"Lead ID: {entry.get('id')}")
28
- print(f"Page ID: {entry.get('page_id')}")
29
- print(f"Page Name: {entry.get('page_name')}")
30
- print(f"Campaign ID: {entry.get('campaign_id')}")
31
- print(f"Campaign Name: {entry.get('campaign_name')}")
32
- print(f"Ad Group ID: {entry.get('adgroup_id')}")
33
- print(f"Ad Group Name: {entry.get('adgroup_name')}")
34
- print(f"Ad ID: {entry.get('ad_id')}")
35
- print(f"Ad Name: {entry.get('ad_name')}")
36
-
37
  create_ts = entry.get('create_time')
38
- print(f"Create Time (Unix): {create_ts}")
 
 
 
 
 
 
 
39
  try:
40
- formatted_create_time = datetime.fromtimestamp(create_ts, gmt_plus_3).strftime('%Y-%m-%d %H:%M:%S GMT+3')
41
- print(f"Create Time (Formatted): {formatted_create_time}")
42
  except Exception:
43
- print("Create Time (Formatted): Invalid timestamp")
 
44
 
45
- print(f"Advertiser ID: {entry.get('advertiser_id')}")
46
- print(f"Advertiser Name: {entry.get('advertiser_name')}")
47
- print(f"Library ID: {entry.get('library_id')}")
48
- print(f"Lead Source: {entry.get('lead_source')}")
49
- print("----")
50
-
51
- # Lead field values
52
  for change in entry.get('changes', []):
53
- print(f"{change.get('field').capitalize()}: {change.get('value')}")
 
 
 
 
54
  print("----")
55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  return {"status": "ok"}
 
1
+ import os
2
+ import requests
3
  from fastapi import FastAPI, Request
4
  from datetime import datetime, timezone, timedelta
5
 
6
  app = FastAPI()
7
 
8
+ # Load Supabase environment variables
9
+ SUPABASE_URL = os.getenv("SUPABASE_URL")
10
+ SUPABASE_API_KEY = os.getenv("SUPABASE_API_KEY")
11
+
12
  @app.post("/webhook")
13
  async def receive_webhook(request: Request):
14
  payload = await request.json()
15
  print("📥 Webhook received:")
16
 
 
17
  gmt_plus_3 = timezone(timedelta(hours=3))
18
 
19
  # Top-level fields
 
29
 
30
  # Loop through entries
31
  for entry in payload.get('entry', []):
32
+ lead_id = entry.get('id')
33
+ campaign_id = entry.get('campaign_id')
34
+ campaign_name = entry.get('campaign_name')
35
+ adset_id = entry.get('adgroup_id')
36
+ adset_name = entry.get('adgroup_name')
37
+ ad_id = entry.get('ad_id')
38
+ ad_name = entry.get('ad_name')
39
+ advertiser_id = entry.get('advertiser_id')
 
 
40
  create_ts = entry.get('create_time')
41
+
42
+ print(f"Lead ID: {lead_id}")
43
+ print(f"Campaign ID: {campaign_id}")
44
+ print(f"Campaign Name: {campaign_name}")
45
+ print(f"Ad Group ID: {adset_id}")
46
+ print(f"Ad Group Name: {adset_name}")
47
+ print(f"Ad ID: {ad_id}")
48
+ print(f"Ad Name: {ad_name}")
49
  try:
50
+ formatted_create_time = datetime.fromtimestamp(create_ts, gmt_plus_3).isoformat()
51
+ print(f"Create Time: {formatted_create_time}")
52
  except Exception:
53
+ formatted_create_time = None
54
+ print("Create Time: Invalid")
55
 
56
+ # Extract lead fields
57
+ field_map = {}
 
 
 
 
 
58
  for change in entry.get('changes', []):
59
+ field = change.get('field')
60
+ value = change.get('value')
61
+ field_map[field] = value
62
+ print(f"{field}: {value}")
63
+
64
  print("----")
65
 
66
+ # Prepare data for Supabase insertion
67
+ insert_data = {
68
+ "platform": "tiktok",
69
+ "campaign_id": campaign_id,
70
+ "campaign_name": campaign_name,
71
+ "adset_id": adset_id,
72
+ "adset_name": adset_name,
73
+ "ad_id": ad_id,
74
+ "lead_id": lead_id,
75
+ "full_name": field_map.get("full_name"),
76
+ "email": field_map.get("email"),
77
+ "phone": field_map.get("phone_number"),
78
+ "city": field_map.get("city"),
79
+ "lead_timestamp": formatted_create_time
80
+ }
81
+
82
+ headers = {
83
+ "apikey": SUPABASE_API_KEY,
84
+ "Authorization": f"Bearer {SUPABASE_API_KEY}",
85
+ "Content-Type": "application/json"
86
+ }
87
+
88
+ supa_resp = requests.post(
89
+ f"{SUPABASE_URL}/rest/v1/binrushdleads",
90
+ headers=headers,
91
+ json=insert_data
92
+ )
93
+
94
+ print("💾 Supabase insert status:", supa_resp.status_code)
95
+ if supa_resp.status_code == 201:
96
+ print("✅ Lead inserted successfully.")
97
+ else:
98
+ try:
99
+ print("❌ Supabase Error:", supa_resp.json())
100
+ except Exception:
101
+ print("❌ Supabase Response:", supa_resp.text)
102
+
103
  return {"status": "ok"}