Billing 自動回収のカスタマイズ

こんにちは。私は Stripe Integration Engineer の齊藤と申します。

今日は、Stripe Billing の回収機能のカスタマイズができるベータ機能についてご紹介致します。

Stripe には、サブスクリプションや、ワンタイムの請求書を管理するための Billing というプロダクトがあります。トライアル期間の設定や、プラン変更時の柔軟な請求シナリオの作成など、非常にパワフルなプロダクトということは皆さん既によくご存知だと思います。その機能の一つとして、決済失敗時のリトライや、サブスクリプションやインボイス（請求書）のステータスを自動で更新するものがあり、これまた本当に、非常に便利なのですが、ちょっと痒いところに手が届かないところがあります。例えば、

- 銀行振り込み／コンビニ決済用などの請求期日が過ぎた時にリアルタイムで知りたい
- 請求書の期日が経過してから、サブスクリプション／インボイスのステータスを更新するまでの期間が長すぎる（30/60/90日) 

って、請求書についてのみになってしまいましたが（それだけ、標準で用意されている自動回収の仕組みが良くできています）、皆さんもきっと同じことに悩まれたのではないでしょうか。きっとあります。というわけで、2023年12月時点でベータの機能になっておりますが、便利な機能についてご紹介致します。ちなみに、Stripe の[公式ドキュメント](https://stripe.com/docs/billing/revenue-recovery/automations)では、下記の様なユースケースに合わせ得た設定方法についても紹介されておりますので、参考にしてください。

- [年間サブスクリプション登録者に対するカスタムの督促フロー](https://stripe.com/docs/billing/revenue-recovery/automation-recipes#custom-dunning-flow)
- [高額のインボイスが期日を過ぎている場合にチームに通知する](https://stripe.com/docs/billing/revenue-recovery/automation-recipes#invoice-overdue-notifications)
- [サブスクリプションがキャンセルされた場合に確認のメールを送信する](https://stripe.com/docs/billing/revenue-recovery/automation-recipes#subscription-cancellation-confirmation)
- [見積もりの有効期限前にカスタム Webhook を実行するためのスケジュールを設定する](https://stripe.com/docs/billing/revenue-recovery/automation-recipes#scheduled-quote-expiry)

※ この機能の利用をご希望の場合、[こちらのページ](https://stripe.com/docs/billing/revenue-recovery/automations)にある「早期アクセスをリクエストする」から申請を願います。ただ全ての方に必ずしもご利用いただけるとは限らない点だけご了承願います。

* * *

# 自動化レシピの作成サンプル

請求書の期日が過ぎた時に webhook で受け取る

## STEP 1 名前とトリガーの設定

![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/44bcd3f5-6fe1-32d2-b8aa-916c2e362f18.png)

まず、こちらのキャプチャーの様に、自動化シナリオの名前を決めて、７種類用意されている[トリガー](https://stripe.com/docs/billing/revenue-recovery/automations#%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B)の中から選択します。

トリガーを選択すると、そのトリガーが発動するための[フィルター条件](https://stripe.com/docs/billing/revenue-recovery/automations#%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E6%9D%A1%E4%BB%B6%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B)を指定します。

![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/1f1757ae-65f8-bb04-98da-cd7997b89d6e.png)

サンプルのユースケースにもありましたが、高額の請求書の時や、特定商品、特定の顧客グループの時だけ適用したい場合に、これらのフィルター条件を指定します。このあとご紹介しますが、ここでフィルター条件を指定しないと、対象 Stripe アカウントで作成される全ての請求書やサブスクリプションにこのレシピが適用されます。特定条件下のみ指定したい場合はこちらのフィルター条件を指定してください。


## STEP 2 アクションの指定

ここでは、請求書の期日がすぎたら、Webhook でサービス側のシステムに通知して、それをトリガーとして請求書の宛先の Customer に対して通知するなどします。

![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/a9e42697-a1ed-707d-d357-114b501ad552.png)

アクションを登録すると、上限にそれぞれ下記の様な項目が追加されます。

- 待機期間の設定
- アクションの追加

![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/14e63456-e93c-d254-8e21-8b48ead443c2.png)

待機期間は、１日単位で指定することができますので、それぞれのビジネスケースに応じて自由に期間を指定します。例えば、インボイスやサブスクリプションのステータスの自動更新は、30/60/90 日しか選ぶことができませんでしたが、請求書の期日から１０日過ぎた時にサブスクリプションを自動でキャンセルするというようなことを実現することができます。

## STEP 3 優先度の調整

![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/fddddaa3-4b45-3f32-bbde-888c741b842b.png)

ここまでくれば、あともう一歩です。注意することとしては、これらのルールには優先順位があり、上から順番に評価されてそれにマッチするものがあれば、その下で設定したルールは評価されないということです。例えば、特定の metadata の値を持つインボイスにだけ特別なシナリオを実行したい場合には、それを一番上にする必要があります。[優先順位](https://stripe.com/docs/billing/revenue-recovery/automations#%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D)

また、もう一点注意が必要な事項としては、トリガーとして「サブスクリプションの決済が失敗する」を選択したときです。このトリガーを設定すると、この設定が最優先となるため、従来のリトライ機能は無効になります。その点はご留意頂いた上で設定願います。
![Notification_Center.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659358/d86b8e6b-e940-8c69-1555-0f73ff4fbb1f.png)

* * *

## さいごのごあいさつ

今回は一般機能のご紹介となりますが、今後機会がありましたら、もっと特別なユースケースに対応できるための実装などについてご紹介させていただければと存じます。