Chuyển đến nội dung chính
Thanh toán theo số ghế cho phép bạn tính phí khách hàng dựa trên số lượng người dùng, thành viên nhóm hoặc giấy phép mà họ cần. Đây là mô hình định giá tiêu chuẩn cho các công cụ hợp tác nhóm, phần mềm doanh nghiệp và sản phẩm B2B SaaS.

Thanh Toán Theo Số Ghế Là Gì?

Thanh toán theo số ghế (còn gọi là định giá theo người dùng hoặc theo ghế) tính phí khách hàng dựa trên số lượng người dùng truy cập sản phẩm của bạn. Thay vì một khoản phí cố định, giá sẽ thay đổi theo kích thước nhóm.

Các Trường Hợp Sử Dụng Thông Dụng

NgànhVí dụMô Hình Định Giá
Hợp Tác NhómSlack, Notion, AsanaTheo người dùng hoạt động/tháng
Công Cụ Phát TriểnGitHub, GitLab, JiraTheo ghế/tháng
Phần Mềm CRMSalesforce, HubSpotTheo giấy phép người dùng
Công Cụ Thiết KếFigma, CanvaTheo ghế biên tập viên
Phần Mềm Bảo Mật1Password, OktaTheo người dùng/tháng
Hội Nghị Trực TuyếnZoom, TeamsTheo giấy phép chủ trì

Lợi Ích Của Định Giá Theo Số Ghế

Đối Với Doanh Nghiệp Của Bạn:
  • Doanh thu tự nhiên tăng khi khách hàng phát triển
  • Định giá có thể dự đoán mà khách hàng có thể lập ngân sách
  • Lộ trình nâng cấp rõ ràng từ cá nhân đến nhóm đến doanh nghiệp
  • Giá trị trọn đời cao hơn khi các nhóm mở rộng
Đối Với Khách Hàng Của Bạn:
  • Chỉ trả tiền cho những gì họ sử dụng
  • Dễ hiểu và dự đoán chi phí
  • Linh hoạt thêm/bớt người dùng khi cần
  • Định giá công bằng phù hợp với kích thước nhóm

Cách Thanh Toán Theo Số Ghế Hoạt Động Trong Dodo Payments

Dodo Payments triển khai thanh toán theo số ghế bằng cách sử dụng hệ thống Tiện Ích. Đây là cách hoạt động:

Tổng Quan Kiến Trúc

Một đăng ký Team Pro có giá $99/tháng và bao gồm 5 ghế. Nếu bạn có hơn 5 người dùng, bạn sẽ phải trả thêm $15/tháng cho mỗi ghế bổ sung. Ví dụ, nếu nhóm của bạn cần 15 ghế:
  • Kế Hoạch Cơ Bản: $99/tháng (bao gồm 5 ghế)
  • Tiện Ích: 10 ghế bổ sung × $15/tháng = $150/tháng
  • Tổng chi phí hàng tháng: $99 + $150 = $249 cho 15 ghế

Các Thành Phần Chính

Thành PhầnMục ĐíchVí Dụ
Sản Phẩm Cơ BảnĐăng ký cốt lõi với các ghế đã bao gồm”Kế Hoạch Nhóm - $99/tháng (bao gồm 5 ghế)“
Tiện Ích GhếPhí theo ghế cho người dùng bổ sung”Ghế Bổ Sung - $15/tháng mỗi ghế”
Số LượngSố ghế bổ sung đã mua10 ghế bổ sung

Chiến Lược Định Giá

Chọn chiến lược định giá theo số ghế phù hợp với doanh nghiệp của bạn:

Chiến Lược 1: Cơ Bản + Tiện Ích Theo Ghế

Bao gồm một số ghế nhất định trong kế hoạch cơ bản, tính phí cho các ghế bổ sung. Ví Dụ:
Starter Plan: $49/month
├── Includes: 3 seats
├── Extra seats: $10/month each
└── 8 total seats = $49 + (5 × $10) = $99/month
Tốt nhất cho: Các sản phẩm mà các nhóm nhỏ có thể hoạt động với đề nghị cơ bản.

Chiến Lược 2: Định Giá Hoàn Toàn Theo Ghế

