الانتقال إلى المحتوى الرئيسي

أحداث استرداد سلة التسوق المتروكة

تتبع أحداث الويب هوك التالية دورة حياة استرداد سلة التسوق المتروكة:
الحدثالوصف
abandoned_checkout.detectedتم اكتشاف خروج مهجور. يتم الإرسال عندما يتم تحديد الدفع باعتباره مهجورًا (فشل أو غير مكتمل) ويبدأ سير عمل الاسترداد.
abandoned_checkout.recoveredأكمل العميل الدفع من خلال رابط الاسترداد. يحتوي حقل recovered_payment_id على معرف الدفع الناجح.

حقول حمولات استرداد الخروج المهجور

payment_id
string
مطلوب
الدفع الأصلي الذي تم التخلي عنه. استخدم هذا للبحث عن تفاصيل المنتج والمبلغ والعملة.
customer_id
string
مطلوب
العميل الذي تخلى عن الخروج.
abandonment_reason
string
مطلوب
سبب التخلي عن الخروج. أحدهم:
  • payment_failed — حاول العميل الدفع لكنه فشل
  • checkout_incomplete — زار العميل الخروج لكنه لم يحاول الدفع أبدًا
status
string
مطلوب
حالة دورة الحياة الحالية لمحاولة الاسترداد هذه. أحدهم:
  • abandoned — تم الكشف، لم يتم إرسال أي رسائل بريد إلكتروني بعد
  • recovering — تم إرسال بريد إلكتروني للاسترداد على الأقل
  • recovered — أكمل العميل الدفع
  • exhausted — تم إرسال جميع الرسائل الإلكترونية أو تم العثور على خروج أحدث
  • opted_out — الغاء الاشتراك من قبل العميل
abandoned_at
string
مطلوب
ISO 8601 طابع زمني عند اكتشاف الخروج على أنه مهجور.
recovered_payment_id
string | null
معرّف الدفع لاسترداد الدفع الناجح. null حتى يتم استرداد الخروج.

مثال: التعامل مع Webhooks ACR

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});

أحداث التجديد

تتبع أحداث الويب هوك التالية دورة حياة التجديد:
الحدثالوصف
dunning.startedتم إنشاء محاولة تجديد للاشتراك الذي دخل on_hold أو تم إلغاؤه من قبل العميل.
dunning.recoveredقام العميل بتحديث طريقة الدفع الخاصة به وتم الدفع بنجاح. يحتوي حقل payment_id على معرّف الدفع الناجح.

حقول حمولات محاولة التجديد

subscription_id
string
مطلوب
الاشتراك الذي أثار محاولة التجديد.
customer_id
string
مطلوب
العميل الذي يمتلك الاشتراك.
trigger_state
string
مطلوب
حالة الاشتراك التي أثارت التجديد. أحدهم:
  • on_hold — تم إيقاف الاشتراك مؤقتًا بسبب فشل الدفع
  • cancelled — ألغى العميل من بوابة العميل
status
string
مطلوب
حالة دورة الحياة الحالية لمحاولة التجديد هذه. أحدهم:
  • recovering — يتم إرسال رسائل البريد الإلكتروني للتجديد
  • recovered — قام العميل بتحديث طريقة الدفع وتم الدفع بنجاح
  • exhausted — تم إرسال جميع الرسائل الإلكترونية أو تم تغيير حالة الاشتراك
created_at
string
مطلوب
ISO 8601 طابع زمني عند إنشاء محاولة التجديد.
payment_id
string | null
معرّف الدفع لاسترداد الدفع الناجح. null أثناء الاسترداد.

مثال: التعامل مع Webhooks التجديد

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
اشترك في كل من dunning.started وdunning.recovered لتتبع دورة حياة التجديد بالكامل. استخدم dunning.started لإيقاف فترات سماح أو وضع علامة على الاشتراكات المعرضة للخطر في نظامك.

Abandoned Cart Recovery

قم بتكوين تسلسل بريد إلكتروني لـ ACR وحوافز الخصم.

Subscription Dunning

قم بتكوين تسلسل بريد إلكتروني للتجديد للاشتراكات المنتهية.

Subscription Webhooks

أحداث دورة حياة الاشتراك ذات الصلة مثل subscription.on_hold وsubscription.cancelled.

مخطط حمولة الويب هوك

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
مطلوب
abandonment_reason
enum<string>
مطلوب
الخيارات المتاحة:
payment_failed,
checkout_incomplete
customer_id
string
مطلوب
payment_id
string
مطلوب
status
enum<string>
مطلوب
الخيارات المتاحة:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on April 20, 2026