Skip to main content
تفرض الفوترة القائمة على المقاعد رسومًا على العملاء بناءً على عدد المستخدمين في حساباتهم. يطبّق Dodo Payments ذلك باستخدام نظام الإضافات: منتج اشتراك أساسي بالإضافة إلى إضافة لكل مقعد، حيث تمثل الكمية عدد المقاعد.

Implementation Tutorial

دليل خطوة بخطوة مع أمثلة تعليمات برمجية.

Add-ons Documentation

تعرف على نظام الإضافات الذي يغذي الفوترة المعتمدة على المقاعد.

Subscription Management

إدارة الاشتراكات المعتمدة على المقاعد وتغييرات الخطة.

Webhooks

تتبع تغييرات المقاعد باستخدام ويب هوكس الاشتراك.

ما هي الفوترة المعتمدة على المقاعد؟

تفرض الفوترة بحسب المقاعد رسومًا على العملاء بناءً على عدد المستخدمين الذين يصلون إلى منتجك. وبدلًا من رسم ثابت، يتدرج السعر حسب حجم الفريق.

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

فوائد التسعير المعتمد على المقاعد

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

كيفية العمل

يطبّق Dodo Payments الفوترة القائمة على المقاعد باستخدام نظام الإضافات. يتكوّن الاشتراك القائم على المقاعد من جزأين: الإجمالي الشهري للعميل هو:
مثال: 8 مقاعد إضافية ضمن Team Plan

استراتيجيات التسعير

اختر استراتيجية التسعير المعتمدة على المقاعد التي تناسب عملك:

الاستراتيجية 1: خطة أساسية + إضافة لكل مقعد

قم بتضمين عدد محدد من المقاعد في الخطة الأساسية، وفرض رسوم على المقاعد الإضافية.
الأفضل لـ: المنتجات التي يمكن للفرق الصغيرة استخدامها بفعالية مع العرض الأساسي.

الاستراتيجية 2: تسعير خالص لكل مقعد

فرض سعر ثابت لكل مقعد دون رسوم أساسية.
التنفيذ: اضبط سعر الخطة الأساسية على $0 واستخدم إضافة المقاعد فقط. الأنسب لـ: تسعير بسيط وشفاف.

الاستراتيجية 3: التسعير المتدرج للمقاعد

خطط أساسية مختلفة مع أسعار مختلفة لكل مقعد.
التنفيذ: أنشئ منتجات منفصلة لكل مستوى مع أسعار إضافات مختلفة. الأفضل لـ: تشجيع الترقية إلى مستويات أعلى؛ ومبيعات المؤسسات.

الاستراتيجية 4: حزم المقاعد

بيع المقاعد في حزم بدلًا من بيعها بشكل فردي.
التنفيذ: أنشئ إضافات متعددة لأحجام الحزم المختلفة. الأفضل لـ: تبسيط قرارات الشراء؛ وتشجيع الالتزامات الأكبر.

إعداد الفوترة القائمة على المقاعد

الخطوة 1: خطّط لتسعيرك

قبل التنفيذ، حدّد بنية التسعير لديك:
1

Define Base Plan

حدّد ما يتضمنه الاشتراك الأساسي:
  • السعر الأساسي (يمكن أن يكون $0 في حالة التسعير الخالص بحسب المقعد)
  • عدد المقاعد المضمنة
  • الميزات المتاحة في هذه الفئة
2

Set Seat Pricing

حدّد تكلفة الإضافة لكل مقعد:
  • سعر كل مقعد إضافي
  • أي خصومات على الحجم (عبر إضافات متعددة)
  • الحد الأقصى المسموح به للمقاعد (إن وُجد)
3

Consider Billing Frequency

واءم تسعير المقاعد مع دورة الفوترة لديك:
  • الاشتراكات الشهرية → رسوم مقاعد شهرية
  • الاشتراكات السنوية → رسوم مقاعد سنوية (غالبًا مع خصم)

