import { createServiceClient } from "@/lib/supabase"; import { isBot, anonymizeIp, parseDevice, parseBrowser, parseOs } from "@/lib/analytics"; export async function POST(request: Request) { try { const body = await request.json(); const { phone_number, source_page, source_element, session_id } = body; // Validierung if (!phone_number || !source_page || !source_element) { return Response.json( { error: "Missing required fields: phone_number, source_page, source_element" }, { status: 400 } ); } // IP + User-Agent extrahieren const ip = request.headers.get("x-forwarded-for")?.split(",")[0].trim() || request.headers.get("x-real-ip") || "0.0.0.0"; const ua = request.headers.get("user-agent") || ""; // Bot-Filter (silent skip) if (isBot(ua)) { return Response.json({ ok: true }); } // Parsing const device = parseDevice(ua); const browser = parseBrowser(ua); const os = parseOs(ua); const ipAnon = anonymizeIp(ip); // DB Insert const supabase = createServiceClient(); const { error } = await supabase.from("phone_clicks").insert({ phone_number, source_page, source_element, session_id: session_id || null, ip_anonymized: ipAnon, country: null, region: null, city: null, device_type: device, browser, os, user_agent: ua, is_bot: false, }); if (error) { console.error("Phone click tracking error:", error); return Response.json({ ok: true }); // Silent fail } return Response.json({ ok: true }); } catch (error) { console.error("Phone click tracking exception:", error); return Response.json({ ok: true }); // Silent fail } }