シートベースの請求は、顧客が必要とするユーザー、チームメンバー、またはライセンスの数に基づいて料金を請求することを可能にします。これは、チームコラボレーションツール、エンタープライズソフトウェア、B2B SaaS製品の標準的な価格モデルです。
実装チュートリアル
コード例を含むステップバイステップガイド。
アドオンのドキュメント
シートベースの請求を支えるアドオンシステムについて学びます。
サブスクリプション管理
シートベースのサブスクリプションとプラン変更を管理します。
Webhook
サブスクリプションWebhookでシートの変更を追跡します。
シートベースの請求とは?
シートベースの請求(ユーザーごとまたはシートごとの価格設定とも呼ばれる)は、製品にアクセスするユーザーの数に基づいて顧客に料金を請求します。定額料金の代わりに、価格はチームのサイズに応じてスケールします。一般的な使用例
| 業界 | 例 | 価格モデル |
|---|---|---|
| チームコラボレーション | Slack, Notion, Asana | アクティブユーザー/月ごと |
| 開発者ツール | GitHub, GitLab, Jira | シート/月ごと |
| CRMソフトウェア | Salesforce, HubSpot | ユーザーライセンスごと |
| デザインツール | Figma, Canva | エディターシートごと |
| セキュリティソフトウェア | 1Password, Okta | ユーザー/月ごと |
| ビデオ会議 | Zoom, Teams | ホストライセンスごと |
シートベースの価格設定の利点
あなたのビジネスにとって:- 顧客が成長するにつれて収益が自然にスケール
- 顧客が予算を立てやすい予測可能な価格設定
- 個人からチーム、エンタープライズへの明確なアップグレードパス
- チームが拡大するにつれて高いライフタイムバリュー
- 使用した分だけ支払う
- コストを理解しやすく予測しやすい
- 必要に応じてユーザーを追加/削除する柔軟性
- チームのサイズに合った公正な価格設定
Dodo Paymentsにおけるシートベースの請求の仕組み
Dodo Paymentsは、アドオンシステムを使用してシートベースの請求を実装しています。以下がその仕組みです:アーキテクチャの概要
チームプロサブスクリプションは月額$99で、5シートが含まれています。5人以上のユーザーがいる場合、追加のシートごとに月額$15を支払います。 例えば、チームが15シートを必要とする場合:- 基本プラン: $99/月(5シート含む)
- アドオン: 10シート × $15/月 = $150/月
- 合計月額費用: $99 + $150 = $249(15シート分)
主要コンポーネント
| コンポーネント | 目的 | 例 |
|---|---|---|
| 基本製品 | 含まれるシートのコアサブスクリプション | ”チームプラン - 月額$99(5シート含む)“ |
| シートアドオン | 追加ユーザーのためのシートごとの料金 | ”追加シート - 各月額$15” |
| 数量 | 購入した追加シートの数 | 10シート |
価格設定戦略
ビジネスに合ったシートベースの価格設定戦略を選択してください:戦略1: 基本 + シートごとのアドオン
基本プランに設定された数のシートを含め、追加シートに対して料金を請求します。 例:戦略2: 純粋なシートごとの価格設定
基本料金なしでシートごとに定額料金を請求します。 例:戦略3: 階層型シート価格設定
異なる基本プランに異なるシートごとの料金。 例:戦略4: シートバンドル
シートを個別ではなくパックで販売します。 例:シートベースの請求の設定
ステップ1: 価格設定を計画する
実装前に、価格構造を定義します:1
基本プランを定義する
基本サブスクリプションに含まれるものを決定します:
- 基本価格(純粋なシートごとの場合は$0にすることができます)
- 含まれるシートの数
- この階層で利用可能な機能
2
シート価格を設定する
シートごとのアドオンコストを決定します:
- 追加シートごとの価格
- ボリュームディスカウント(複数のアドオンを通じて)
- 許可される最大シート数(該当する場合)
3
請求頻度を考慮する
シート価格を請求サイクルに合わせます:
- 月額サブスクリプション → 月額シート料金
- 年間サブスクリプション → 年間シート料金(通常は割引あり)
ステップ2: シートアドオンを作成する
Dodo Paymentsダッシュボードで:- 製品 → アドオンに移動します
- アドオンを作成をクリックします
- アドオンを設定します:
| フィールド | 値 | メモ |
|---|---|---|
| 名前 | ”追加シート”または”チームメンバー” | 明確でユーザーフレンドリーな名前 |
| 説明 | ”ワークスペースに別のチームメンバーを追加” | 顧客が得られるものを説明 |
| 価格 | あなたのシートごとの価格 | 例: $10.00 |
| 通貨 | 基本製品と一致させる | 同じ通貨でなければなりません |
| 税カテゴリ | 基本製品と同じ | 一貫した税処理を確保 |
ステップ3: 基本サブスクリプションを作成する
サブスクリプション製品を作成します:- 製品 → 製品を作成に移動します
- サブスクリプションを選択します
- 価格と詳細を設定します
- アドオンセクションで、シートアドオンを添付します
ステップ4: 製品にアドオンを添付する
シートアドオンをサブスクリプションにリンクします:- サブスクリプション製品を編集します
- アドオンセクションまでスクロールします
- アドオンを追加をクリックします
- シートアドオンを選択します
- 変更を保存します
あなたのサブスクリプション製品は現在、シートベースの価格設定をサポートしています。顧客はチェックアウト中に追加シートの任意の数量を購入できます。
シートの管理
新しいサブスクリプションへのシートの追加
チェックアウトセッションを作成する際に、シートの数量を指定します:既存のサブスクリプションのシート数の変更
シートを調整するためにChange Plan APIを使用します:シートの削除
シート数を減らすには、より少ない数量を指定します:すべての追加シートの削除
すべてのアドオンを削除するには、空のアドオン配列を渡します:シート変更の按分
顧客がシートを追加または削除する際、按分が請求方法を決定します。按分モード
| モード | シートの追加 | シートの削除 |
|---|---|---|
prorated_immediately | サイクル内の残りの日数に対して請求 | 未使用の日数に対してクレジット |
difference_immediately | シートの全額を請求 | 将来の更新に適用されるクレジット |
full_immediately | シートの全額を請求し、請求サイクルをリセット | クレジットなし |
按分の例
シナリオ: 残り15日の請求サイクルで、5シートを$10/シートで追加- 即時按分
- 即時差額
- 即時全額
変更前のプレビュー
変更を行う前に、常に按分をプレビューしてください:Webhookでのシートの追跡
サブスクリプションWebhookをリッスンしてシートの変更を監視します:関連イベント
| イベント | トリガーされるタイミング | 使用例 |
|---|---|---|
subscription.active | 新しいサブスクリプションがアクティブ化されたとき | 初期シートをプロビジョニング |
subscription.plan_changed | シートが追加/削除されたとき | アプリ内のシート数を更新 |
subscription.renewed | サブスクリプションが更新されたとき | シート数が変更されていないことを確認 |
subscription.cancelled | サブスクリプションがキャンセルされたとき | すべてのシートをプロビジョニング解除 |
Webhookハンドラーの例
シート制限の強制
アプリケーションはシート制限を強制する必要があります。Dodo Paymentsは請求を追跡しますが、アクセスはあなたが制御します。強制戦略
- ハードリミット
- 警告付きソフトリミット
- 自動アップグレード
シート数を超えてユーザーを追加することを厳格に防止します。
高度なパターン
異なるシートタイプ
異なる価格設定の異なるシートタイプを提供します:年間シート割引
割引された年間シート価格を提供します:最低シート要件
特定のプランに対して最低シート数を要求します:ベストプラクティス
価格設定のベストプラクティス
- 明確なコミュニケーション: 価格ページにシートごとの価格を目立たせて表示
- 含まれるシート: 摩擦を減らすために基本価格にいくつかのシートを含めることを検討
- ボリュームディスカウント: 大規模チームに対して低いシートごとの料金を提供し、エンタープライズ契約を獲得
- 年間インセンティブ: 年間プランを割引してキャッシュフローと保持率を改善
技術的ベストプラクティス
- シート数をキャッシュ: API呼び出しを避けるためにサブスクリプションのシート数をローカルにキャッシュ
- 定期的に同期: 定期的にDodo Paymentsとローカルのシート数をAPI経由で同期
- 失敗を処理: シート変更が失敗した場合、明確なエラーメッセージと再試行オプションを表示
- 監査トレイル: 請求の争いとコンプライアンスのためにすべてのシート変更をログに記録
ユーザーエクスペリエンスのベストプラクティス
- リアルタイムフィードバック: シートを調整した際のコストへの即時影響を表示
- 確認ステップ: 請求変更の前に確認を要求
- 按分の透明性: 適用前に按分料金を明確に説明
- 簡単なダウングレード: シートを減らすのを難しくしない(信頼を築く)
トラブルシューティング
アプリと請求の間でシート数が不一致
アプリと請求の間でシート数が不一致
症状: アプリがサブスクリプションと異なるシート数を表示しています。原因:
- Webhookが受信または処理されていない
- シート変更中のレースコンディション
- キャッシュデータが更新されていない
subscription.plan_changedのためのWebhookハンドラーを実装します- 現在のサブスクリプションを取得する”請求と同期”ボタンを追加します
- 定期的な更新を確保するためにキャッシュTTLを設定します
按分料金が予期しない
按分料金が予期しない
症状: 顧客がサイクル中の請求額に混乱しています。原因:
- 按分モードが明確に伝えられていない
- 顧客が確認前にプレビューを見ていない
- 変更を行う前に常に
previewChangePlanを使用します - 明確な内訳を表示: “Xシートの追加 = 今日の$Y(Z日分の按分)”
- ヘルプセンターに按分ポリシーを文書化します
チェックアウトにアドオンが表示されない
チェックアウトにアドオンが表示されない
症状: チェックアウト中にシートアドオンが利用できません。原因:
- アドオンが製品に添付されていない
- アドオンがアーカイブまたは削除されている
- 製品とアドオンの間で通貨が不一致
- 製品設定でアドオンが添付されていることを確認します
- アドオンダッシュボードでアドオンのステータスを確認します
- 通貨が正確に一致していることを確認します
現在の使用量を下回るシートを減らせない
現在の使用量を下回るシートを減らせない
症状: 顧客がシートを減らしたいが、ユーザーが割り当てられています。解決策:
- シートを減らす前に削除する必要があるユーザーを表示します
- ワークフローを実装します: ユーザーを削除 → シートを減らす
- シート削減を強制する前に猶予期間を考慮します