fix(webhook): prevent duplicate customer emails by only sending on ORDER_CONFIRMED
Some checks failed
Build and Deploy / build (push) Has been cancelled

Both ORDER_CREATED and ORDER_CONFIRMED were sending customer emails,
causing duplicates. Now only ORDER_CONFIRMED sends customer emails,
while both events still notify admins.
This commit is contained in:
Unchained
2026-03-25 16:17:35 +02:00
parent eb311568db
commit bf628f873f

View File

@@ -237,7 +237,7 @@ function parseOrderItems(lines: SaleorLineItem[], currency: string) {
}));
}
async function handleOrderConfirmed(order: SaleorOrder) {
async function handleOrderConfirmed(order: SaleorOrder, eventType: string) {
const language = getCustomerLanguage(order);
const currency = order.total.gross.currency;
const customerName = getCustomerName(order);
@@ -245,6 +245,9 @@ async function handleOrderConfirmed(order: SaleorOrder) {
const customerEmail = order.userEmail;
const phone = order.shippingAddress?.phone || order.billingAddress?.phone;
// Only send customer email for ORDER_CONFIRMED, not ORDER_CREATED
// This prevents duplicate emails when both events fire
if (eventType === "ORDER_CONFIRMED") {
await sendEmailToCustomer({
to: customerEmail,
subject:
@@ -269,7 +272,9 @@ async function handleOrderConfirmed(order: SaleorOrder) {
language,
idempotencyKey: `order-confirmed/${order.id}`,
});
}
// Always send admin notification for both ORDER_CREATED and ORDER_CONFIRMED
await sendEmailToAdmin({
subject: `🎉 New Order #${order.number} - ${formatPrice(order.total.gross.amount, currency)}`,
react: OrderConfirmation({
@@ -469,7 +474,7 @@ async function handleSaleorWebhook(
switch (event) {
case "ORDER_CREATED":
case "ORDER_CONFIRMED":
await handleOrderConfirmed(order);
await handleOrderConfirmed(order, event);
break;
case "ORDER_FULFILLED":
await handleOrderFulfilled(order);