45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
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;
|
|
|
|
if (!phone_number || !source_page || !source_element) {
|
|
return Response.json({ error: "Missing required fields" }, { status: 400 });
|
|
}
|
|
|
|
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") || "";
|
|
|
|
if (isBot(ua)) {
|
|
return Response.json({ ok: true });
|
|
}
|
|
|
|
const supabase = createServiceClient();
|
|
const { error } = await supabase.from("phone_clicks").insert({
|
|
phone_number,
|
|
source_page,
|
|
source_element,
|
|
session_id: session_id || null,
|
|
ip_anonymized: anonymizeIp(ip),
|
|
device_type: parseDevice(ua),
|
|
browser: parseBrowser(ua),
|
|
os: parseOs(ua),
|
|
});
|
|
|
|
if (error) {
|
|
console.error("Phone click tracking error:", error);
|
|
}
|
|
|
|
return Response.json({ ok: true });
|
|
} catch {
|
|
return Response.json({ ok: true });
|
|
}
|
|
}
|