الخطوة 2: أنشئ إضافة المقعد

في لوحة معلومات Dodo Payments:
  1. انتقل إلى المنتجات → الإضافات
  2. انقر على إنشاء إضافة
  3. اضبط الإضافة:
استخدم أسماء وصفية للإضافات تكون مفهومة في الفواتير. فعبارة “Additional Team Seat” أوضح للعملاء الذين يراجعون فواتيرهم من عبارة “Seat Add-on”.

الخطوة 3: أنشئ الاشتراك الأساسي

أنشئ منتج الاشتراك لديك:
  1. انتقل إلى المنتجات → إنشاء منتج
  2. حدّد اشتراك
  3. اضبط التسعير والتفاصيل
  4. في قسم الإضافات، أرفق إضافة المقعد

الخطوة 4: أرفق الإضافة بالمنتج

اربط إضافة المقعد باشتراكك:
  1. عدّل منتج الاشتراك
  2. مرّر إلى قسم الإضافات
  3. انقر على إضافة إضافات
  4. حدّد إضافة المقعد
  5. احفظ التغييرات
يدعم منتج الاشتراك الآن التسعير القائم على المقاعد. ويمكن للعملاء شراء أي كمية من المقاعد الإضافية أثناء إتمام الدفع.

إدارة المقاعد

إضافة مقاعد إلى اشتراكات جديدة

عند إنشاء جلسة إتمام دفع، حدّد كمية المقاعد:

تغيير عدد المقاعد في الاشتراكات الحالية

استخدم Change Plan API لضبط المقاعد. تحدد مصفوفة addons الإجمالي الجديد لعدد المقاعد (وليس الفرق).

إزالة المقاعد

لتقليل عدد المقاعد، حدّد الكمية الأقل:

إزالة جميع المقاعد الإضافية

مرّر مصفوفة addons فارغة لإزالة جميع الإضافات:

التوزيع النسبي لتغييرات المقاعد

عند تطبيق تغيير في المقاعد في منتصف الدورة، يحسب Dodo Payments الرسوم الفورية عبر ثلاث خطوات:
يعتمد مبلغ الرصيد على وضع التوزيع النسبي الذي تختاره. وتكون الرسوم دائمًا عن دورة كاملة.
تكون الرسوم دائمًا لدورة كاملة. أما الرصيد الدائن وحده فيختلف حسب الوضع. ولهذا نادرًا ما يكون المبلغ المفروض هو “المقاعد الجديدة × السعر × الأيام المتبقية”.مع prorated_immediately، يتناقص الرصيد الدائن مع تقدم الدورة، ولذلك يكلف تغيير المقاعد نفسه مبلغًا أكبر كلما أُجري في وقت متأخر. أما مع difference_immediately وfull_immediately، فلا يعتمد الرصيد الدائن على التوقيت، ولذلك تكون التكلفة نفسها في أي يوم من أيام الدورة.

كيفية احتساب الرصيد في كل وضع

