Stripe と Slack を連携して決済失敗を自動で通知する方法|金額と顧客の注意点

カードの決済や請求書の支払いが失敗しても、Stripe のダッシュボードを開くまで気づけないことがあります。この記事では、支払い失敗を Slack のチャンネルへ流す手順を、金額の読み方と顧客情報の扱いまで含めて説明します。

結論

  • Samurai App の「サービス連携」で Stripe の出来事を受け、「通知先へ送る」で Slack へ送ります。 URL の貼り付けは必要ありません。
  • 軸にする出来事は STRIPE_INVOICE_PAYMENT_FAILED(請求書の支払い失敗)と STRIPE_CHARGE_FAILED(決済の失敗)です。申込みの完了は STRIPE_CHECKOUT_SESSION_COMPLETED で受けられます。
  • 金額は最小通貨単位の数のまま届きます。日本円の 5000 は 5,000 円ですが、米ドルの 1099 は 10.99 ドルです。
  • 「通知先へ送る」はモデルを呼ばないので、この形にクレジットは使いません。受信 1 件ごとの約 0.5 円は別にかかります。

できること・できないこと

できること:

  • 出来事ごとに、金額、失敗の理由、請求書番号などを選んで本文に差し込むこと
  • 「設定」の「通知」で登録した通知先ごとに、送る先のチャンネルを分けること

Stripe の仕様から来る制約:

  • 同じ出来事が 2 回届くことがあります。 Stripe は順序を保証せず、同じイベントを複数回送る場合があると案内しています。本番環境では、受信に失敗すると最長 3 日のあいだ再送します。
  • invoice.payment_failed は最終的な失敗とは限りません。 自動で再試行される一時的な失敗でも届きます。回数は attempt_count で本文に出せます。
  • checkout.session.completed は入金の完了とは限りません。 セッションが完了していても決済が処理中の場合があるため、payment_status を本文に載せて見分けます。
  • 1 回の支払い失敗で charge.failed と invoice.payment_failed の両方を受ける形にすると、通知が重なる可能性があります。公式に対応関係の明記が見つからないので、まず片方から始めて、実際の届き方を見てから足すことをおすすめします。

Samurai App の仕様から来る制約:

  • トリガーの実行は公開版でしか動きません。
  • サービス連携のトリガーを付けられるのはマネージャー以上で、有効にできる数は 20 個です。1 つの出来事に 1 つのトリガーを作るので、受けたい出来事の数だけ上限を消費します。

用意するもの

  • Stripe のアカウント
  • 投稿先のチャンネルと、そのチャンネルの Slack Incoming Webhook の URL
  • Samurai App のマネージャー以上の権限

手順

完成すると、次のようなワークフローになります。

Stripe の決済失敗を Slack へ送るワークフローの編集画面

1. Slack で Incoming Webhook を作る

Slack のアプリ管理画面でアプリを作り、「Incoming Webhooks」を有効にします。「Add New Webhook to Workspace」で投稿先のチャンネルを選んで許可すると、URL が発行されます。投稿先はこの時点で固定され、送る側から変更できません。URL が漏れると第三者がそのチャンネルへ投稿できるので、URL は共有しないでください。

2. 通知先を登録する

「設定」の「通知」にある通知先の登録画面

Samurai App の「設定」→「通知」で「通知先」に名前と URL を登録し、「テスト送信」で届くことを確認します。通知先には https:// の URL だけを登録でき、登録後は URL が再表示されません。

3. Stripe を接続する

「コネクタ」画面の「コネクタ」タブで Stripe を検索して「追加」を押し、自分のアカウントを「連携」します。

4. ワークフローを作る

「ワークフロー」の「新規作成」で作り、ステップを選んでいない状態の「設定」にある「ワークフローの入力」で「入力の項目を追加」を押します。名前を event、種類を「項目の組」にします。

