💰
Stripe WebhookとGASでStripeのイベントを受信し、購入者に自動でメールを送る
Stripeで商品が買われたときに手動でメールでご案内するのが面倒...自動化したい!
Stripeには、商品購入後に領収書メールを自動送信する機能があります。
しかし、その内容をカスタマイズすることはできません。
自分の商品が購入されたときに、
お客さんに自動返信メールで「お礼」と、「商品の案内」を送りたい!
手動でいちいちメールを送るのは嫌だ!
というわけで、作ってみました。
試す場合は自己責任でお願いいたします。
完成イメージはこちら
欲しい機能
- Stripeから商品を購入してくれた人に自動でお礼メールを送る
- メールの内容は商品ごとに出し分ける
使ったもの
- Stripe Webhook
- Stripe API
- GAS/スプレッドシート
さっそく作ってみる
Stripeの設定
- Stripe右上の「テスト環境」をONにする ※開発が完了したら本番に戻し、APIキーの書き換えを行ってください。
- 「開発者」をクリック。APIやWebhookのメニューが表示されます。
- 左メニュー
API
をクリックし、API Keyを確認 - 左メニュー
Webhook
をクリックし、「+エンドポイントを追加」する
- エンドポイント URL: GASで作ったウェブアプリのURLを入力
- リッスンするイベントの選択:
checkout.session.completed
(購入完了のイベント)
スプレッドシート/GAS側の準備
欲しい機能の一つである「メールの内容は商品ごとに出し分ける」を実現するため、
出し分けるテキストの内容をスプレッドシートで管理することにしました。
流れは以下になります。
- 購入されたStripeの商品名を取得
- 同じ商品名のセルがあるかスプレッドシート内を検索
- 隣の列の文章(メールに入れたい文章)を取得
- メール送信
では商品名と商品ごとのメールテキストデータを作っていきましょう。
新規スプレッドシートを作成し、
1列目に商品名(Stripeの商品名と完全に一致させること)、
2列目にメールテキストを入れてください。
データが完成したら、
- スプレッドシートのメニューからGASのエディタを立ち上げる
- 下記コードをコピペ
- APIキーやメールアドレスを書き換える
- デプロイ
- WEBアプリのURLをコピーし、StripeのWebhook エンドポイントを追加に入力。
function doPost(e) {
//Stripeのイベント
const jsonString = e.postData.getDataAsString();
const data = JSON.parse(jsonString);
const customerMail = data.data.object.customer_details.email;
const APIKEY = '【あなたのStripe APIキー】';
const SET = {
headers: {
Authorization: 'Basic ' + Utilities.base64Encode(APIKEY)
},
muteHttpExceptions: true,
method: 'GET'
}
const response = UrlFetchApp.fetch("https://api.stripe.com/v1/checkout/sessions/"+ data.data.object.id + "/line_items",SET
);
const responseData = JSON.parse(response);
const itemName = responseData.data[0]['description'];
console.log(itemName);
//スプレッドシート
var spread = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = spread.getSheets()[0] ;
var textFinder = sheet.createTextFinder(itemName);
var range= textFinder.findAll();
var row = range[range.length - 1].getRow();
var itemIntro = sheet.getRange(row,2).getValue();
Logger.log(itemIntro) ;
// 購入者に送る自動返信メールの情報
var sendToAddress ="【あなたのメールアドレス】";
var subject = itemName +'をご購入いただきありがとうございます';
var option = {};
option.from = sendToAddress;
// 自動返信メール本文
var body =
'この度は'+itemName +'をご購入いただき、誠にありがとうございました。' +
'\n' +
itemIntro+
'\n' +
'不明点などございましたら、公式LINEよりお問い合わせください。\n' +
'\n' +
'─────────────────────────\n' +
'署名 \n' +
'─────────────────────────\n' +
'\n';
// メール送信
GmailApp.sendEmail(customerMail,subject,body,option); //自動返信メール
GmailApp.sendEmail(sendToAddress,subject,body,option); //自分にも同じ内容を送信
}
これで、商品を購入したとき、商品ごとに異なる内容の自動返信メールを送れるようになりました!
Discussion