> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# استرداد

> الحمولات المرسلة إلى نقطة نهاية الويب هوك الخاصة بك عند حدوث استرداد سلة التسوق المتروكة أو أحداث التجديد.

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

تتبع أحداث الويب هوك التالية دورة حياة استرداد سلة التسوق المتروكة:

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

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

<ParamField body="payment_id" type="string" required>
  الدفع الأصلي الذي تم التخلي عنه. استخدم هذا للبحث عن تفاصيل المنتج والمبلغ والعملة.
</ParamField>

<ParamField body="customer_id" type="string" required>
  العميل الذي تخلى عن الخروج.
</ParamField>

<ParamField body="abandonment_reason" type="string" required>
  سبب التخلي عن الخروج. أحدهم:

  * `payment_failed` — حاول العميل الدفع لكنه فشل
  * `checkout_incomplete` — زار العميل الخروج لكنه لم يحاول الدفع أبدًا
</ParamField>

<ParamField body="status" type="string" required>
  حالة دورة الحياة الحالية لمحاولة الاسترداد هذه. أحدهم:

  * `abandoned` — تم الكشف، لم يتم إرسال أي رسائل بريد إلكتروني بعد
  * `recovering` — تم إرسال بريد إلكتروني للاسترداد على الأقل
  * `recovered` — أكمل العميل الدفع
  * `exhausted` — تم إرسال جميع الرسائل الإلكترونية أو تم العثور على خروج أحدث
  * `opted_out` — الغاء الاشتراك من قبل العميل
</ParamField>

<ParamField body="abandoned_at" type="string" required>
  ISO 8601 طابع زمني عند اكتشاف الخروج على أنه مهجور.
</ParamField>

<ParamField body="recovered_payment_id" type="string | null">
  معرّف الدفع لاسترداد الدفع الناجح. `null` حتى يتم استرداد الخروج.
</ParamField>

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

```javascript theme={null}
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` على معرّف الدفع الناجح. |

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

<ParamField body="subscription_id" type="string" required>
  الاشتراك الذي أثار محاولة التجديد.
</ParamField>

<ParamField body="customer_id" type="string" required>
  العميل الذي يمتلك الاشتراك.
</ParamField>

<ParamField body="trigger_state" type="string" required>
  حالة الاشتراك التي أثارت التجديد. أحدهم:

  * `on_hold` — تم إيقاف الاشتراك مؤقتًا بسبب فشل الدفع
  * `cancelled` — ألغى العميل من بوابة العميل
</ParamField>

<ParamField body="status" type="string" required>
  حالة دورة الحياة الحالية لمحاولة التجديد هذه. أحدهم:

  * `recovering` — يتم إرسال رسائل البريد الإلكتروني للتجديد
  * `recovered` — قام العميل بتحديث طريقة الدفع وتم الدفع بنجاح
  * `exhausted` — تم إرسال جميع الرسائل الإلكترونية أو تم تغيير حالة الاشتراك
</ParamField>

<ParamField body="created_at" type="string" required>
  ISO 8601 طابع زمني عند إنشاء محاولة التجديد.
</ParamField>

<ParamField body="payment_id" type="string | null">
  معرّف الدفع لاسترداد الدفع الناجح. `null` أثناء الاسترداد.
</ParamField>

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

```javascript theme={null}
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 });
});
```

<Tip>
  اشترك في كل من `dunning.started` و`dunning.recovered` لتتبع دورة حياة التجديد بالكامل. استخدم `dunning.started` لإيقاف فترات سماح أو وضع علامة على الاشتراكات المعرضة للخطر في نظامك.
</Tip>

<CardGroup cols={2}>
  <Card title="Abandoned Cart Recovery" icon="cart-shopping" href="/features/recovery/abandoned-cart-recovery">
    قم بتكوين تسلسل بريد إلكتروني لـ ACR وحوافز الخصم.
  </Card>

  <Card title="Subscription Dunning" icon="rotate" href="/features/recovery/subscription-dunning">
    قم بتكوين تسلسل بريد إلكتروني للتجديد للاشتراكات المنتهية.
  </Card>

  <Card title="Subscription Webhooks" icon="repeat" href="/developer-resources/webhooks/intents/subscription">
    أحداث دورة حياة الاشتراك ذات الصلة مثل `subscription.on_hold` و`subscription.cancelled`.
  </Card>
</CardGroup>

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