diff --git a/src/app/api/webhooks/saleor/route.ts b/src/app/api/webhooks/saleor/route.ts index a1d094e..bc676ab 100644 --- a/src/app/api/webhooks/saleor/route.ts +++ b/src/app/api/webhooks/saleor/route.ts @@ -5,10 +5,18 @@ import { OrderConfirmation } from "@/emails/OrderConfirmation"; import { OrderShipped } from "@/emails/OrderShipped"; import { OrderCancelled } from "@/emails/OrderCancelled"; import { OrderPaid } from "@/emails/OrderPaid"; +import { OpenPanel } from "@openpanel/nextjs"; const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com"; const DASHBOARD_URL = process.env.DASHBOARD_URL || "https://dashboard.manoonoils.com"; +// Initialize OpenPanel for server-side tracking +const op = new OpenPanel({ + clientId: process.env.NEXT_PUBLIC_OPENPANEL_CLIENT_ID || "", + clientSecret: process.env.OPENPANEL_CLIENT_SECRET || "", + apiUrl: process.env.OPENPANEL_API_URL || "https://op.nodecrew.me/api", +}); + interface SaleorWebhookHeaders { "saleor-event": string; "saleor-domain": string; @@ -274,6 +282,23 @@ async function handleOrderConfirmed(order: SaleorOrder, eventType: string) { }); } + // Track order in OpenPanel + op.track("order_received", { + order_id: order.id, + order_number: order.number, + total: order.total.gross.amount, + currency: order.total.gross.currency, + item_count: order.lines.reduce((sum, line) => sum + line.quantity, 0), + customer_email: customerEmail, + event_type: eventType, + }); + + // Track revenue + op.track("revenue", { + amount: order.total.gross.amount, + currency: order.total.gross.currency, + }); + // Always send admin notification for both ORDER_CREATED and ORDER_CONFIRMED await sendEmailToAdmin({ subject: `🎉 New Order #${order.number} - ${formatPrice(order.total.gross.amount, currency)}`,