メインコンテンツへスキップ

放棄されたカート回復イベント

以下のWebhookイベントは放棄されたカートの回復ライフサイクルを追跡します:
EventDescription
abandoned_checkout.detected放棄されたチェックアウトが検出されました。支払いが放棄された(失敗または不完全)と判断され、回復ワークフローが開始されたときに送信されます。
abandoned_checkout.recovered顧客が回復リンクを通じて支払いを完了しました。recovered_payment_id フィールドには成功した支払いのIDが含まれています。

放棄されたチェックアウトペイロードフィールド

payment_id
string
必須
放棄された元の支払いです。これを使用して製品、金額、通貨の詳細を調べてください。
customer_id
string
必須
チェックアウトを放棄した顧客。
abandonment_reason
string
必須
なぜチェックアウトが放棄されたのか。以下のいずれか:
  • payment_failed — 顧客が支払いを試みたが失敗した
  • checkout_incomplete — 顧客がチェックアウトを訪れたが支払いを試みなかった
status
string
必須
この回復試行の現在のライフサイクル状態。以下のいずれか:
  • abandoned — 検出済み、まだメールは送信されていません
  • recovering — 少なくとも1つの回復メールが送信済み
  • recovered — 顧客が支払いを完了
  • exhausted — すべてのメールが送信済みまたは新しいチェックアウトが見つかった場合
  • opted_out — 客が配信停止
abandoned_at
string
必須
放棄されたと検出されたチェックアウトのISO 8601タイムスタンプ。
recovered_payment_id
string | null
成功した回復支払いの支払いID。チェックアウトが回復するまでnull

例: ACR Webhooksの処理

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});

催促イベント

以下のWebhookイベントはサブスクリプション催促ライフサイクルを追跡します:
EventDescription
dunning.startedサブスクリプションがon_holdに入った、または顧客によってキャンセルされたときに催促試行が作成されました。
dunning.recovered顧客が支払い方法を更新し、その結果支払いが成功しました。payment_id フィールドには成功した支払いのIDが含まれています。

催促試行ペイロードフィールド

subscription_id
string
必須
催促試行をトリガーしたサブスクリプション。
customer_id
string
必須
サブスクリプションを所有する顧客。
trigger_state
string
必須
催促を引き起こしたサブスクリプションの状態。以下のいずれか:
  • on_hold — 支払いの失敗によりサブスクリプションが一時停止された
  • cancelled — 顧客ポータルから顧客がキャンセル
status
string
必須
この催促試行の現在のライフサイクル状態。以下のいずれか:
  • recovering — 催促メールが送信されています
  • recovered — 顧客が支払い方法を更新し、支払いが成功
  • exhausted — すべてのメールが送信済みまたはサブスクリプションの状態が変更
created_at
string
必須
催促試行が作成されたときのISO 8601タイムスタンプ。
payment_id
string | null
成功した回復支払いの支払いID。回復している間はnull

例: 催促Webhooksの処理

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
完全な催促ライフサイクルを追跡するには、dunning.starteddunning.recoveredの両方を購読します。 dunning.startedを使用して、猶予期間の一時停止や危険なサブスクリプションをシステムでフラグ付けします。

Abandoned Cart Recovery

ACRメールシーケンスと割引インセンティブを設定します。

Subscription Dunning

期限切れサブスクリプションの催促メールシーケンスを設定します。

Subscription Webhooks

subscription.on_holdsubscription.cancelledのような関連サブスクリプションライフサイクルイベント。

Webhookペイロードスキーマ

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
必須
abandonment_reason
enum<string>
必須
利用可能なオプション:
payment_failed,
checkout_incomplete
customer_id
string
必須
payment_id
string
必須
status
enum<string>
必須
利用可能なオプション:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on April 20, 2026