# Stripe Billing フローの設定 Stripe Billing フロー拡張の設定方法 これらのフローは、プライマリーフローと複数のサブフローで構成され、これらは合成可能な方法で連携してサブスクリプション管理を自動化します。主に、Salesforce プロセスと Stripe Subscriptions を連携する営業支援ワークフローを構築する触媒として機能します。これは管理対象外のパッケージであるため、次のようになります。 - 自動化フローは、ビジネスプロセスに合わせて複製または拡張可能 - 個別サブフローは、カスタムレコードのトリガーまたは条件のプライマリフローとして再利用できます。 - デフォルトのオブジェクトとフィールドのマッピングは、特定の実装に合わせて変更できます - 既存の自動化フローを拡張または更新して、追加の料金体系モデルをサポートすることも可能 ## デフォルトのフロー設定 事前に構築されたフローは、次のようないくつかの主要な構成と設計の選択肢を実装します。 - **Primary Objects (プライマリーオブジェクト)**: Salesforce `Orders` オブジェクトおよび `Contract` オブジェクトをコアエンティティーとして機能 - **オブジェクトの関係**: 注文と契約は関連付けられ、サブスクリプションの詳細は作成後に両方のオブジェクトに同期される - **修正処理**: 同じ`Contract`内で新しい`Order`が作成されると、デフォルトのフローでは既存のサブスクリプションの **修正** として扱われます。 - **料金体系**: 定額継続料金体系モデル - **トリガーメカニズム**: Salesforce `Order` オブジェクトのアクティベーションによってトリガーされる自動処理 - **項目処理**: 注文項目は Stripe サブスクリプションスケジュールのフェーズに自動的にマッピングされます - **価格参照方法**: 正確なレポートを作成するために、`price_data` ではなく `price_id` の使用を強制します - **価格ソース**: Salesforce `Standard Price Book Entry` と同期された `price_id` がデフォルトです (カスタム価格設定の場合、price_id は注文商品または選択したオブジェクトから参照できます)。 - **メタデータ処理**: メタデータの受け渡しは Subscription Scheduler Manager クラスによって制御され、このクラスをリファクタリングするか、プライマリーフローでサブスクリプションの更新アクションを追加して、追加のメタデータを渡すことでカスタマイズできます。 - **タイムゾーン / 日付時刻に関する考慮事項**: すべての日付フィールドは、Stripe API リクエストの Unix タイムスタンプ (秒単位) としてフォーマットされます。日付フィールドは、基本的に UTC に基づく時間表示です。マッピングされたソースフィールドが Salesforce の日付 (時刻なし) の場合、システムはその日付の時刻をデフォルトで 00:00:00 UTC (UTC 深夜) に設定します。DateTime フィールドが使用される場合は、UTC に相当するものが使用されます。 ## コアフローの実装 ### Stripe アカウントの選択 すべてのフロー操作では、Stripe アカウントを選択する必要があります。`Create or Update Stripe Subscription Schedule when Order is Activated flow` (注文が有効になったときの Stripe サブスクリプションスケジュールの作成または更新) フローでは、クエリを使用してその `Name` で Stripe アカウントを検索するシンプルな方法がすぐに利用できます。 より堅牢で動的なアプローチでは、`Order` または `Contract` オブジェクトから `Stripe_Account__c` オブジェクトにカスタム検索フィールドを作成することをお勧めします。これにより、フロー内で特定のアカウントを直接参照できます。 いずれの方法であれ、Stripe_Account__c レコードの Salesforce レコード ID をSubscription Schedule Manager の Stripe アカウント入力に提供する必要があります。 ![](https://b.stripecdn.com/docs-statics-srv/assets/create_update_subs_add_stripeacct.372cd1bab362f6805751564f66398825.png) ## 割引の設定 フローでは、次の 2 つの簡易フィールドを使用して、サブスクリプションフェーズとサブスクリプションフェーズの項目レベルの両方で割引を適用できます。 - `Discount Amount Off` - `Discount Percent Off` これらのフィールドのいずれかにゼロ以外の値を指定すると、`Max Redemptions` 回数が 1 に設定された新しい Stripe クーポンが自動的に作成され、対応するフェーズまたは項目に適用されます。 ### 更新と修正に関する注意事項 `Update` または `Amend` 操作を実行すると、フローは指定された値に基づいて新しい Stripe クーポンを作成します。これは、Salesforce で既存の Stripe クーポン ID を追跡および管理する必要がなくなるため、シンプルさとべき等性を考慮して行われます。指定された割引値は常に、更新時にそのフェーズまたは項目の合計割引として扱われます。 ### サブスクリプションフェーズの統合 自動化の主な特徴は、複数の Salesforce の `OrderItems` を直線的な一連の [Stripe サブスクリプションフェーズ](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md#subscription-schedule-phases)に統合できることです。Stripe の API では、サブスクリプションフェーズは離散的で直線的であり、1 つのフェーズが次のフェーズの開始と同時に終了し、ギャップや重複が発生しないようにする必要があります。 Salesforce Orders にはこの制約はありません。たとえば、サービス日が重複する 2 つの `OrderItems` があるとします。 - **製品 A**: 2025 年 1 月 1 日~ 2026 年 1 月 1 日 - **製品 B**: 2025 年 6 月 1 日~ 2026 年 1 月 1 日 フローロジックは、これらを Stripe の 2 つの異なる直線的なフェーズに自動的に統合します。 - **フェーズ 1**: 2025 年 1 月 1 日~ 2025 年 6 月 1 日 (製品 A のみを含む) - **フェーズ 2**: 2025 年 6 月 1 日~ 2026 年 1 月 1 日 (商品 A + 商品 B を含む) > **フェーズ統合におけるギャップの注意点**: フェーズ間に ***ギャップ*** が検出された場合、ロジックはエラーを返します。 - **プロパティの不一致**: 2 つのフェーズが重複してプロパティが異なる場合 (たとえば、一方の collection_method が send_invoice に設定され、もう一方が charge_automatically に設定されている場合)、フローは競合を解決できず、エラーがスローされます。 - **数量の不一致**: 同じ商品の 2 つのフェーズが重複していて、数量が異なる場合、フローはエラーを返します。 ### サブスクリプションスケジュールの追加設定 フローアクションの Additional Subscription Schedule Settings セクションで、詳細設定が可能です。 - **Stripe Connected アカウント ID**: 連結アカウントの代理としてこのリクエストを実行する場合は、ここに Stripe ID (`acct_...` など) を指定します。 - **べき等キー**: べき等リクエストを確実にするために、固有のキーを指定できます。推奨されるアプローチは、フローインタビューの GUID `{!$Flow.InterviewGUID}` を使用することです。 - **請求同期イベント処理を無視する**: この処理によって生成されたイベントに対して Stripe Billing Data イベントインポートプロセスが実行されないようにするには、これを `true` に設定します。これは、Stripe Billing Data カスタムオブジェクトにトリガーがある場合に、再帰ループを防ぐのに役立ちます。 - **コール後に DML 保存を実行**: このフラグは、コールアウトの完了後にフローがデータベースの保存をコミットする (`Sync_Log__c` レコードの作成、Stripe Billing オブジェクトのアップサートなど) かどうかを制御します。 ![](https://b.stripecdn.com/docs-statics-srv/assets/addnl_subs_flow_settings.d85ef49063bc98d4887576156849e87b.png) ## フローの設定とアクティブ化 パッケージには、デフォルトで無効になっているサンプルフローテンプレートが含まれています。これらのフローは出発点として設計されており、すべてのビジネスニーズに適合することが保証されているわけではありません。フローを直接有効にすることも、複製してロジックをカスタマイズすることもできます。フローを有効にするには、**Setup** (設定) → **Flows** (フロー) に移動して、レコードトリガーフローを選択し、**Activate** (有効化) をクリックします。 ### レコードトリガーフロー これらのフローは、Salesforce のレコード変更に基づいて自動的にトリガーされます。 #### `Create or Update Stripe Subscription Schedule when Order is Activated` これは主要なフローです。`Order` レコードが有効化されると、新しい Stripe Subscription Schedule または既存のスケジュールが更新されます。 - **同期パス**: フローは、まず `Order` に関連付けられた `Contract` に Stripe Subscription Schedule ID がすでに設定されているかどうかを確認します。存在する場合は、その ID を `Order` レコードにコピーし、更新に備えます。 - **非同期パス:** フローは非同期で実行され (API コールアウトを実行するため)、`Order` にサブスクリプションスケジュール ID が設定されているかどうかを確認します。 - **はい** の場合、`Update Stripe Subscription Schedule from Change Order` が出されます (修正として扱われます)。 - **いいえ** の場合、`Create Stripe Subscription Schedule from Order` (注文から Stripe サブスクリプションスケジュールを作成する) サブフローが呼び出されます。 - **実装上の注意**: 有効化する前に、非同期パスで Get Stripe アカウントクエリエレメントを更新して、使用する Stripe アカウントを取得する必要があります。 #### `Update Stripe Subscription Schedule when OrderItem is Updated` (注文アイテムが更新されたら、Stripe サブスクリプションスケジュールを更新する) OrderItem レコードの Quantity、ServiceDate、または EndDate が変更されたときにトリガーされます。 - **非同期パス**: フローは、親注文に Stripe サブスクリプションスケジュールが関連付けられているかどうかを確認します。関連付けられている場合は、元の注文から Stripe サブスクリプションスケジュールを更新サブフローを呼び出して、変更を同期します。 #### `Sync Product2 when Stripe Product is Upserted` StripeGC__Product__c レコードが (Stripe のデータ同期を介して) Salesforce にアップサートされると、このフローは一致する Salesforce Product2 レコードをアップサートします。 - **同期パス**: Stripe Product から Get Product2 または Create Product2 サブフローを即時に呼び出します。 #### `Sync PricebookEntry when Stripe Price is Upserted` stripeGC__Price__c レコードがアップサートされると、このフローは一致する Salesforce PricebookEntry レコードをアップサートします。 - **同期パス**: Stripe Price サブフローから PricebookEntry を取得または作成します。 ### 自動起動フロー (サブフロー) これらのフローは、レコードトリガーフローで使用されるコアビルディングブロックです。デフォルトで有効になっていますが、複製や変更が可能です。カスタマイズする場合は、レコードトリガーフローを忘れずに更新して、複製された新しいバージョンを呼び出すようにしてください。 - **`Create Stripe Subscription Schedule from Order`**: 新しいサブスクリプションスケジュールを作成するためのロジックを処理します。関連アカウント (Stripe 顧客として使用する) と OrderItems (フェーズを構築する) を取得します。 - **`Update Stripe Subscription Schedule from Change Order` (注文の変更から Stripe サブスクリプションスケジュールまたはサブスクリプションのスケジュールを更新)**: サブスクリプションの修正を処理します。このフローでは、`Stripe Subscription Schedule Manager` のアクションで修正更新タイプが使用されます。 - \** `Update Stripe Subscription Schedule from Original Order` ** 。元の注文の更新を処理します (`OrderItem` が変更された場合など)。このフローでは、Replace 更新タイプを使用し、サブスクリプションの全体像を Stripe に再送信します。 - **`Cancel Stripe Subscription Schedule from Order`**: `Order`に関連付けられたサブスクリプションスケジュールをキャンセルします。 - **`Get or Create Stripe Customer from Account`**: Salesforce `Account` レコードに基づいて Stripe 顧客を検索または作成する再利用可能なユーティリティフロー。 - \** `Get or Create...` Product & Price Flows** 。商品と価格のデータの双方向同期を処理するユーティリティフロー (`Stripe Product from Product2、Stripe Price from PricebookEntry` など)。