Make.com×Stripeで決済通知システムを構築する
Make.comとStripe Webhookを連携し、決済完了通知・売上集計をGoogle Sheetsに自動記録するシステム構築手順を解説します。
はじめに
オンラインビジネスを運営していると、決済のたびに手作業で売上を記録したり、顧客対応チームに連絡を入れたりと、繰り返しの作業が積み重なっていきます。Stripeで毎日数十件の決済が発生する状況では、「どの注文が完了したか」「支払いが失敗した顧客に連絡できているか」を手動で追うのは現実的ではありません。
この記事では、Make.com と Stripe Webhook を組み合わせて、以下のことを自動化するシステムを構築する手順を解説します。
- 決済完了時にSlackへ即時通知
- 売上データをGoogle Sheetsに自動記録
- 決済失敗時のアラートを別チャンネルに送信
コードを書かずに、ノーコードで完結する内容です。Stripe・Make.comのアカウントがあれば、この記事を読み終わる頃には実際に動くシステムが完成しているはずです。
このシステムでできること
構築後のシステムは、Stripeで決済イベントが発生するたびに自動で動き出します。
決済成功の場合、Slackの #sales チャンネルに「¥9,800の決済が完了しました」といった通知が届き、同時にGoogle Sheetsの売上台帳に日時・金額・商品名・顧客メールアドレスが1行追加されます。
決済失敗の場合、Slackの #alerts チャンネルに失敗の詳細が通知されます。顧客への再試行依頼メールを送るワークフローへの拡張も容易です。
このシステムの特徴は、Stripeダッシュボードを開かなくても売上の全体像を把握できる点です。Slackを常時開いているチームであれば、リアルタイムで売上動向を共有できます。
使用するツール
Stripe Webhooks
StripeはWebhookという仕組みを提供しており、決済完了・失敗・返金などのイベントが発生した際に、指定したURLへHTTPリクエストを自動送信します。このURLにMake.comのWebhookエンドポイントを設定することで、Stripeの動きをトリガーにしたオートメーションが実現できます。
Webhookが送信するデータはJSON形式で、以下のような構造になっています。
{
"type": "payment_intent.succeeded",
"data": {
"object": {
"id": "pi_xxxxxxxxxxxx",
"amount": 9800,
"currency": "jpy",
"status": "succeeded",
"receipt_email": "customer@example.com",
"description": "プレミアムプラン月額",
"created": 1746000000
}
}
}
type フィールドでイベントの種類が分かります。payment_intent.succeeded(決済成功)と payment_intent.payment_failed(決済失敗)の2種類を今回は使います。amount はStripeの慣例で最小通貨単位(円の場合はそのまま円)で表されます。
Make.com
Make.comは視覚的なフローチャートを操作するだけで複数のサービスを連携できるオートメーションプラットフォームです。Webhookを受け取り、条件分岐してSlackやGoogle Sheetsにデータを送る処理を、コードなしで組み立てられます。
無料プランでは月1,000オペレーション(処理ステップ数)まで利用でき、今回のシステムなら月に約150〜200件の決済まで無料範囲内に収まります。本格的な運用には月9ドルのCoreプランが適しています。
事前準備
作業を始める前に、以下を用意してください。
- Stripeアカウント(テストモードで動作確認できます)
- Make.comアカウント(無料登録で構いません)
- Google Sheetsに売上記録用のスプレッドシート
- Slackワークスペース(通知先チャンネルを2つ用意:
#salesと#alerts)
Google Sheetsのスプレッドシートには、あらかじめ以下のヘッダー行を1行目に作成しておきます。「日時」「金額(円)」「商品名」「顧客メール」「決済ID」「ステータス」の6列です。
構築手順
STEP 1: Make.comでシナリオを新規作成する
Make.comにログインし、左サイドバーの「Scenarios」から「Create a new scenario」をクリックします。空白のキャンバスが表示されたら、中央の + ボタンをクリックしてモジュールを追加します。
STEP 2: WebhookモジュールでStripeからのリクエストを受け取る
モジュール選択画面で「Webhooks」を検索し、「Custom webhook」を選択します。新しいWebhookを作成すると、一意のURLが発行されます。このURLをコピーしておきます。形式は https://hook.make.com/xxxxxxxxxxxxxx のような文字列です。
Webhookモジュールの設定で「Determine data structure」をクリックすると、Make.comがテストリクエストの受信待機状態になります。この状態のまま次のステップへ進みます。
STEP 3: StripeダッシュボードでWebhookを登録する
Stripeダッシュボードにログインし、左メニューの「開発者」→「Webhook」を開きます。「エンドポイントを追加」をクリックし、以下を設定します。
エンドポイントURLには STEP 2 でコピーしたMake.comのURLを入力します。「リッスンするイベント」では payment_intent.succeeded と payment_intent.payment_failed の2つを選択します。設定を保存すると、署名シークレット(whsec_ で始まる文字列)が表示されます。この値は後で使うのでメモしておきます。
STEP 4: テストイベントを送信してデータ構造を取得する
Stripeダッシュボードのウェブフック設定画面で、「テストイベントを送信」ボタンをクリックします。イベントタイプとして payment_intent.succeeded を選び、送信します。
Make.comのキャンバスに戻ると、Webhookモジュールがデータ構造を自動認識して青い点が消えているはずです。受信したJSONの各フィールドが変数として利用可能になります。「OK」をクリックして確定します。
STEP 5: Routerモジュールでイベントタイプごとにフローを分岐させる
Webhookモジュールの右側に + を追加し、「Flow Control」→「Router」を選択します。RouterはWebhookから受け取ったデータを複数のルートに振り分けるモジュールです。
Routerに2本のルートが生えた状態になります。最初のルートには 経路1(決済成功) のフィルターを設定します。Routerから出る矢印の上にあるスパナアイコンをクリックし、フィルター条件に {{1.type}} = payment_intent.succeeded を設定します。
2本目のルートには 経路2(決済失敗) も同様に設定します。{{1.type}} = payment_intent.payment_failed です。
STEP 6: 決済成功時のSlack通知を設定する
経路1の先に + を追加し、「Slack」→「Create a Message」を選択します。Slackアカウントと連携させ、以下を設定します。
チャンネルは #sales にし、メッセージ本文には以下のテンプレートを入力します。
:white_check_mark: 決済完了
────────────────
金額: ¥{{formatNumber(1.data.object.amount; 0; "."; ",")}}
商品: {{1.data.object.description}}
顧客: {{1.data.object.receipt_email}}
決済ID: {{1.data.object.id}}
日時: {{formatDate(multiply(1.data.object.created; 1000); "YYYY/MM/DD HH:mm"; "Asia/Tokyo")}}
────────────────
formatNumber でカンマ区切りの金額表示に変換し、formatDate でUNIXタイムスタンプを日本時間(Asia/Tokyo)に変換しています。UNIXタイムスタンプは秒単位のため、multiply で1000倍してミリ秒に変換するのがポイントです。
STEP 7: Google Sheetsへの記録を設定する
Slack通知モジュールの右に + を追加し、「Google Sheets」→「Add a Row」を選択します。Googleアカウントと連携し、事前準備で作成したスプレッドシートとシートを選択します。
各列のマッピングを以下のように設定します。
「日時」には {{formatDate(multiply(1.data.object.created; 1000); "YYYY/MM/DD HH:mm:ss"; "Asia/Tokyo")}} を、「金額(円)」には {{1.data.object.amount}}、「商品名」には {{1.data.object.description}}、「顧客メール」には {{1.data.object.receipt_email}}、「決済ID」には {{1.data.object.id}}、「ステータス」には固定テキストの 成功 を入力します。
STEP 8: 決済失敗時のSlack通知を設定する
経路2の先にも同様に「Slack」→「Create a Message」を追加します。チャンネルは #alerts にし、メッセージは失敗内容が一目で分かるように設定します。失敗した場合は直前の状態を把握しやすいよう、金額と顧客情報を明記します。
:x: 決済失敗 というプレフィックスで、金額・顧客メール・決済IDを記載する形にします。経路1と同じ変数マッピングを使いながらテキストを変えるだけなので、経路1のSlackモジュール設定をコピーして編集するのが効率的です。
STEP 9: Webhookの署名検証を有効化する
このままではWebhook URLを知っている人なら誰でもリクエストを送れてしまいます。STEP 3 で取得した署名シークレット(whsec_ で始まる文字列)をWebhookモジュールの設定に入力し、Stripeからの正規リクエストのみを受け付けるようにします。
Webhookモジュールをダブルクリックして設定画面を開き、「Secret key(for IP filtering/signature verification)」フィールドに署名シークレットを貼り付けます。これにより、Stripeが付加する Stripe-Signature ヘッダーをMake.comが検証するようになります。
設定が完了したら、シナリオ右下の「Run once」で手動テストを行い、Stripeダッシュボードからテストイベントを再送してフロー全体が動くことを確認します。問題なければ、スケジューリングを「Immediately」に設定してシナリオをオンにします。
運用上のポイント
オペレーション消費数の目安
Make.comの無料プランは月1,000オペレーションまでです。今回のシナリオは決済成功時に3オペレーション(Webhook受信・Slack・Sheets)、失敗時に2オペレーション(Webhook受信・Slack)を消費します。月300件の決済があれば約900オペレーションになり、無料枠に収まります。それ以上になる場合はCoreプラン(月9ドル、10,000オペレーション)への移行を検討してください。
テスト環境と本番環境の分離
Stripeにはテストモードと本番モードがあります。開発中はテストモードのAPIキーとWebhookエンドポイントを使い、Make.comにも「テスト用シナリオ」と「本番用シナリオ」を別々に用意することを強く推奨します。本番のGoogle SheetsやSlackチャンネルにテストデータが混入するのを防げます。テストカード番号 4242 4242 4242 4242 を使えば、実際の課金なしに決済成功イベントを発生させられます。
Webhookの再試行動作
Stripeは、Webhookエンドポイントが200以外のHTTPステータスを返した場合、最大72時間にわたって指数バックオフで再試行します。Make.comがエラーで停止している間も、Stripeは再試行を続けるため、Make.comのエラーを修正すれば遅れて届いたイベントも正常に処理されます。
Make.com側では、シナリオの「Error Handler」モジュールを追加してエラー時にも通知を受けられるようにしておくと安心です。
データ重複への対策
Stripeは同じイベントを複数回送信することがあります(ネットワーク障害時など)。Google Sheetsに重複データが入るのを防ぐには、決済ID(pi_ で始まる文字列)を記録しておき、同じIDのレコードが既に存在する場合はスキップするフィルターを追加するとより堅牢になります。Make.comの「Google Sheets: Search Rows」モジュールで既存レコードを検索し、結果が空の場合のみ「Add a Row」を実行する構成が有効です。
応用アイデア
このシステムをベースに、以下のような拡張が容易に実現できます。
メール自動送信: 決済完了後に顧客へ領収書メールを自動送信します。Make.comのGmailまたはSendGridモジュールを経路1の末尾に追加するだけです。顧客の receipt_email を宛先に設定し、決済情報を埋め込んだHTMLメールをテンプレートから生成できます。
月次売上レポートの自動生成: Make.comのスケジュール機能を使い、月末にGoogle Sheetsのデータを集計してSlackやメールにサマリーを送信するシナリオを別途作成します。当月の合計金額・件数・失敗率などを自動集計してレポートにまとめられます。
Notionへの同期: Google Sheetsの代わりにNotionデータベースにデータを記録することもできます。Make.comにはNotionモジュールが用意されており、同様のフローで連携できます。売上管理にNotionを使っているチームに向いています。
多通貨対応: Stripeの currency フィールドを参照し、jpy と usd で表示フォーマットを切り替えるフィルターを追加することで、複数通貨を扱うビジネスにも対応できます。Routerにもう1本ルートを追加するだけで実現できます。
サブスクリプション管理: customer.subscription.created や invoice.payment_failed イベントをStripeダッシュボードのWebhook設定に追加することで、サブスクリプション(定期支払い)の管理にも拡張できます。解約率や更新率の追跡も自動化できます。
まとめ
Make.comとStripe Webhookを組み合わせることで、決済通知と売上記録の自動化をノーコードで実現できました。構築にかかる時間は慣れれば1〜2時間程度です。
このシステムの最大のメリットは、Stripeダッシュボードを開かなくても売上の流れが把握できる 点です。Slackに通知が届くため、チーム全体でリアルタイムに売上状況を共有でき、問題(決済失敗の増加など)にも即座に気づけます。
さらに、Make.comのモジュールを追加するだけで機能を拡張できるため、ビジネスの成長に合わせて徐々に自動化の範囲を広げていくことができます。まずはテストモードで動かしてみて、本番環境への切り替えは十分な動作確認ができてからにしましょう。