مع difference_immediately، يدفع العميل فقط الفرق بين سعر الخطة القديمة وسعر الخطة الجديدة. ومن هنا جاء الاسم، ولهذا يكون المبلغ نفسه بغض النظر عن وقت إجراء التغيير خلال الدورة. إذا كان الرصيد أكبر من رسوم الدورة الجديدة، يُحتفظ بالفرق كرصيد مرتبط بالاشتراك ويُطبّق تلقائيًا على عمليات التجديد المستقبلية.
تعمل prorated_immediately وdifference_immediately وfull_immediately جميعًا على إعادة ضبط دورة الفوترة إلى تاريخ التغيير. ويُعاد تثبيت موعد التجديد التالي على اليوم الذي يُطبَّق فيه تغيير المقاعد. وحده do_not_bill يحافظ على تاريخ التجديد الأصلي (تُفرض رسوم عدد المقاعد الجديد بالكامل عند التجديد التالي، من دون أي رسوم وقت التغيير).
يطبّق do_not_bill تغيير المقاعد فورًا، وليس عند التجديد. تسري كمية المقاعد الجديدة بمجرد نجاح الاستدعاء، لكن لا تُفرض أي رسوم حتى التجديد التالي.عند إضافة المقاعد، يحصل العميل عليها مجانًا حتى نهاية الدورة الحالية. فإذا أُضيفت 5 مقاعد بسعر $10 في اليوم الأول من دورة مدتها 30 يومًا، يحصل العميل على 5 مقاعد مجانية لمدة 29 يومًا، ويُفرض المبلغ الأعلى لأول مرة في تاريخ التجديد الأصلي.عند إزالة المقاعد، يحدث العكس: تُسحب المقاعد فورًا ولا يُمنح أي رصيد دائن عن الجزء من الدورة الذي دُفع ثمنه بالفعل.استخدم do_not_bill عندما يكون ذلك مقصودًا، مثل ترقية مجاملة أو تجربة للمقاعد الإضافية متفق عليها مع المبيعات.

مثال عملي: إضافة 5 مقاعد

سيناريو واحد مطبّق عبر الأوضاع الأربعة، بحيث تكون الأرقام قابلة للمقارنة مباشرة.
في جميع الأوضاع الفورية الثلاثة، يحصل العميل على شهر جديد كامل بسعر $130 مقابل ما يدفعه اليوم.

لماذا يهم التوقيت في prorated_immediately

تكلف التغييرات نفسها أكثر كلما أُجريت في وقت لاحق من الدورة، لأن الجزء المتبقي من الدورة الحالية والقابل لإضافته إلى الرصيد يكون أقل.
يحصل العميل على شهر جديد كامل في كل صف. ويتغير فقط التقسيم بين ما “دُفع مسبقًا” وما “يُدفع الآن”. لجعل تكلفة تغيير المقاعد متساوية بغض النظر عن وقت إجرائه، استخدم difference_immediately.

مثال عملي: “الرسوم المفاجئة”

هذه هي الحالة التي تفاجئ التجار غالبًا. فقد تؤدي إضافة صغيرة للمقاعد في وقت متأخر من الدورة إلى رسوم أكبر بكثير من سعر الإضافة.
تبلغ تكلفة إضافة مقعد بسعر $10/month $55.00 مع prorated_immediately. إذ يُفرض على العميل ثمن شهر جديد كامل بقيمة $60، ويُضاف إليه رصيد دائن بقيمة $5 المتبقية من الشهر القديم، كما يُعاد ضبط تاريخ التجديد. لجعل تكلفة الإضافات الصغيرة في منتصف الدورة مساوية لسعر المقعد فقط دون أي مبلغ إضافي، استخدم difference_immediately.

مثال عملي: إزالة المقاعد (الترقية إلى خطة أقل)

عندما تكون تكلفة الخطة الجديدة أقل من الرصيد، يُحتفظ بالفائض كـ رصيد اشتراك ويُطبّق تلقائيًا على عمليات التجديد المستقبلية لهذا الاشتراك. ولا يُضاف إلى محفظة العميل، كما أنه ليس استحقاقًا ائتمانيًا.
يغطي الرصيد الدائن الاشتراك بالكامل، بما في ذلك الخطة الأساسية وجميع الإضافات، وليس المقاعد المُزالة فقط.

قراءة استجابة المعاينة

