في هذا الدليل، ستقوم ببناء MailKit، منصة بريد إلكتروني تجارية حيث يدفع العملاء مقدمًا للحصول على مجموعة من أرصدة البريد الإلكتروني. تمنح الخطة بدلًا شهريًا للبريد الإلكتروني؛ وعندما ينخفض رصيد العملاء، يمكنهم شراء حزمة تعبئة بدلاً من الانتظار للدورة التالية. يتم خصم رصيد واحد تلقائيًا مع كل إرسال.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.
هذا الدليل يستخدم Resend كمزود بريد إلكتروني. تكفي خطته المجانية (3000 بريد إلكتروني/شهر) لبناء واختبار العملية بالكامل دون حساب مدفوع. النمط يعمل مع أي مزود؛ قم بتبديل
resend.emails.send لخدمات مثل SendGrid أو Postmark أو SES أو جهاز إرسال SMTP الخاص بك.- إنشاء حق ائتمان مخصص (البريد الإلكتروني) في لوحة التحكم الخاصة بك
- إرفاق الأرصدة بخطة اشتراك ومنتج تعبئة لمرة واحدة
- إرسال رسائل بريد إلكتروني حقيقية عبر Resend واقتطاع رصيد واحد لكل إرسال عبر إدخال دفتر الأستاذ
- استعلام عن رصيد ائتمان مباشر من واجهتك الأمامية
- التحقق من صحة webhooks الخاصة بـ Dodo والتعامل
credit.balance_lowلتنبيه العملاء قبل الوصول إلى الصفر
ما سنقوم ببنائه
إليك نموذج التسعير لMailKit:| المنتج | السعر | الرسائل |
|---|---|---|
| خطة MailKit | $19/شهر | 5000 رسالة/دورة |
| حزمة تعبئة | $9 لمرة واحدة | +5000 رسالة |
قبل أن تبدأ، تأكد من أن لديك:
- حساب Dodo Payments (وضع الاختبار كاف)
- حساب Resend مجاني ومفتاح API
- Node.js 18+ ومعرفة أساسية بـ TypeScript
الخطوة 1: إنشاء واجب ائتمان البريد الإلكتروني الخاص بك
يحدد واجب الائتمان الوحدة التي تبيعها منصتك: في هذه الحالة، إرسال بريد إلكتروني واحد.
- قم بتسجيل الدخول إلى لوحة التحكم في Dodo Payments الخاصة بك
- انقر على المنتجات في الشريط الجانبي الأيسر
- اختر علامة التبويب الأرصدة
- انقر على إنشاء ائتمان
Email Credits
نوع الائتمان: اختر وحدة مخصصة
اسم الوحدة: email
الدقة: 0 (رسالة البريد الإلكتروني هي وحدة كاملة دائمًا؛ لا يمكنك إرسال نصف رسالة)
انتهاء الصلاحية: 30 days (يتم إعادة ضبط بدل كل دورة)
الدقة لا يمكن تغييرها بعد الإنشاء. للوحدات المتقطعة مثل رسائل البريد الإلكتروني أو الجلسات، 0 هو الصحيح.
لن نقوم بتمكين التمديد أو الغرامات الزائدة في هذا الدليل؛ الهدف هو أبسط تدفق CBB ممكن. يمكنك مراجعتها في وقت لاحق على مرفق الائتمان.
انقر على إنشاء الائتمان. افتح الائتمان ونسخ هويته. ستحتاجها لاستفسارات الرصيد الخلفية. يبدو مثل cent_xxxxxxxxxxxx.
جاهز Email Credits تملكك. التالي: المنتجات التي تمنح الأرصدة للعملاء.
الخطوة 2: إنشاء الخطة وحزمة التعبئة
ستقوم بإنشاء منتجين: خطة اشتراك متجددة و حزمة تعبئة دفع واحد. تمنح الخطة 5000 رسالة لكل دورة؛ تضيف التعبئة 5000 رسالة أخرى عند الطلب. كلاهما يرفق نفسEmail Credits الواجب.
هذا الدليل يخصم الأرصدة من خلال إدخالات دفتر الأستاذ المباشرة بدلاً من العدادات المعتمدة على الاستخدام. إدخالات دفتر الأستاذ فورية (يحدث تحديث الرصيد في ميلي ثانية)، لا تحتاج إلى إعداد إضافي، وتناسب بشكل جيد عندما تساوي حركة المستخدم في الرصيد. إذا كنت تفضل التخصيم التلقائي من أحداث الاستخدام التي تم ابتلاعها (مفيد للوحدات الموزونة مثل “الرموز” أو ” MB المصنعة”)، راجع الفوترة المعتمدة على الرصيد → الفوترة المعتمدة على الاستخدام في الرصيد للنمط المعتمد على العدادات.
خطة MailKit ($19/شهر، 5000 بريد إلكتروني)
- انتقل إلى المنتجات → إنشاء منتج
- املأ تفاصيل المنتج:
MailKit Plan
الوصف: 5,000 transactional emails per month.
- حدد الاشتراك كنوع للمنتج
- حدد السعر المتكرر:
19.00
دورة الفوترة: Monthly
العملة: USD
انتقل إلى حقوق → أرصدة → إرفاق وقم بالتكوين:
حق الائتمان: Email Credits
الأرصدة الصادرة لكل دورة فوترة: 5000
عتبة الرصيد المنخفض: 20 (النسبة المئوية؛ يتم تشغيل credit.balance_low عند انخفاض الرصيد إلى أقل من 20٪ من بدل الدورة، أي 1000 رسالة)
استيراد إعدادات الائتمان الافتراضية: تمكين (يستخدم صلاحية 30 يومًا من الخطوة 1)
اضغط على إضافة إلى المنتج، ثم حفظ المنتج. انسخ معرف المنتج (pdt_xxxxxxxxxxxx).
الخطة: $19/شهر → 5000 رسالة يتم تحديثها في كل دورة.
حزمة التعبئة ($9 لمرة واحدة، 5000 رسالة)
- اذهب إلى المنتجات → إنشاء منتج
- املأ تفاصيل المنتج:
Email Top-Up Pack
الوصف: Add 5,000 emails to your MailKit balance instantly.
- حدد دفعة فردية كنوع للمنتج
- حدد التسعير:
9.00
العملة: USD
في الحقوق → الأرصدة → إرفاق:
- واجب الائتمان:
Email Credits - الأرصدة الصادرة:
5000
الخطوة 3: إعداد الخلفية
الآن قم ببناء خادم Express الذي يتعامل مع الدفع، الإرسال، استعلامات الرصيد، و webhooks.package.json:
tsx يشغل TypeScript مباشرة بدون خطوة بناء أو tsconfig.json، وهو مثالي لدليل. للإنتاج، أضف tsconfig.json ونص build.
قم بإنشاء .env:
.env
DODO_WEBHOOK_KEY في الخطوة 4 بعد إنشاء النقطة النهاية. مفتاح API لل Resend يأتي من resend.com/api-keys.
أضف .env إلى .gitignore مباشرة. لا تقم بارتكاب مفاتيح API.
قم بإنشاء server.ts في جذر المشروع:
server.ts
express.json() يقوم بتحليل وإعادة تسلسل الجسم، مما يكسر التحقق من التوقيع. قم بتعريف /webhooks/dodo باستخدام express.raw() قبل سطر app.use(express.json()).
جهز الخلفية: الاشتراك، التعبئة، الرصيد، الإرسال، ومعالج الويب مرتبطة جميعًا.
قم بإنشاء public/index.html:
public/index.html
الخطوة 4: ربط نقطة نهاية Webhook
حدثcredit.balance_low هو ما يسمح لك بتنبيه العملاء قبل نفادهم. بدونه، أول مرة يلاحظون فيها المشكلة هي عندما يفشل إرسال البريد الإلكتروني.
تحتاج Webhooks إلى URL عام. استخدم ngrok (أو أي نفق) أثناء التطوير:
https://1234abcd.ngrok-free.app).
- انتقل إلى المطورون → Webhooks → إضافة نقطة نهاية
- URL:
https://1234abcd.ngrok-free.app/webhooks/dodo - الأحداث: اشترك في
credit.added،credit.balance_low، وcredit.rolled_over - احفظ، ثم انسخ المفتاح إلى
.envكـDODO_WEBHOOK_KEY - أعد تشغيل الخادم الخاص بك
الخطوة 5: اختبار التدفق الكامل
MailKit running on http://localhost:3000. افتحه في متصفحك.
- في القسم 1، أدخل بريد إلكتروني واختبار الاسم، انقر على الحصول على رابط الدفع
- افتح الرابط، واستكمل دفع باستخدام بطاقة اختبار
- بعد الدفع، اعثر على
customer_idفي لوحة القيادة الخاصة بك تحت العملاء
- استبدل
customer_idفي القسم 3 - اترك
toمضبوطًا إلىdelivered@resend.dev(صندوق إعادة الارتداد لResend الذي يقبل كل شيء) - انقر فوق إرسال
- انتقل إلى العملاء → [العميل] → الأرصدة → أرصدة البريد الإلكتروني
- انقر على تعديل الرصيد وخصم
4000 - أرسل بريدًا إلكترونيًا آخر عبر العرض التجريبي
- أدخل
customer_idفي القسم 4 - انقر على شراء 5000 رسالة، وأكمل الدفع التجريبي
- قم بتحديث الرصيد، وسيرتفع بمقدار 5000
credit.added مع grant_source: one_time. تتكدس التعبئة فوق أرصدة الاشتراك؛ يتم استهلاك كلا المجموعتين بطريقة FIFO (القدمى أولاً).
قم بخصم الرصيد يدويًا حتى يصل إلى الصفر، ثم حاول إرسال رسالة أخرى. ستحصل على:
استكشاف الأخطاء وإصلاحها
يتم حساب التوقيع على الجسد الرئيسي لHTTP الخام.express.json() يقوم بتحليل وتكرار الحمولة، مما يكسر HMAC. تأكد من أن /webhooks/dodo قد تم تسجيله مع express.raw({ type: 'application/json' }) فوق سطر app.use(express.json())، وأن DODO_WEBHOOK_KEY يتطابق مع مفتاح التوقيع المعروض على صفحة تفاصيل النقطة النهاية.
ثلاثة أشياء لتأكيدها، بهذا الترتيب:
- أكمل العميل عملية الدفع (يتم إصدار الأرصدة عند الدفع الناجح، وليس عند إنشاء الجلسة)
CREDIT_ENTITLEMENT_IDفي.envمطابق للائتمان الذي تم إرفاقه بالمنتج (الرموز الغير متطابقة تكتب بصمت إلى الائتمان الخطأ)- أن
customer_idالذي تمرره جاء من Dodo (جدولcustomersفي لوحة القيادة)، وليس من قاعدتك الخاصة
onboarding@resend.dev يسلم فقط إلى البريد الإلكتروني على حساب Resend الخاص بك أو إلى delivered@resend.dev. لإرسال إلى أي شخص آخر، تحقق من نطاق واستخدم عنوان from عليه.
ما قمت ببنائه
Email Credits، معرف مرة واحدة وملحق بكل من خطة الاشتراك وحزمة التعبئة.
$19/شهر يمنح 5000 رسالة لكل دورة. يعرف العملاء ما الذي يدفعون مقابله، وتعرف أنت تكلفتك القصوى.
منتج لمرة واحدة يمنح 5000 رسالة. يتكدس على أرصدة الاشتراك بدون تغيير في الخطة المطلوبة.
استدعاء createLedgerEntry واحد بعد كل إرسال. لا مقياس، لا تأخر التجميع، غير معدل عند إعادة المحاولة عبر رقم الرسالة للResend.
اقرأ كامل وثائق CBB للحصول على أوضاع التمديد، الإدارة المحاسبية، والسطح الكامل للAPI.
تحتاج إلى مساعدة؟