🏓

stripeで新規ユーザ作成時にslackにログを通知させる

2022/01/07に公開

stripe -> slack への通知がテーマです。

インターン先の企業では決済周りの処理をstripeで管理しています。stripeで発生した全ての処理を以下の画像のような仕組みでイベントごとにslackに通知させています。

しかし、初回課金の発生を見逃さないために、初回課金が発生した時点でslackのチャンネルに入る全てのメンバーにメンションをつけるように設定してほしいと依頼がありました。
そこで以下のような構成で実装を試みました。

1. 初回課金の発生を通知させるbotの作成

https://qiita.com/kira_puka/items/d372cf8ce1c5c98360bd
上の記事を参考にincoming webhookを新しく設定。

2. Cloud Functionのエンドポイントの作成

1. firebaseでプロジェクトを作成

2. stripeでエンドポイントの作成

https://qiita.com/mildsummer/items/de1c08d33b295f4633d6
上の記事を参考にstripeでエンドポイントを追加します。

https://firebase.google.com/docs/functions/get-started?hl=ja
次に上の記事を参考にfunctionsディレクトリ直下で以下のコマンドを実行し、Cloud Functionを使う準備と作成した関数をデプロイします。

$ npm install -g firebase-tools
$ firebase login
$ firebase init functions
$ firebase deploy --only functions

3.コードの実装

https://ccbaxy.xyz/blog/2020/01/14/node2/
上の記事を参考に必要なモジュールをインポート。

npm install --save npm install @slack/webhook

次に同様に上の記事を参考にコードを記述します。

index.ts
import * as functions from "firebase-functions";

export const helloWorld = functions.https.onRequest((request, response) => {
  try {
    functions.logger.info(JSON.stringify(request.body), {
      structuredData: true,
    });
    const { IncomingWebhook } = require("@slack/webhook");

    const webhook = new IncomingWebhook(
      "https://hooks.slack.com/xxxxxxx"
    );

    (async () => {
      await webhook.send({
        text: "初回課金です! <!channel>",
      });
    })();
  } catch (error) {
    console.error(error);
  }
  response.send("Hello from Firebase!");
});

最後にデプロイします。

firebase deploy 

終わり。

Discussion