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

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

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

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

الصناعةالمثالنموذج التسعير
تعاون الفرقSlack، Notion، Asanaلكل مستخدم نشط/شهر
أدوات المطورينGitHub، GitLab، Jiraلكل مقعد/شهر
برامج إدارة علاقات العملاءSalesforce، HubSpotلكل ترخيص مستخدم
أدوات التصميمFigma، Canvaلكل مقعد محرر
برامج الأمان1Password، Oktaلكل مستخدم/شهر
مؤتمرات الفيديوZoom، Teamsلكل ترخيص مضيف

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

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

كيف تعمل الفوترة المعتمدة على المقاعد في Dodo Payments

تقوم Dodo Payments بتنفيذ الفوترة المعتمدة على المقاعد باستخدام نظام الإضافات. إليك كيف يعمل:

نظرة عامة على الهيكلية

تكلفة اشتراك Team Pro هي 99 دولارًا شهريًا وتشمل 5 مقاعد. إذا كان لديك أكثر من 5 مستخدمين، ستدفع 15 دولارًا إضافيًا شهريًا عن كل مقعد إضافي. على سبيل المثال، إذا كانت فريقك يحتاج إلى 15 مقعدًا:
  • الخطة الأساسية: 99 دولارًا شهريًا (تشمل 5 مقاعد)
  • الإضافات: 10 مقاعد إضافية × 15 دولارًا/شهر = 150 دولارًا/شهر
  • إجمالي التكلفة الشهرية: 99 + 150 = 249 دولارًا لـ 15 مقعدًا

المكونات الرئيسية

المكونالغرضالمثال
المنتج الأساسيالاشتراك الأساسي مع المقاعد المضمنة”خطة الفريق - 99 دولارًا/شهر (5 مقاعد مضمنة)“
إضافة المقعدرسوم لكل مقعد لمستخدمين إضافيين”مقعد إضافي - 15 دولارًا/شهر لكل”
الكميةعدد المقاعد الإضافية المشتراة10 مقاعد إضافية

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

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

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

قم بتضمين عدد محدد من المقاعد في الخطة الأساسية، وفرض رسوم على المقاعد الإضافية. مثال:
Starter Plan: $49/month
├── Includes: 3 seats
├── Extra seats: $10/month each
└── 8 total seats = $49 + (5 × $10) = $99/month
الأفضل لـ: المنتجات التي يمكن أن تعمل فيها الفرق الصغيرة مع العرض الأساسي.

الاستراتيجية 2: تسعير لكل مقعد فقط

فرض رسوم ثابتة لكل مقعد دون رسوم أساسية. مثال:
Per User: $12/month
├── 5 users = $60/month
├── 20 users = $240/month
└── 100 users = $1,200/month
التنفيذ: تعيين سعر الخطة الأساسية إلى 0 دولار، واستخدام إضافة المقعد فقط. الأفضل لـ: تسعير بسيط وشفاف؛ نماذج قائمة على الاستخدام.

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

خطط أساسية مختلفة مع معدلات مختلفة لكل مقعد. مثال:
Starter: $0/month base + $15/seat
├── Lower features, higher per-seat cost

Professional: $99/month base + $10/seat
├── More features, lower per-seat cost

Enterprise: $499/month base + $7/seat
└── All features, volume discount on seats
التنفيذ: إنشاء منتجات منفصلة لكل مستوى مع أسعار إضافات مختلفة. الأفضل لـ: تشجيع الترقيات إلى مستويات أعلى؛ مبيعات المؤسسات.

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

بيع المقاعد في حزم بدلاً من فردية. مثال:
5-Seat Pack: $50/month ($10/seat)
10-Seat Pack: $80/month ($8/seat)
25-Seat Pack: $175/month ($7/seat)
التنفيذ: إنشاء إضافات متعددة لأحجام الحزم المختلفة. الأفضل لـ: تبسيط قرارات الشراء؛ تشجيع الالتزامات الأكبر.

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

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

قبل التنفيذ، حدد هيكل التسعير الخاص بك:
1

حدد الخطة الأساسية

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

حدد تسعير المقاعد

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

اعتبر تكرار الفوترة

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

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

في لوحة معلومات Dodo Payments الخاصة بك:
  1. انتقل إلى المنتجاتالإضافات
  2. انقر على إنشاء إضافة
  3. قم بتكوين الإضافة:
الحقلالقيمةالملاحظات
الاسم”مقعد إضافي” أو “عضو فريق”اسم واضح وسهل الاستخدام
الوصف”أضف عضو فريق آخر إلى مساحة العمل الخاصة بك”اشرح ما يحصل عليه العملاء
السعرسعر المقعد الخاص بكعلى سبيل المثال، 10.00 دولار
العملةتطابق منتجك الأساسييجب أن تكون نفس العملة
فئة الضريبةنفس المنتج الأساسييضمن معالجة ضريبية متسقة
قم بإنشاء أسماء إضافات وصفية تتناسب مع الفواتير. “مقعد فريق إضافي” أوضح من “إضافة مقعد” للعملاء الذين يراجعون فواتيرهم.

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

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

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

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

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

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

عند إنشاء جلسة الخروج، حدد كمية المقاعد:
const session = await client.checkoutSessions.create({
  product_cart: [{
    product_id: 'prod_team_plan',
    quantity: 1,
    addons: [{
      addon_id: 'addon_seat',
      quantity: 10  // 10 additional seats
    }]
  }],
  customer: { email: '[email protected]' },
  return_url: 'https://yourapp.com/success'
});

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

استخدم واجهة برمجة التطبيقات لتغيير الخطة لضبط المقاعد:
// Add 5 more seats to existing subscription
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_team_plan',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  addons: [{
    addon_id: 'addon_seat',
    quantity: 15  // New total: 15 additional seats
  }]
});

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