Tính phí một mức cố định cho mỗi ghế mà không có phí cơ bản. Ví Dụ:
Per User: $12/month
├── 5 users = $60/month
├── 20 users = $240/month
└── 100 users = $1,200/month
Triển Khai: Đặt giá kế hoạch cơ bản là $0, chỉ sử dụng tiện ích ghế. Tốt nhất cho: Định giá đơn giản, minh bạch; mô hình dựa trên mức sử dụng.

Chiến Lược 3: Định Giá Ghế Theo Bậc

Các kế hoạch cơ bản khác nhau với các mức giá theo ghế khác nhau. Ví Dụ:
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
Triển Khai: Tạo các sản phẩm riêng biệt cho mỗi bậc với các mức giá tiện ích khác nhau. Tốt nhất cho: Khuyến khích nâng cấp lên các bậc cao hơn; bán hàng doanh nghiệp.

Chiến Lược 4: Gói Ghế

Bán ghế theo gói thay vì từng cái một. Ví Dụ:
5-Seat Pack: $50/month ($10/seat)
10-Seat Pack: $80/month ($8/seat)
25-Seat Pack: $175/month ($7/seat)
Triển Khai: Tạo nhiều tiện ích cho các kích thước gói khác nhau. Tốt nhất cho: Đơn giản hóa quyết định mua hàng; khuyến khích cam kết lớn hơn.

Thiết Lập Thanh Toán Theo Số Ghế

Bước 1: Lập Kế Hoạch Định Giá Của Bạn

Trước khi triển khai, xác định cấu trúc định giá của bạn:
1

Xác Định Kế Hoạch Cơ Bản

Quyết định những gì được bao gồm trong đăng ký cơ bản:
  • Giá cơ bản (có thể là $0 cho định giá hoàn toàn theo ghế)
  • Số ghế đã bao gồm
  • Các tính năng có sẵn ở cấp độ này
2

Đặt Giá Ghế

Xác định chi phí tiện ích theo ghế:
  • Giá cho mỗi ghế bổ sung
  • Bất kỳ giảm giá theo khối lượng nào (thông qua nhiều tiện ích)
  • Số ghế tối đa cho phép (nếu có)
3

Xem Xét Tần Suất Thanh Toán

Căn chỉnh giá ghế với chu kỳ thanh toán của bạn:
  • Đăng ký hàng tháng → phí ghế hàng tháng
  • Đăng ký hàng năm → phí ghế hàng năm (thường được giảm giá)

Bước 2: Tạo Tiện Ích Ghế

Trong bảng điều khiển Dodo Payments của bạn:
  1. Điều hướng đến Sản PhẩmTiện Ích
  2. Nhấp vào Tạo Tiện Ích
  3. Cấu hình tiện ích:
TrườngGiá TrịGhi Chú
Tên”Ghế Bổ Sung” hoặc “Thành Viên Nhóm”Tên rõ ràng, thân thiện với người dùng
Mô Tả”Thêm một thành viên nhóm khác vào không gian làm việc của bạn”Giải thích những gì khách hàng nhận được
GiáGiá theo ghế của bạnví dụ: $10.00
Tiền TệPhù hợp với sản phẩm cơ bản của bạnPhải là cùng một loại tiền tệ
Danh Mục ThuếGiống như sản phẩm cơ bảnĐảm bảo xử lý thuế nhất quán
Tạo tên tiện ích mô tả mà có ý nghĩa trên hóa đơn. “Ghế Nhóm Bổ Sung” rõ ràng hơn “Tiện Ích Ghế” cho khách hàng xem xét hóa đơn của họ.

Bước 3: Tạo Sản Phẩm Đăng Ký Cơ Bản

Tạo sản phẩm đăng ký của bạn:
  1. Điều hướng đến Sản PhẩmTạo Sản Phẩm
  2. Chọn Đăng Ký
  3. Cấu hình giá và chi tiết
  4. Trong phần Tiện Ích, đính kèm tiện ích ghế của bạn

Bước 4: Đính Kèm Tiện Ích Vào Sản Phẩm

Liên kết tiện ích ghế với đăng ký của bạn:
  1. Chỉnh sửa sản phẩm đăng ký của bạn
  2. Cuộn xuống phần Tiện Ích
  3. Nhấp vào Thêm Tiện Ích
  4. Chọn tiện ích ghế của bạn
  5. Lưu thay đổi
