11# analytics.py
22import logging
33from config import AMPLITUDE_API_KEY
4- from amplitude import Amplitude , BaseEvent
4+ from amplitude import Amplitude , BaseEvent , Identify , EventOptions
55
66logger = logging .getLogger (__name__ )
77
@@ -21,14 +21,52 @@ def track_event(user_id, event_type, event_properties=None):
2121 :param event_properties: Optional dict of event metadata
2222 """
2323
24+ if event_properties :
25+ try :
26+ user_properties = {
27+ "username" : event_properties .get ("username" , "" ),
28+ "is_bot" : event_properties .get ("is_bot" , False ),
29+ "language_code" : event_properties .get ("language_code" , "" ),
30+ "is_premium" : event_properties .get ("is_premium" , False ),
31+ "environment" : event_properties .get ("environment" , "production" )
32+ }
33+ identify_user (user_id , user_properties , event_properties = event_properties )
34+ except Exception as e :
35+ logger .error (f"[Amplitude] Identify failed: { e } " )
36+
2437 event = BaseEvent (
2538 user_id = str (user_id ),
2639 event_type = event_type ,
27- event_properties = event_properties or {}
40+ event_properties = event_properties or {},
41+ user_properties = event_properties or {}
2842 )
2943
3044 try :
3145 amplitude .track (event )
3246 logger .info (f"[Amplitude] Event tracked: { event_type } for user { user_id } " )
3347 except Exception as e :
3448 logger .error (f"[Amplitude] Tracking failed: { e } " )
49+
50+
51+ def identify_user (user_id , user_properties , event_properties = None ):
52+ identity = Identify ()
53+ identity .set ("user_id" , str (user_id ))
54+ identity .set ("username" , user_properties .get ("username" , "" ))
55+ identity .set ("is_bot" , user_properties .get ("is_bot" , False ))
56+ identity .set ("language_code" , user_properties .get ("language_code" , "" ))
57+ identity .set ("is_premium" , user_properties .get ("is_premium" , False ))
58+ identity .set ("environment" , user_properties .get ("environment" , "production" ))
59+
60+ if event_properties :
61+ for key , value in event_properties .items ():
62+ if key == "video_url" or key == "video_id" :
63+ video_url = value .strip ().lower ()
64+ identity .append ("video_url" , video_url )
65+
66+ try :
67+ event_options = EventOptions (user_id = str (user_id ))
68+ amplitude .identify (identity , event_options = event_options )
69+ logger .info (f"[Amplitude] EventOptions type: { type (event_options )} . And here is the object itself: { event_options } " )
70+ logger .info (f"[Amplitude] User identified: { user_id } with properties { user_properties } " )
71+ except Exception as e :
72+ logger .error (f"[Amplitude] Identify failed: { e } " )
0 commit comments