2.5K Views
May 02, 23
スライド概要
春のJavaScript祭り Online 2023
Developer
GAS(Google App Script)で Stripeなどの請求業務を効率化しよう 春のJavaScript祭り Online 2023
Agenda • Google App Script(GAS)とは? • Google Apps内の情報を、外部サービスに連携しよう • 外部サービスからGASをWebhookで呼びたかった話
HELLO! ✋ 岡本 秀高 (Hide) • Stripe Developer Advocate • WordCamp Kyoto 2017 • @hidetaka_dev • https://hidetaka.dev
Agenda • Google App Script(GAS)とは? • Google Apps内の情報を、外部サービスに連携しよう • 外部サービスからGASをWebhookで呼びたかった話
Google App Script(GAS)とは?
Sheetなどのアプリから作成できる
ブラウザ上でJSを記述
Google AppのAPIは 入力補完を参考に
任意のSheetに行を追加する例 function doPost(e) { const ss = SpreadsheetApp.openById(‘Sheet ID') const sheet = ss.getSheetByName(‘Sheet name’) sheet.appendRow([ 2, “Hello” ]) }
連携したい Googleアプリの 権限をリクエスト
実行するたびに、 行が追加される
サンプルが豊富 https://developers.google.com/apps-script/samples?hl=ja
紹介されているサンプル(一部) • YouTube動画の視聴数やコメントなどをSheetに保存&通知 • Formの選択内容に応じて、異なる内容のメールを送信 • Sheetに登録したデータから、セッション予約フォームを作成 • 個人カレンダーの予定を、チームや会社カレンダーに同期
Agenda • Google App Script(GAS)とは? • Google Apps内の情報を、外部サービスに連携しよう • 外部サービスからGASをWebhookで呼びたかった話
Stripe APIを呼び出す例(顧客作成)
UrlFetchApp.fetch('https://api.stripe.com/v1/customers', {
method: 'post',
headers: {
Authorization: "Basic " + Utilities.base64Encode("sk_test_xxxxx")
},
payload: {
name: "Hello GAS"
}
})
ブラウザ上で編集する場合、 SaaSのAPIもUrlFetchApp.fetchを使う
cURLのサンプルを 参考にしよう
SDKを使いたい場合は、 ローカルでビルド&デプロイ
GASを使った自動化の例 • 見積もり依頼フォームを送信: • Stripeで見積もりデータを作成 • Stripe上に生成されたPDFのURLを添えてGmailで返信 • SheetやHubSpotなどにリード情報を登録
GASを使った自動化の例 - 2 • 毎日指定時間にトリガーを設定 • StripeのAPIで「未払い顧客情報」を取得 • Gmailで支払いリマインドメールを送信 • GmailやSlack APIで社内に要対応顧客リストを作成
事業分析に 使っている例 https://bit.ly/3AlbGFb
GASでアプリとサービス同士を連携 • UrlFetchApp.fetchで外部SaaSにもデータ送信可能 • ブラウザ上で編集するか、ClaspでCLIアップロード • 「いつもの事務作業」を、GASで自動化しよう
Agenda • Google App Script(GAS)とは? • Google Apps内の情報を、外部サービスに連携しよう • 外部サービスからGASをWebhookで呼びたかった話
GAS実行のための URLを作成
生成されたURLを コピーする
Stripeの Webhookに登録
GETはdoGet, POSTはdoPost関数
function doPost(e) {
const ss = SpreadsheetApp.openById(‘Sheet ID')
const sheet = ss.getSheetByName(‘Sheet name')
const event = JSON.parse(e.postData.contents)
const stripeData = event.data.object
switch (event.type) {
case 'customer.created': {
sheet.appendRow([
stripeData['id'],
stripeData['name']
])
break
}
default:
break
}
}
return ContentService.createTextOutput("OK")
Stripeで 顧客データを作成
Sheetに ユーザー情報が同期
ただし
• API URLを一般公開 • 「誰でも呼び出せる」 • Gmailと連携していると スパムメールが 送れてしまう
GASで リクエストヘッダーが とれない・・・ぽい?
わかる方 後で @hidetaka_dev 宛に リンクなど送ってください🙇
まとめ • Google Appsユーザは、JS(GAS)で業務効率化が可能 • Webhookとして使うには、検証処理が組めるか要チェック • JS (GAS / AWS)で サブスク・請求業務を自動化する話をもっとしたい!