يعرض previewChangePlan بنود الفاتورة الدقيقة التي ستُفرض رسومها. ويحتوي كل بند على proration_factor:
بمعنى ذلك: رصيد دائن بنسبة 50% للخطة الأساسية البالغة $50 ولـ 3 إضافات بسعر $10 لكل منها، مع فرض رسوم على الخطة الأساسية بالكامل بقيمة $50، وعلى 8 إضافات بسعر $10 لكل منها. الرصيد الدائن = $40، والرسوم = $130، والصافي = $90.
يُحسب التوزيع النسبي حتى الثانية وفقًا للوقت الدقيق للتغيير، وليس بالتقريب إلى أقرب يوم. وتستخدم الأمثلة العملية أعلاه أرقامًا مستديرة عند حدود الأيام للتوضيح.
اختيار وضع التوزيع النسبي لتغييرات المقاعد
  • difference_immediately — يدفع العميل فرق السعر، أيًا كان وقت إجراء التغيير. وهو الأكثر قابلية للتنبؤ للفرق التي تعدّل عدد المقاعد باستمرار، والأسهل شرحًا في واجهة المستخدم لديك.
  • prorated_immediately — يحصل العميل على رصيد دائن فقط مقابل الوقت المتبقي من الدورة الحالية. وتزداد التكلفة كلما أُجري التغيير في وقت متأخر من الدورة.
  • full_immediately — يدفع العميل مقابل دورة جديدة كاملة من دون رصيد دائن عن الوقت غير المستخدم.
  • do_not_bill — يسري تغيير المقاعد فورًا، ولكن لا تُفرض أي رسوم الآن. تكون المقاعد المضافة مجانية حتى التجديد التالي، بينما تُسحب المقاعد المُزالة من دون رصيد دائن. ويُحافظ على تاريخ التجديد، ويُفرض ثمن عدد المقاعد الجديد بالكامل بدءًا من ذلك التجديد. وهو الوضع الوحيد الذي لا يعيد ضبط دورة الفوترة.
لا يُضاف رصيد للمقاعد الممنوحة عبر do_not_bill عند تغيير الخطة لاحقًا، لأنها لم تُفوتر أصلًا. فإذا أضفت 5 مقاعد باستخدام do_not_bill ثم غيّرت العدد إلى 3 مقاعد، فستُفرض رسوم كاملة على العميل مقابل 3 مقاعد دون رصيد للمقاعد الخمسة التي كان يستخدمها.
استدعِ previewChangePlan دائمًا واعرض المبلغ المُعاد قبل التأكيد. راجع دليل التوزيع النسبي للاطلاع على مقارنات تفصيلية.

المعاينة قبل التغيير

عاين التوزيع النسبي دائمًا قبل إجراء التغييرات:

تتبّع المقاعد باستخدام Webhooks

راقب تغييرات المقاعد من خلال الاستماع إلى Webhooks الخاصة بالاشتراك:

الأحداث ذات الصلة

مثال على معالج Webhook

تحتوي مصفوفة addons في حمولة Webhook على كميات الإضافات الحالية. اجمعها للحصول على إجمالي عدد المقاعد. وإذا كانت خطتك الأساسية تتضمن مقاعد (مثلًا 5 مقاعد مضمّنة)، فأضفها إلى إجمالي الإضافات في منطق تطبيقك.

فرض حدود المقاعد

يجب أن يفرض تطبيقك حدود المقاعد. يتتبّع Dodo Payments الفوترة، لكنك تتحكم في الوصول.
امنع بصرامة إضافة مستخدمين يتجاوز عددهم عدد المقاعد.

الأنماط المتقدمة

أنواع المقاعد المختلفة

قدّم أنواعًا مختلفة من المقاعد بأسعار مختلفة:
التنفيذ: أنشئ إضافات منفصلة لكل نوع من المقاعد.

خصومات المقاعد السنوية

قدّم أسعارًا مخفضة للمقاعد السنوية:
التنفيذ: أنشئ منتجات منفصلة للخطط الشهرية والسنوية مع أسعار إضافات مختلفة.

الحد الأدنى المطلوب من المقاعد

اشترط حدًا أدنى لعدد المقاعد في خطط معينة:

أفضل الممارسات

