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

المقدمة

قم بتنفيذ الوظائف بدون خادم والمهام الخلفية تلقائيًا عند حدوث أحداث الدفع. قم بمعالجة المدفوعات، إرسال الإشعارات، تحديث قواعد البيانات، وتشغيل سير العمل المعقد باستخدام منصة تنفيذ الوظائف الموثوقة من Inngest.
تتطلب هذه التكاملات عنوان URL الخاص بـ webhook من Inngest من تكوين الوظيفة الخاصة بك.

البدء

1

افتح قسم Webhook

في لوحة معلومات مدفوعات Dodo الخاصة بك، انتقل إلى Webhooks → + إضافة نقطة نهاية وقم بتوسيع قائمة التكاملات.
إضافة نقطة نهاية وقائمة التكاملات
2

اختر Inngest

اختر بطاقة تكامل Inngest.
3

إنشاء وظيفة Inngest

في Inngest، قم بإنشاء وظيفة جديدة ونسخ عنوان URL الخاص بـ webhook من تكوين الوظيفة.
4

لصق عنوان URL الخاص بـ Webhook

ألصق عنوان URL الخاص بـ webhook من Inngest في تكوين نقطة النهاية.
5

تكوين التحويل

قم بتحرير كود التحويل لتنسيق الأحداث لوظيفة Inngest الخاصة بك.
6

اختبار وإنشاء

اختبر باستخدام حمولات عينة وانقر على إنشاء لتفعيل التكامل.
7

تم!

🎉 ستقوم أحداث الدفع الآن بتشغيل وظائف Inngest الخاصة بك تلقائيًا.

أمثلة على كود التحويل

حمولة حدث أساسية

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

معالج حدث الاشتراك

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

معالج حدث النزاع

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

حالات استخدام Inngest الشائعة

  • إرسال رسائل تأكيد عبر البريد الإلكتروني
  • تحديث سجلات العملاء
  • معالجة المبالغ المستردة
  • إنشاء فواتير
  • تحديث المخزون
  • الترحيب بالمشتركين الجدد
  • معالجة الإلغاءات
  • إرسال تذكيرات التجديد
  • تحديث دورات الفوترة
  • التعامل مع المدفوعات الفاشلة
  • تحديث مقاييس الإيرادات
  • تتبع سلوك العملاء
  • إنشاء تقارير
  • مزامنة البيانات مع منصات التحليلات
  • حساب معدلات التراجع

نصائح

  • استخدم أسماء أحداث وصفية لتحسين تنظيم الوظائف
  • تضمين سياق المستخدم لتنفيذ الوظائف
  • تعيين طوابع زمنية صحيحة لترتيب الأحداث
  • هيكلة البيانات بشكل متسق عبر الأحداث
  • استخدام ميزات إعادة المحاولة ومعالجة الأخطاء في Inngest

استكشاف الأخطاء وإصلاحها

  • تحقق من أن عنوان URL الخاص بـ webhook صحيح ونشط
  • تحقق من أن وظيفة Inngest تم نشرها ونشطة
  • تأكد من أن أسماء الأحداث تتطابق مع مشغلات الوظائف
  • راجع سجلات وظيفة Inngest بحثًا عن الأخطاء
  • تحقق من أن هيكل الحمولة يتطابق مع توقعات Inngest
  • تحقق من أن أسماء الأحداث مُنسقة بشكل صحيح
  • تأكد من تضمين جميع الحقول المطلوبة
  • اختبر باستخدام أداة اختبار webhook من Inngest