「ステップを追加」から「通知先へ送る」を足し、手順 2 の通知先を選びます。「本文」は「/」か「{{」か「変数」で値を差し込めます。請求書の支払い失敗なら、たとえば次のように書きます。

支払いが失敗しました
請求書: {{input.event.data.object.number}}
金額: {{input.event.data.object.amount_due}} {{input.event.data.object.currency}}
試行回数: {{input.event.data.object.attempt_count}}

決済の失敗なら amount、currency、failure_message を使います。currency は jpy のように小文字で届きます。チャットで作るなら、「Stripe の請求書の支払い失敗を Slack の通知先へ送るワークフローを作って」と頼めます。

5. 公開してトリガーを付ける

「バージョン」タブで「バージョン N を公開」を押します。続いて「トリガー」タブの「サービス連携を追加」を押し、「どのサービスを監視するか」で Stripe を、「どうなったら動かすか」で STRIPE_INVOICE_PAYMENT_FAILED を選びます。届いた内容は入力 event で渡るので、この欄は聞かれません。

6. 最初の 1 件で中身を確認する

出来事が届いたら、「実行」タブの「最近の実行」でステップの入力と出力を開き、差し込んだ値が想定どおりか確認します。この確認が済むまでは本文の項目を増やさないでください。

顧客情報を Slack に流すときの注意

Stripe の出来事には、customer_email、customer_name、customer_address、customer_phone、billing_details など顧客の個人情報が入っています。Slack のチャンネルは参加者全員が読め、投稿は残ります。本文には、必要な項目だけを選んで差し込みます。

  • 誰の支払いかは、まず customer(顧客 ID)で示し、詳細は Stripe のダッシュボードで見る形にすると、Slack に個人情報が残りません。
  • 請求書の hosted_invoice_url は顧客が請求書の閲覧と支払いをする URL です。チャンネルに貼らないでください。
  • 「一緒に送る値(任意)」は Slack には表示されません。出来事全体を入れても画面には出ず、外部へ送るデータが増えるだけなので、使わないでください。

動かないとき

  • ステップが失敗し、値が無いと出る。 差し込んだ項目が届いた内容に無いと、空で送られるのではなくステップが失敗します。値が null なら空になりますが、親の項目が null だとその下の項目は無い扱いです。Checkout の customer_details は null になりうるので、customer_details.email のような差し込みはこの形で失敗します。
  • 出来事が届いているのに実行されない。 未公開の可能性があります。「バージョン」タブで公開の状態を確認してください。
  • 金額の桁が合わない。 最小通貨単位の読み違いです。日本円は小数のない通貨なので、数のままが円の額です。米ドルなど 2 桁の小数を持つ通貨は 100 で割って読みます。
  • Slack に届かない。 「通知先」の行に「宛先の URL が見つかりません。URL を確かめてください(404)」と出ていれば URL の誤りです。「編集」で直してください。

よくある質問

テスト環境の決済と本番の決済を見分けられますか

出来事には livemode が含まれます。本文に {{input.event.livemode}} を差し込めば見分けられます。

返金や異議申し立ても通知できますか

選べます。STRIPE_CHARGE_REFUNDED と STRIPE_CHARGE_DISPUTE_CREATED が一覧にあります。それぞれ別のトリガーとして追加します。入金の失敗には STRIPE_PAYOUT_FAILED があります。

重複した通知を止められますか

この手順の形では止められません。同じ出来事が再度届くと、もう一度送られます。Stripe はイベント ID で重複を判別するよう案内しているので、通知を読む側は請求書番号や決済の ID で同じ件かどうかを見てください。

関連する使い方

出典

関連する機能AIでワークフロー自動化 —— 定型業務を決めた順にSamurai App のワークフローは、書いたとおりの順に必ず動くステップの並びです。AI の判断、承認待ち、外部サービスの操作を 1 本にまとめ、定期実行や外部からの起動で定型業務を自動化します。

ほかの自動化の例

Slack の連携と自動化の方法をすべて見る

活用術の記事一覧へ

日々の仕事が集まり、つながり、会社の力になる。

資料請求Samurai App を開く

デモを見る資料請求