◉ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
⬡ 連携・プラグイン/2026-04-29上級

Antigravity AI エージェントで作る Stripe Dunning パイプライン — 課金失敗をチャーンに変えない仕組み

Antigravity の AI エージェントと Stripe Smart Retries を組み合わせ、課金失敗からチャーンに繋げないリカバリ(Dunning)パイプラインを実装します。Webhook 設計・自動メール文面生成・Slack 通知・解約防止までを通しで解説します。

antigravity470stripe9saas10billing3ai-agent17dunning

✦ プレミアム記事

私が運営している小さな SaaS で、ある月だけ MRR がガクッと落ちたことがありました。新規獲得は伸びていたのに、です。原因を Stripe Dashboard で追いかけていくと、答えはとても地味でした。カードの有効期限切れと、決済ネットワーク側の一時拒否。これだけでその月の解約の 6 割が説明できてしまったのです。

機能改善でもキャンペーンでもなく、「失敗した課金をどう回収するか」が、自分の SaaS の生存ラインに直結しています。当時その事実を突きつけられて、私はかなり落ち込みました。同時に、ここを自動化できれば、新規獲得と同じくらいの効果がありそうだとも思いました。

ここではその経験を経て私が組み上げた Stripe Dunning(請求リカバリ)パイプラインを、Antigravity の AI エージェントを軸にして再構築する方法を共有します。失敗イベントの捕捉から、リトライ制御、文面の出し分け、Slack 通知、最後の解約防止オファーまで、本番で動いているパターンを丁寧に書き起こしました。

なぜ「Dunning」を AI エージェントに任せたほうがいい理由

「Dunning(ダニング)」は、決済失敗後に支払いを促す一連のコミュニケーションのことです。日本語ではあまり馴染みがない言葉ですが、海外 SaaS では Stripe や Chargebee など多くのプラットフォームに専用機能があるくらい重要視されています。

ところがこの領域、見た目以上に判断が複雑です。

  • カード有効期限切れと、残高不足と、3DS 認証失敗では、送るべき文面と送るべきタイミングが違います
  • リトライ回数を増やすほど回収率は上がりますが、過剰だと顧客体験を壊します
  • 同じ顧客が短期間で複数の失敗を起こしたとき、メールを送り続けるのは逆効果
  • 法人カードと個人カードでは「誰に通知すべきか」も変わります

これを Webhook ハンドラの中に if 文で書き始めると、すぐに保守不能になります。私も最初はそうしました。150 行を超えたあたりで自分でも何が起きているか追えなくなり、一度すべて捨てました。

そこで考え方を変えて、ロジックの分岐を AI エージェントに渡すことにしました。Antigravity 上の Manager Surface に dunning 用のサブエージェントを定義し、Webhook ハンドラはイベントを正規化してエージェントに渡すだけ、という設計です。

全体アーキテクチャ

完成形は次のような流れになります。

  1. Stripe Webhook 受信(invoice.payment_failed / customer.subscription.updated 等)
  2. 冪等性チェック & イベント正規化(Cloudflare D1 または Postgres)
  3. Dunning Agent への委譲(失敗理由・顧客プロフィール・過去のリトライ履歴を渡す)
  4. 判断: 「リトライを Stripe に任せるか/カスタマーへ通知するか/解約防止オファーを発火するか」
  5. アクション実行: Resend でメール、Slack で内部通知、KV/DB で状態更新
  6. 観測: 全イベントを構造化ログ化し、Looker Studio で可視化

このうち 3 と 4 を AI エージェントに任せるのがポイントです。Stripe 側にもデフォルトの Smart Retries はありますが、こちらは自社のドメインルール(無料体験中は通知を控える、年額プランは特別扱いする、過去 1 年で解約復帰した顧客には別文面、など)を載せられる場所が少ないのです。エージェント側にプロンプトとツールで明示することで、ロジックの言語化と更新が一気に楽になります。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦失敗理由(期限切れ/残高不足/3DS/ネットワーク拒否)ごとに、文面・タイミング・経路を出し分ける判断基準
✦Smart Retries とアプリ側リトライの二重化を避ける、冪等な Webhook とエージェント委譲の設計
✦理由カテゴリ別のリカバリ率と損益分岐(月30件)まで踏み込んだ、3か月の実運用メトリクス
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 連携・プラグイン2026-10-17
Antigravity のブラウザエージェントがログイン画面で止まるときに確認する4点
ブラウザエージェントに管理画面を読ませたら、返ってきたのはサインイン画面だけ。別 Chrome プロファイルという仕様を踏まえ、ログイン状態を整える4つの確認点をまとめました。
⬡ 連携・プラグイン2026-09-05
GOOGLE_GEMINI_BASE_URL を差し替えても、鍵の持ち主は変わりません
Antigravity CLI の宛先を自前のゲートウェイへ向けたとき、手元の API キーがどこまで運ばれるかを受け側で記録しました。クロスホストのリダイレクトで Authorization は落ちるのに API キーヘッダーは残る、という挙動差の実測と、鍵を端末から外すゲートウェイの組み方を書き残します。
⬡ 連携・プラグイン2026-05-24
Antigravity サブエージェントの「動いているのに何もしていない」を捕まえる Observability 3層設計
実行ログは緑なのに成果がゼロ——Antigravity のサブエージェントを夜間に回すと必ず出会うサイレント失敗を、Heartbeat / Output Trace / Decision Log の 3 層で検知する設計です。起動漏れ・古い入力・書き込みゼロのループを SQL とコードで見分ける方法を、そのまま写せる形で共有します。