Sản phẩm đăng ký của bạn hiện hỗ trợ định giá theo số ghế. Khách hàng có thể mua bất kỳ số lượng ghế bổ sung nào trong quá trình thanh toán.

Quản Lý Ghế

Thêm Ghế Vào Các Đăng Ký Mới

Khi tạo một phiên thanh toán, xác định số lượng ghế:
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'
});

Thay Đổi Số Ghế Trong Các Đăng Ký Hiện Tại

Sử dụng API Thay Đổi Kế Hoạch để điều chỉnh số ghế:
// 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
  }]
});

Gỡ Bỏ Ghế

Để giảm số ghế, xác định số lượng thấp hơn:
// 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
  }]
});

Gỡ Bỏ Tất Cả Ghế Bổ Sung

Truyền một mảng tiện ích rỗng để gỡ bỏ tất cả tiện ích:
// 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
});

Tính Toán Tỷ Lệ Cho Các Thay Đổi Ghế

Khi khách hàng thêm hoặc gỡ bỏ ghế giữa chu kỳ, tính toán tỷ lệ xác định cách họ được tính phí.

Các Chế Độ Tính Toán Tỷ Lệ

Chế ĐộThêm GhếGỡ Bỏ Ghế
prorated_immediatelyTính phí cho những ngày còn lại trong chu kỳTín dụng cho những ngày không sử dụng
difference_immediatelyTính phí giá ghế đầy đủTín dụng áp dụng cho các lần gia hạn trong tương lai
full_immediatelyTính phí giá ghế đầy đủ, đặt lại chu kỳ thanh toánKhông có tín dụng

Ví Dụ Tính Toán Tỷ Lệ

Kịch Bản: Còn 15 ngày trong chu kỳ thanh toán, thêm 5 ghế với giá $10/ghế
Prorated charge = ($10 × 5 seats) × (15 days / 30 days)
                = $50 × 0.5
                = $25 immediate charge
Khách hàng trả $25 ngay bây giờ, sau đó $50/tháng khi gia hạn.

Xem Trước Trước Khi Thay Đổi

Luôn xem trước tính toán tỷ lệ trước khi thực hiện thay đổi:
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"

Theo Dõi Ghế Với Webhooks

Theo dõi các thay đổi ghế bằng cách lắng nghe các webhook đăng ký:

Các Sự Kiện Liên Quan

Sự KiệnKhi Kích HoạtTrường Hợp Sử Dụng
subscription.activeĐăng ký mới được kích hoạtCung cấp ghế ban đầu
subscription.plan_changedGhế được thêm/gỡ bỏCập nhật số ghế trong ứng dụng của bạn
subscription.renewedĐăng ký được gia hạnXác nhận số ghế không thay đổi
subscription.cancelledĐăng ký bị hủyGỡ bỏ tất cả ghế

Ví Dụ Xử Lý Webhook

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;
}

Thực Thi Giới Hạn Ghế

Ứng dụng của bạn phải thực thi giới hạn ghế. Dodo Payments theo dõi thanh toán, nhưng bạn kiểm soát quyền truy cập.

Chiến Lược Thực Thi

Ngăn chặn nghiêm ngặt việc thêm người dùng vượt quá số ghế.
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);
}

Các Mô Hình Nâng Cao

Các Loại Ghế Khác Nhau

Cung cấp các loại ghế khác nhau với mức giá khác nhau:
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
Triển Khai: Tạo các tiện ích riêng biệt cho mỗi loại ghế.
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 }
    ]
  }]
});

Giảm Giá Ghế Hàng Năm

Cung cấp mức giá ghế hàng năm giảm giá:
Monthly: $15/seat/month
Annual: $12/seat/month (20% savings)
Triển Khai: Tạo các sản phẩm riêng biệt cho các kế hoạch hàng tháng và hàng năm với các mức giá tiện ích khác nhau.

Yêu Cầu Số Ghế Tối Thiểu

