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

はじめに

チームがすでにコラボレーションしている場所で情報を提供します。Discord統合は、支払い、サブスクリプション、紛争、その他の重要なイベントを、選択した任意のチャンネルに直接配信します—ポーリングやダッシュボードは不要です。
このガイドは、Dodo Paymentsダッシュボードの統合セクションにアクセスできることを前提としています。

始め方

1

Webhookセクションを開く

Dodo Paymentsダッシュボードで、Webhooks → + エンドポイントを追加を開き、ドロップダウンを展開して統合を表示します。
エンドポイント追加と統合のドロップダウン
2

Discordを選択

Discordカードを選択し、Discordワークスペースを接続をクリックします。
3

ボットを認証

ボットが選択したチャンネルにメッセージを投稿できるように、要求された権限を付与します。
4

変換コードを編集

ペイロード → 埋め込みマッピングをニーズに合わせて調整するか、以下のテンプレートから始めます。
5

テストと作成

サンプルペイロードを使用して埋め込みをプレビューし、作成をクリックします。
6

完了!

🎉 あなたのDiscordチャンネルは、今後リアルタイムのDodo Payments更新を受け取ります。

変換コードの例

最小限の支払い埋め込み

payment_embed.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: "✅ Payment Successful",
        description: `**Amount:** $${(p.total_amount / 100).toFixed(2)}\n**Customer:** ${p.customer.email}`,
        color: 0x2ecc71 // green
      }]
    };
  }
  return webhook;
}

サブスクリプションイベント

subscription_embed.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        embeds: [{
          title: "📄 Subscription Activated",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true },
            { name: "Next Billing", value: new Date(s.next_billing_date).toLocaleDateString(), inline: true }
          ],
          color: 0x2ecc71
        }]
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        embeds: [{
          title: "⚠️ Subscription Cancelled",
          fields: [
            { name: "Customer", value: s.customer.email, inline: true },
            { name: "Product", value: s.product_id, inline: true }
          ],
          color: 0xf1c40f
        }]
      };
      break;
  }
  return webhook;
}

紛争アラート

dispute_embed.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      embeds: [{
        title: d.dispute_status === "won" ? "🏆 Dispute Won" : d.dispute_status === "lost" ? "❌ Dispute Lost" : "🚨 Dispute Update",
        fields: [
          { name: "Payment ID", value: d.payment_id, inline: true },
          { name: "Amount", value: `$${(d.amount / 100).toFixed(2)}`, inline: true },
          { name: "Status", value: d.dispute_status, inline: true }
        ],
        color: d.dispute_status === "won" ? 0x2ecc71 : d.dispute_status === "lost" ? 0xe74c3c : 0xe67e22
      }]
    };
  }
  return webhook;
}

ヒント

  • リッチフォーマットと色のために埋め込みを好む。
  • タイトルは短く保ち、詳細はフィールドに記入する。
  • 直感的な色を使用する:緑(成功)、赤(失敗)、オレンジ(警告)。

トラブルシューティング

  • ボットがチャンネルにアクセスできることを確認します。
  • 変換がembedsを持つJSONオブジェクトを返すことを確認します。
  • エディタでコードを検証します – 構文エラーは配信をブロックします。
  • フィールド名がWebhookペイロード構造と一致していることを確認します。