أفضل ممارسات التسعير

  • التواصل الواضح: اعرض التسعير لكل مقعد بشكل بارز في صفحة التسعير لديك
  • المقاعد المضمّنة: فكّر في تضمين بضعة مقاعد في السعر الأساسي لتقليل العوائق
  • خصومات الحجم: قدّم أسعارًا أقل لكل مقعد للفرق الأكبر للفوز بصفقات المؤسسات
  • الحوافز السنوية: خفّض أسعار الخطط السنوية لتحسين التدفق النقدي والاحتفاظ بالعملاء

أفضل الممارسات التقنية

  • تخزين أعداد المقاعد مؤقتًا: خزّن أعداد مقاعد الاشتراكات مؤقتًا محليًا لتجنب استدعاءات API عند كل طلب
  • المزامنة المنتظمة: زامن عدد المقاعد المحلي دوريًا مع Dodo Payments عبر API
  • معالجة حالات الفشل: إذا فشل تغيير المقاعد، اعرض رسائل خطأ واضحة وخيارات لإعادة المحاولة
  • سجل التدقيق: سجّل جميع تغييرات المقاعد لنزاعات الفوترة والامتثال

أفضل ممارسات تجربة المستخدم

  • ملاحظات فورية: اعرض تأثير التكلفة فورًا عند تعديل المقاعد
  • خطوات التأكيد: اطلب التأكيد قبل إجراء تغييرات الفوترة
  • شفافية التقسيم النسبي: اشرح الرسوم المحسوبة نسبيًا بوضوح قبل تطبيقها
  • سهولة خفض المستوى: لا تجعل تقليل عدد المقاعد صعبًا (فهذا يبني الثقة)

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

العَرَض: يعرض تطبيقك عددًا مختلفًا من المقاعد عن عدد المقاعد في الاشتراك.الأسباب:
  • لم يتم استلام Webhook أو معالجته
  • حالة تسابق أثناء تغيير المقاعد
  • لم يتم تحديث البيانات المخزنة مؤقتًا
الحلول:
  1. نفّذ معالجات Webhook للحدث subscription.plan_changed
  2. أضف زرًا بعنوان “مزامنة مع الفوترة” يجلب الاشتراك الحالي
  3. اضبط مدة صلاحية التخزين المؤقت لضمان التحديث المنتظم
العَرَض: العميل مرتبك بسبب مبلغ الرسوم في منتصف الدورة.السبب: استخدام prorated_immediately في وقت متأخر من دورة الفوترة (راجع مثال الرسوم المفاجئة أعلاه).الحلول:
  1. استخدم دائمًا previewChangePlan قبل إجراء التغييرات
  2. اعرض تفصيلًا واضحًا: “ستكلف إضافة X من المقاعد $Y اليوم”
  3. انتقل إلى difference_immediately إذا كنت تريد أن تتطابق الرسوم دائمًا مع فرق السعر
العَرَض: إضافة المقعد غير متاحة أثناء إتمام الدفع.الأسباب:
  • الإضافة غير مرفقة بالمنتج
  • الإضافة مؤرشفة أو محذوفة
  • عدم تطابق العملة بين المنتج والإضافة
الحلول:
  1. تحقّق من إرفاق الإضافة في إعدادات المنتج
  2. تحقّق من حالة الإضافة في لوحة معلومات الإضافات
  3. تأكد من تطابق العملات تمامًا
العَرَض: يريد العميل تقليل عدد المقاعد، لكن توجد مستخدمون معيّنون إليها.الحلول:
  1. اعرض المستخدمين الذين يجب إزالتهم قبل تقليل المقاعد
  2. نفّذ سير عمل: إزالة المستخدمين → تقليل المقاعد
  3. فكّر في فترة سماح قبل فرض تقليل المقاعد

الوثائق ذات الصلة

Seat-Based Pricing Tutorial

دليل تنفيذ كامل مع التعليمات البرمجية.

Add-ons

تعرّف بعمق على نظام الإضافات.

Plan Changes & Proration

تعامل مع تعديلات الاشتراكات.

Subscription Webhooks

تتبّع أحداث الاشتراك.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