🐶

BASEの購入メールをDiscordに上手いこと通知する[Pipedream][パレード米]

2024/03/25に公開

はじめに

以前より付き合いのある和田農園さんは、BASE にて Vtuber さんとのコラボ商品「パレード米」を販売しています。その作業フローの中で、購入履歴をそれぞれの Vtuber さんに Discord を用いて連絡していたものを自動化した際の記録です。以下は、パレード米販売ページです。興味があれば。

BASE では、登録のある Email アドレスに対してメールは通知されますが、その他チャットツールに通知する機能がささっと探した感じ見当たりませんでした。また、Vtuber さんに連絡する際に、購入者の情報を削って連絡をする必要があり、意外と時間がかかるという課題がありました。

なぜ転送先が Discord かというと、配信者の方々にとっては非常に身近なツールだからという理由です。海外のサービスであれば、連携されているシステムも多くあるみたいですが、BASE で転送ができるか、なかなか出てこなかったので、実装することにしました。

アーキテクチャ・DB 設計

連携させるために、今回は Pipedream というサービスを使用しています。言語は Python を使用しています。Python3 を使用できるうえ、意外と様々なライブラリが使用できます。

Pipedream とは

ローコードのインテグレーションツールです。ローコードツールですが、いくつかの API に関してはコードを書くことなく連携できる上、データ加工については Python や Javascript を用いて自由に加工することができます。類似サービスとしては、IFTTT、Zapier、Make などがありますが、Pipedream を選択した理由は無料枠があることと、Email をイベントトリガーとして使えるからです。個人的には類似サービスと比較しても Pipedream が使いやすいと感じてます。上記に示した特徴より、状況に合わせたカスタマイズがしやすいです。まぁ、昔と比べると価格は高くなりましたが。

今回は、実装したワークフローは以下の通りです。今回は Vtuber さんに対する連絡と、購入履歴の集計を自動化しています。

  • 購買情報メールの discord 転送
    • E メール受信実行
    • 商品に応じて、指定された Discord チャンネルに転送
    • 転送内容は、購入履歴として Google Sheets に保存
  • 購入履歴の集計
    • スケジューラ実行:毎月 8 日
      • 未払いなどによる購入キャンセルを考慮
    • 購入履歴から商品ごとの集計を行い、Google Sheets に保存
    • 商品に応じて、指定された Discord チャンネルに転送

データは Google Sheets に保存しています。作業者が非エンジニアである点こと、Google Sheets であれば Google の他サービスとの連携も容易であること(Appsheet や Loocker など)が理由です。

以下に、適当アーキテクチャを示します。Gmail にて届いたメールは、Vtuber さんの名前に応じて Discrod の指定されたチャンネルにそれぞれ転送します。情報の公開設定は Discord 側で何とかします。

注意点として、以下のことが挙げられます。注文や宛先が増えれば pipedream の上限に引っかかる恐れはありますが、それは運用コストが上がるから困るというより、売上が上がっていて良いと考えておけばある程度ポジティブだと思います。注文が増えるということは集計する工数も本来であれば増えるということですし。

有料プランにすれば、10tps まで捌けるし、ワークフロー実行の上限も無くなるので、必要があれば上げても良いかもしれませんね。

  • Google sheets は最大 500 万セル
  • Pipedream の制限
    • 無料枠
      • 一日 25 イベントまで
      • 月 100 イベントまで
    • アカウント紐付けは 5 つまで

期待効果

主だったところだと、効果が期待できますかね。

  • 農家さんのメリット
    • 連絡の省力化・連絡漏れの防止
    • 集計業務の省力化
  • Vtuber さんのメリット
    • 人によっては、一緒にお米を食べる配信をされているそうで、そういった配信中にリスナーが購入されたかをある程度オンタイムで把握できそうです(BASE からのメールが起点なので、厳密なリアルタイムではない)

おわりに

BASE の購入メールを Discord に条件を指定して通知する方法について記載しました。仕組みは簡単なので、どなたかの参考になれば幸いです。

Discussion