لتقليل عدد المقاعد، حدد الكمية الأقل:
// Reduce from 15 to 8 additional seats
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_team_plan',
  quantity: 1,
  proration_billing_mode: 'difference_immediately',
  addons: [{
    addon_id: 'addon_seat',
    quantity: 8  // Reduced to 8 additional seats
  }]
});

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

مرر مصفوفة إضافات فارغة لإزالة جميع الإضافات:
// Remove all additional seats, keep only base plan seats
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_team_plan',
  quantity: 1,
  proration_billing_mode: 'difference_immediately',
  addons: []  // Removes all add-ons
});

التقسيم لتغييرات المقاعد

عندما يضيف العملاء أو يزيلون المقاعد في منتصف الدورة، يحدد التقسيم كيفية فرض الرسوم عليهم.

أوضاع التقسيم

الوضعإضافة المقاعدإزالة المقاعد
prorated_immediatelyفرض رسوم على الأيام المتبقية في الدورةائتمان للأيام غير المستخدمة
difference_immediatelyفرض سعر المقعد الكاملائتمان يُطبق على التجديدات المستقبلية
full_immediatelyفرض سعر المقعد الكامل، إعادة تعيين دورة الفوترةلا ائتمان

أمثلة التقسيم

السيناريو: 15 يومًا متبقية في دورة الفوترة، إضافة 5 مقاعد بسعر 10 دولارات/مقعد
Prorated charge = ($10 × 5 seats) × (15 days / 30 days)
                = $50 × 0.5
                = $25 immediate charge
يدفع العميل 25 دولارًا الآن، ثم 50 دولارًا/شهر عند التجديد.

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

دائمًا قم بمعاينة التقسيم قبل إجراء التغييرات:
const preview = await client.subscriptions.previewChangePlan('sub_123', {
  product_id: 'prod_team_plan',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  addons: [{ addon_id: 'addon_seat', quantity: 20 }]
});

console.log('Immediate charge:', preview.immediate_charge.summary);
// Show customer: "Adding 5 seats will cost $25 today"

تتبع المقاعد باستخدام الويب هوكس

راقب تغييرات المقاعد من خلال الاستماع إلى الويب هوكس للاشتراكات:

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

الحدثمتى يتم تفعيلهحالة الاستخدام
subscription.activeتم تفعيل اشتراك جديدتوفير المقاعد الأولية
subscription.plan_changedتمت إضافة/إزالة المقاعدتحديث عدد المقاعد في تطبيقك
subscription.renewedتم تجديد الاشتراكتأكيد عدم تغيير عدد المقاعد
subscription.cancelledتم إلغاء الاشتراكإزالة جميع المقاعد

مثال على معالج الويب هوك

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'subscription.active':
      // New subscription - provision seats
      const seats = calculateTotalSeats(event.data);
      await provisionSeats(event.data.customer_id, seats);
      break;

    case 'subscription.plan_changed':
      // Seats changed - update access
      const newSeats = calculateTotalSeats(event.data);
      await updateSeatCount(event.data.subscription_id, newSeats);
      break;

    case 'subscription.cancelled':
      // Subscription cancelled - deprovision
      await deprovisionAllSeats(event.data.subscription_id);
      break;
  }

  res.json({ received: true });
});

function calculateTotalSeats(subscriptionData) {
  const baseSeats = 5;  // Included in plan
  const addonSeats = subscriptionData.addons?.reduce(
    (total, addon) => total + addon.quantity, 0
  ) || 0;
  return baseSeats + addonSeats;
}

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

يجب على تطبيقك فرض حدود المقاعد. تتبع Dodo Payments الفوترة، لكنك تتحكم في الوصول.

استراتيجيات التنفيذ

منع بشكل صارم إضافة المستخدمين بما يتجاوز عدد المقاعد.
async function inviteUser(teamId: string, email: string) {
  const team = await getTeam(teamId);
  const subscription = await getSubscription(team.subscriptionId);
  const totalSeats = calculateTotalSeats(subscription);
  const usedSeats = await countTeamMembers(teamId);

  if (usedSeats >= totalSeats) {
    throw new Error('No seats available. Please upgrade your plan.');
  }

  await sendInvitation(teamId, email);
}

أنماط متقدمة

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

عرض أنواع مقاعد مختلفة مع تسعير مختلف:
Full Seats: $20/month - Full access to all features
View-Only Seats: $5/month - Read-only access
Guest Seats: $0/month - Limited external collaborator access
التنفيذ: إنشاء إضافات منفصلة لكل نوع مقعد.
const session = await client.checkoutSessions.create({
  product_cart: [{
    product_id: 'prod_team_plan',
    quantity: 1,
    addons: [
      { addon_id: 'addon_full_seat', quantity: 10 },
      { addon_id: 'addon_viewer_seat', quantity: 25 },
      { addon_id: 'addon_guest_seat', quantity: 50 }
    ]
  }]
});

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

عرض تسعير مقاعد سنوية مخفضة:
Monthly: $15/seat/month
Annual: $12/seat/month (20% savings)
التنفيذ: إنشاء منتجات منفصلة للخطط الشهرية والسنوية بأسعار إضافات مختلفة.

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

يتطلب عددًا أدنى من المقاعد لبعض الخطط:
async function validateSeatCount(planId: string, seatCount: number) {
  const minimums = {
    'prod_starter': 1,
    'prod_team': 5,
    'prod_enterprise': 25
  };

  if (seatCount < minimums[planId]) {
    throw new Error(`${planId} requires at least ${minimums[planId]} seats`);
  }
}

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

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

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

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

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

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

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

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

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

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