تفرض الفوترة القائمة على المقاعد رسومًا على العملاء بناءً على عدد المستخدمين في حساباتهم. يطبّق Dodo Payments ذلك باستخدام نظام الإضافات: منتج اشتراك أساسي بالإضافة إلى إضافة لكل مقعد، حيث تمثل الكمية عدد المقاعد.
Implementation Tutorial
دليل خطوة بخطوة مع أمثلة تعليمات برمجية.
Add-ons Documentation
تعرف على نظام الإضافات الذي يغذي الفوترة المعتمدة على المقاعد.
Subscription Management
إدارة الاشتراكات المعتمدة على المقاعد وتغييرات الخطة.
Webhooks
تتبع تغييرات المقاعد باستخدام ويب هوكس الاشتراك.
ما هي الفوترة المعتمدة على المقاعد؟
تفرض الفوترة بحسب المقاعد رسومًا على العملاء بناءً على عدد المستخدمين الذين يصلون إلى منتجك. وبدلًا من رسم ثابت، يتدرج السعر حسب حجم الفريق.حالات الاستخدام الشائعة
فوائد التسعير المعتمد على المقاعد
لنشاطك التجاري:- تنمو الإيرادات مع نمو العملاء
- يمكن للعملاء التخطيط لميزانياتهم بشكل متوقع
- مسار ترقية واضح من الخطة الفردية إلى خطة الفريق ثم المؤسسة
- قيمة عمرية أعلى مع توسع الفرق
- يدفعون فقط مقابل المستخدمين الذين لديهم
- سهولة فهم التكاليف والتنبؤ بها
- إضافة المستخدمين أو إزالتهم حسب الحاجة
- أسعار عادلة تتناسب مع حجم الفريق
كيفية العمل
يطبّق Dodo Payments الفوترة القائمة على المقاعد باستخدام نظام الإضافات. يتكوّن الاشتراك القائم على المقاعد من جزأين:
الإجمالي الشهري للعميل هو:
استراتيجيات التسعير
اختر استراتيجية التسعير المعتمدة على المقاعد التي تناسب عملك:الاستراتيجية 1: خطة أساسية + إضافة لكل مقعد
قم بتضمين عدد محدد من المقاعد في الخطة الأساسية، وفرض رسوم على المقاعد الإضافية.الاستراتيجية 2: تسعير خالص لكل مقعد
فرض سعر ثابت لكل مقعد دون رسوم أساسية.الاستراتيجية 3: التسعير المتدرج للمقاعد
خطط أساسية مختلفة مع أسعار مختلفة لكل مقعد.الاستراتيجية 4: حزم المقاعد
بيع المقاعد في حزم بدلًا من بيعها بشكل فردي.إعداد الفوترة القائمة على المقاعد
الخطوة 1: خطّط لتسعيرك
قبل التنفيذ، حدّد بنية التسعير لديك:1
Define Base Plan
حدّد ما يتضمنه الاشتراك الأساسي:
- السعر الأساسي (يمكن أن يكون $0 في حالة التسعير الخالص بحسب المقعد)
- عدد المقاعد المضمنة
- الميزات المتاحة في هذه الفئة
2
Set Seat Pricing
حدّد تكلفة الإضافة لكل مقعد:
- سعر كل مقعد إضافي
- أي خصومات على الحجم (عبر إضافات متعددة)
- الحد الأقصى المسموح به للمقاعد (إن وُجد)
3
Consider Billing Frequency
واءم تسعير المقاعد مع دورة الفوترة لديك:
- الاشتراكات الشهرية → رسوم مقاعد شهرية
- الاشتراكات السنوية → رسوم مقاعد سنوية (غالبًا مع خصم)
الخطوة 2: أنشئ إضافة المقعد
في لوحة معلومات Dodo Payments:- انتقل إلى المنتجات → الإضافات
- انقر على إنشاء إضافة
- اضبط الإضافة:
الخطوة 3: أنشئ الاشتراك الأساسي
أنشئ منتج الاشتراك لديك:- انتقل إلى المنتجات → إنشاء منتج
- حدّد اشتراك
- اضبط التسعير والتفاصيل
- في قسم الإضافات، أرفق إضافة المقعد
الخطوة 4: أرفق الإضافة بالمنتج
اربط إضافة المقعد باشتراكك:- عدّل منتج الاشتراك
- مرّر إلى قسم الإضافات
- انقر على إضافة إضافات
- حدّد إضافة المقعد
- احفظ التغييرات
يدعم منتج الاشتراك الآن التسعير القائم على المقاعد. ويمكن للعملاء شراء أي كمية من المقاعد الإضافية أثناء إتمام الدفع.
إدارة المقاعد
إضافة مقاعد إلى اشتراكات جديدة
عند إنشاء جلسة إتمام دفع، حدّد كمية المقاعد:تغيير عدد المقاعد في الاشتراكات الحالية
استخدم Change Plan API لضبط المقاعد. تحدد مصفوفةaddons الإجمالي الجديد لعدد المقاعد (وليس الفرق).
إزالة المقاعد
لتقليل عدد المقاعد، حدّد الكمية الأقل:إزالة جميع المقاعد الإضافية
مرّر مصفوفةaddons فارغة لإزالة جميع الإضافات:
التوزيع النسبي لتغييرات المقاعد
عند تطبيق تغيير في المقاعد في منتصف الدورة، يحسب Dodo Payments الرسوم الفورية عبر ثلاث خطوات:كيفية احتساب الرصيد في كل وضع
مع
difference_immediately، يدفع العميل فقط الفرق بين سعر الخطة القديمة وسعر الخطة الجديدة. ومن هنا جاء الاسم، ولهذا يكون المبلغ نفسه بغض النظر عن وقت إجراء التغيير خلال الدورة.
إذا كان الرصيد أكبر من رسوم الدورة الجديدة، يُحتفظ بالفرق كرصيد مرتبط بالاشتراك ويُطبّق تلقائيًا على عمليات التجديد المستقبلية.
مثال عملي: إضافة 5 مقاعد
سيناريو واحد مطبّق عبر الأوضاع الأربعة، بحيث تكون الأرقام قابلة للمقارنة مباشرة.
في جميع الأوضاع الفورية الثلاثة، يحصل العميل على شهر جديد كامل بسعر $130 مقابل ما يدفعه اليوم.
لماذا يهم التوقيت في prorated_immediately
تكلف التغييرات نفسها أكثر كلما أُجريت في وقت لاحق من الدورة، لأن الجزء المتبقي من الدورة الحالية والقابل لإضافته إلى الرصيد يكون أقل.
يحصل العميل على شهر جديد كامل في كل صف. ويتغير فقط التقسيم بين ما “دُفع مسبقًا” وما “يُدفع الآن”.
لجعل تكلفة تغيير المقاعد متساوية بغض النظر عن وقت إجرائه، استخدم
difference_immediately.
مثال عملي: “الرسوم المفاجئة”
هذه هي الحالة التي تفاجئ التجار غالبًا. فقد تؤدي إضافة صغيرة للمقاعد في وقت متأخر من الدورة إلى رسوم أكبر بكثير من سعر الإضافة.
تبلغ تكلفة إضافة مقعد بسعر $10/month $55.00 مع
prorated_immediately. إذ يُفرض على العميل ثمن شهر جديد كامل بقيمة $60، ويُضاف إليه رصيد دائن بقيمة $5 المتبقية من الشهر القديم، كما يُعاد ضبط تاريخ التجديد.
لجعل تكلفة الإضافات الصغيرة في منتصف الدورة مساوية لسعر المقعد فقط دون أي مبلغ إضافي، استخدم difference_immediately.
مثال عملي: إزالة المقاعد (الترقية إلى خطة أقل)
عندما تكون تكلفة الخطة الجديدة أقل من الرصيد، يُحتفظ بالفائض كـ رصيد اشتراك ويُطبّق تلقائيًا على عمليات التجديد المستقبلية لهذا الاشتراك. ولا يُضاف إلى محفظة العميل، كما أنه ليس استحقاقًا ائتمانيًا.يغطي الرصيد الدائن الاشتراك بالكامل، بما في ذلك الخطة الأساسية وجميع الإضافات، وليس المقاعد المُزالة فقط.
قراءة استجابة المعاينة
يعرضpreviewChangePlan بنود الفاتورة الدقيقة التي ستُفرض رسومها. ويحتوي كل بند على proration_factor:
يُحسب التوزيع النسبي حتى الثانية وفقًا للوقت الدقيق للتغيير، وليس بالتقريب إلى أقرب يوم. وتستخدم الأمثلة العملية أعلاه أرقامًا مستديرة عند حدود الأيام للتوضيح.
المعاينة قبل التغيير
عاين التوزيع النسبي دائمًا قبل إجراء التغييرات:تتبّع المقاعد باستخدام Webhooks
راقب تغييرات المقاعد من خلال الاستماع إلى Webhooks الخاصة بالاشتراك:الأحداث ذات الصلة
مثال على معالج Webhook
فرض حدود المقاعد
يجب أن يفرض تطبيقك حدود المقاعد. يتتبّع Dodo Payments الفوترة، لكنك تتحكم في الوصول.- Hard Limit
- Soft Limit with Warning
- Auto-Upgrade
امنع بصرامة إضافة مستخدمين يتجاوز عددهم عدد المقاعد.
الأنماط المتقدمة
أنواع المقاعد المختلفة
قدّم أنواعًا مختلفة من المقاعد بأسعار مختلفة:خصومات المقاعد السنوية
قدّم أسعارًا مخفضة للمقاعد السنوية:الحد الأدنى المطلوب من المقاعد
اشترط حدًا أدنى لعدد المقاعد في خطط معينة:أفضل الممارسات
أفضل ممارسات التسعير
- التواصل الواضح: اعرض التسعير لكل مقعد بشكل بارز في صفحة التسعير لديك
- المقاعد المضمّنة: فكّر في تضمين بضعة مقاعد في السعر الأساسي لتقليل العوائق
- خصومات الحجم: قدّم أسعارًا أقل لكل مقعد للفرق الأكبر للفوز بصفقات المؤسسات
- الحوافز السنوية: خفّض أسعار الخطط السنوية لتحسين التدفق النقدي والاحتفاظ بالعملاء
أفضل الممارسات التقنية
- تخزين أعداد المقاعد مؤقتًا: خزّن أعداد مقاعد الاشتراكات مؤقتًا محليًا لتجنب استدعاءات API عند كل طلب
- المزامنة المنتظمة: زامن عدد المقاعد المحلي دوريًا مع Dodo Payments عبر API
- معالجة حالات الفشل: إذا فشل تغيير المقاعد، اعرض رسائل خطأ واضحة وخيارات لإعادة المحاولة
- سجل التدقيق: سجّل جميع تغييرات المقاعد لنزاعات الفوترة والامتثال
أفضل ممارسات تجربة المستخدم
- ملاحظات فورية: اعرض تأثير التكلفة فورًا عند تعديل المقاعد
- خطوات التأكيد: اطلب التأكيد قبل إجراء تغييرات الفوترة
- شفافية التقسيم النسبي: اشرح الرسوم المحسوبة نسبيًا بوضوح قبل تطبيقها
- سهولة خفض المستوى: لا تجعل تقليل عدد المقاعد صعبًا (فهذا يبني الثقة)
استكشاف الأخطاء وإصلاحها
Seat count mismatch between app and billing
Seat count mismatch between app and billing
العَرَض: يعرض تطبيقك عددًا مختلفًا من المقاعد عن عدد المقاعد في الاشتراك.الأسباب:
- لم يتم استلام Webhook أو معالجته
- حالة تسابق أثناء تغيير المقاعد
- لم يتم تحديث البيانات المخزنة مؤقتًا
- نفّذ معالجات Webhook للحدث
subscription.plan_changed - أضف زرًا بعنوان “مزامنة مع الفوترة” يجلب الاشتراك الحالي
- اضبط مدة صلاحية التخزين المؤقت لضمان التحديث المنتظم
Unexpected mid-cycle charge amount
Unexpected mid-cycle charge amount
العَرَض: العميل مرتبك بسبب مبلغ الرسوم في منتصف الدورة.السبب: استخدام
prorated_immediately في وقت متأخر من دورة الفوترة (راجع مثال الرسوم المفاجئة أعلاه).الحلول:- استخدم دائمًا
previewChangePlanقبل إجراء التغييرات - اعرض تفصيلًا واضحًا: “ستكلف إضافة X من المقاعد $Y اليوم”
- انتقل إلى
difference_immediatelyإذا كنت تريد أن تتطابق الرسوم دائمًا مع فرق السعر
Add-on not appearing in checkout
Add-on not appearing in checkout
العَرَض: إضافة المقعد غير متاحة أثناء إتمام الدفع.الأسباب:
- الإضافة غير مرفقة بالمنتج
- الإضافة مؤرشفة أو محذوفة
- عدم تطابق العملة بين المنتج والإضافة
- تحقّق من إرفاق الإضافة في إعدادات المنتج
- تحقّق من حالة الإضافة في لوحة معلومات الإضافات
- تأكد من تطابق العملات تمامًا
Cannot reduce seats below current usage
Cannot reduce seats below current usage
العَرَض: يريد العميل تقليل عدد المقاعد، لكن توجد مستخدمون معيّنون إليها.الحلول:
- اعرض المستخدمين الذين يجب إزالتهم قبل تقليل المقاعد
- نفّذ سير عمل: إزالة المستخدمين → تقليل المقاعد
- فكّر في فترة سماح قبل فرض تقليل المقاعد
الوثائق ذات الصلة
Seat-Based Pricing Tutorial
دليل تنفيذ كامل مع التعليمات البرمجية.
Add-ons
تعرّف بعمق على نظام الإضافات.
Plan Changes & Proration
تعامل مع تعديلات الاشتراكات.
Subscription Webhooks
تتبّع أحداث الاشتراك.