Yêu cầu số ghế tối thiểu cho một số kế hoạch nhất định:
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`);
  }
}

Các Thực Hành Tốt Nhất

Các Thực Hành Tốt Nhất Về Định Giá

  • Giao Tiếp Rõ Ràng: Hiển thị định giá theo ghế một cách nổi bật trên trang định giá của bạn
  • Ghế Đã Bao Gồm: Cân nhắc bao gồm một vài ghế trong giá cơ bản để giảm ma sát
  • Giảm Giá Theo Khối Lượng: Cung cấp mức giá theo ghế thấp hơn cho các nhóm lớn để giành được các giao dịch doanh nghiệp
  • Khuyến Khích Hàng Năm: Giảm giá cho các kế hoạch hàng năm để cải thiện dòng tiền và giữ chân khách hàng

Các Thực Hành Tốt Nhất Về Kỹ Thuật

  • Lưu Trữ Số Ghế: Lưu trữ số ghế đăng ký cục bộ để tránh gọi API trên mỗi yêu cầu
  • Đồng Bộ Thường Xuyên: Định kỳ đồng bộ số ghế cục bộ của bạn với Dodo Payments qua API
  • Xử Lý Lỗi: Nếu một thay đổi ghế không thành công, hiển thị thông báo lỗi rõ ràng và tùy chọn thử lại
  • Dấu Vết Kiểm Toán: Ghi lại tất cả các thay đổi ghế cho các tranh chấp thanh toán và tuân thủ

Các Thực Hành Tốt Nhất Về Trải Nghiệm Người Dùng

  • Phản Hồi Thời Gian Thực: Hiển thị tác động chi phí ngay lập tức khi điều chỉnh ghế
  • Bước Xác Nhận: Yêu cầu xác nhận trước khi thay đổi thanh toán
  • Minh Bạch Tính Toán Tỷ Lệ: Giải thích rõ ràng các khoản phí tính toán tỷ lệ trước khi áp dụng
  • Giảm Giá Dễ Dàng: Đừng làm khó khăn để giảm số ghế (điều này xây dựng lòng tin)

Khắc Phục Sự Cố

Triệu Chứng: Ứng dụng của bạn hiển thị số ghế khác với đăng ký.Nguyên Nhân:
  • Webhook không được nhận hoặc xử lý
  • Điều kiện đua trong quá trình thay đổi ghế
  • Dữ liệu lưu trữ không được cập nhật
Giải Pháp:
  1. Triển khai các trình xử lý webhook cho subscription.plan_changed
  2. Thêm nút “Đồng Bộ với thanh toán” để lấy đăng ký hiện tại
  3. Đặt TTL của bộ nhớ đệm để đảm bảo làm mới thường xuyên
Triệu Chứng: Khách hàng bối rối bởi số tiền phí giữa chu kỳ.Nguyên Nhân:
  • Chế độ tính toán tỷ lệ không được truyền đạt rõ ràng
  • Khách hàng không thấy xem trước trước khi xác nhận
Giải Pháp:
  1. Luôn sử dụng previewChangePlan trước khi thực hiện thay đổi
  2. Hiển thị phân tích rõ ràng: “Thêm X ghế = $Y hôm nay (tính toán tỷ lệ cho Z ngày)”
  3. Tài liệu chính sách tính toán tỷ lệ của bạn trong trung tâm trợ giúp
Triệu Chứng: Tiện ích ghế không có sẵn trong quá trình thanh toán.Nguyên Nhân:
  • Tiện ích không được đính kèm vào sản phẩm
  • Tiện ích đã được lưu trữ hoặc xóa
  • Sự không khớp tiền tệ giữa sản phẩm và tiện ích
Giải Pháp:
  1. Xác minh tiện ích đã được đính kèm trong cài đặt sản phẩm
  2. Kiểm tra trạng thái tiện ích trong bảng điều khiển Tiện Ích
  3. Đảm bảo các loại tiền tệ khớp chính xác
Triệu Chứng: Khách hàng muốn giảm số ghế nhưng đã có người dùng được chỉ định.Giải Pháp:
  1. Hiển thị những người dùng nào phải được gỡ bỏ trước khi giảm số ghế
  2. Triển khai một quy trình làm việc: Gỡ bỏ người dùng → Giảm số ghế
  3. Cân nhắc thời gian ân hạn trước khi thực thi việc giảm ghế

Tài Liệu Liên Quan