Bubble×stripe(API)で、サブスク登録から1か月後にDBの値を自動リセットする方法

Bubble×stripe(API)の実装方法についてご質問です。

現在実装中のWebアプリにて、サブスクリプションに登録したユーザーに対して、お店で使える回数券(1か月につき3回の上限あり)を発行しようと考えております。

お店に行く度、ボタンを押して1回ずつ回数券を消費でき、1か月につき最大3回使うことができます。

サブスクの登録や支払いはstripeで実装しており、その人が現在サブスクに登録しているかどうかは、Usersテーブルにカラムを追加して、フィールドが「Yes」か「No」かで判断しています。
「Yes」のユーザーに回数券を表示するようにしています。

また、回数券の残数について、Usersテーブルに「usege」というカラムを追加しており、デフォルトは「3」で、使用ボタンを押すたびに「1」ずつ消費されるようにしています(「0」になるとボタンを押せないようにしています)。

上記をまとめますと、以下のような流れになります。

<流れ>
①Webアプリ内にて、それぞれのユーザーが月額サブスクリプションに登録する。
②登録したユーザーにはWebアプリ内にて回数券(3回分)が表示され、ボタンを押して回数券を消費していく。1か月内で3→0まで消費する。
③1か月後、該当のユーザーがまだサブスクリプションに登録していれば、そのユーザーのusageを自動的に0→3にリセットする(サブスクに登録していればこの自動リセットを毎回繰り返し行う)

ですが、この③の自動リセットがうまくいかず、困っております。

ユーザーがサブスクで登録後、一か月後にその回数券(usage)が自動的にリセットされてほしいのですが、どのように実装すればよいでしょうか。

お手数をおかけしますが、解決方法をご教示いただけますと幸いです。

何卒よろしくお願いいたします。

「いいね!」 2

該当ユーザーは対象のWebアプリへのアクセスはするのでしょうか?

Webアプリへのアクセスを想定しているのであれば
登録時に「解約日(リセット日)を登録」を行っておき
該当ユーザーがアプリケーションにアクセスした際に

トリガー:page is loaded
条件:Current User’s 解約日<Crrent date/tame and Current User’sサブスク is yes

で回数券の項目をMake changesでリセットを行うことで対応できるのはないかと思います。

「いいね!」 3

「サブスクリプション」はいくつか使い方がありますが、
今回は、毎月一定の日付で回数券が付与されるのですね。

各ユーザーのサブスク登録日を保存しておき、Backend Workflowを使って、
・毎日、今日が更新日の全ユーザーを探してリセット+翌日の起動スケジュールをセット
または、
・ユーザーごとに次回の更新日に起動するスケジュールをセットし、リセット+次回起動スケジュールをセット

という方法はいかがでしょう。

「いいね!」 5

hirosugiさん

ご教示いただきありがとうございます。
イメージとしては、こういった感じでよさそうでしょうか?

お手数をおかけしますが、ご確認いただけますと幸いです。
何卒よろしくお願いいたします。

jansnapさん

ご教示いただきありがとうございます。

Backend Workflowでバッチ処理を行うということですね。
最近有料アプリにしたばかりで、使い方が分からず調べまして、ちょうどjansnapさんの記事にあたりましたので、こちらで勉強させていただきました。

上記の内容を踏まえまして、
・毎日、今日が更新日の全ユーザーを探してリセット+翌日の起動スケジュールをセット
で実装することも検討してみたいと思います。

ありがとうございます。
引き続きよろしくお願いいたします。

はーい。また分からない所が出たら投稿してください :smile:

「いいね!」 1

その設定でどうでしょうか?

解約日の更新のために
Make changes toのタイミングで
Current user’s stripe customer subscriptions’s current period endhing dateに 「+months:1」しておけば1ヶ月毎の更新もされるのではと思います。

Backend Workflowならばユーザーがアクセスしなくとも
すべての対象データが更新されると思いますのでとてもスムーズになると思います。

ご参考になれば幸いです。

「いいね!」 1

hirosugiさん

ありがとうございます。
まずはBackend Workflowで実装を進めてみたいと思います。

引き続きよろしくお願いいたします。

「いいね!」 1

hirosugiさん jansnapさん

お世話になっております。
初歩的なご質問で申し訳ございません。

image

ユーザーがサブスクに登録した際に、「update」に次回更新日を入れるようにしました。
kinelperは「Yes」「No」でサブスクに加入しているかどうかを判別しています。

Backend Workflowで、「もし更新日になったら、サブスクがYes(加入済み)のユーザーのusageを3にする」という処理をしたつもりなのですが、うまくいかず。。

できることならjansnapさんの
・毎日、今日が更新日の全ユーザーを探してリセット+翌日の起動スケジュールをセット
を実装してみたいのですが、こちらもうまくいかず。。(もしよろしければ、こちらの方法もご教示いただけますと幸いです)

お手数をおかけしますが、解決方法をご教示いただけますと幸いです。
そもそも根本的に間違っているところがございましたら、ご指摘いただけますと幸いです。

何卒よろしくお願いいたします。

・Current User は、ブラウザからログインしているユーザーという意味なので、Backend Workflowでは使えません。Do a search for で対象ユーザーを探すといいと思います。

updateのカラムには、そのユーザーの次回の更新日時が入るのですね。
それとは別に、Backend Workflowの処理の起動日時を決める必要があります。
例えば、「明日の午前5時」でしたら、次回起動を計算するには、現在日時+1日にして時刻を5時にする。という感じになります。

「いいね!」 2

jansnapさん

ありがとうございます。

Do a search forに変更してみたのですが、まだうまく処理ができておりません。。

Backend Workflowの処理の起動日時の指定をしてみましたが、以下であっておりますでしょうか?
夜0:00に処理の起動を設定したつもりです。

次に、

OnlyWhenで、ユーザーがサブスクに登録済み(Yes)であれば処理する、みたいにしたいのですが、エラーが出てしまい、こちらもうまくいかず。。

また、この後、毎日夜0:00に処理する、という実装の方法も分からず、お手数をおかけしますがご教示いただけますと幸いです。

全体的に初歩的なご質問で申し訳ございません。
引き続きよろしくお願いいたします。

先に、チケット枚数を3にリセットする処理を作ったほうが良さそうです。
・該当する複数のユーザーの枚数を書き換えるなら、「Make changes to a list of things…」が使えます。
・絞り込みの条件には、updateのカラムが本日という条件も必要ですね。

「いいね!」 2

jansnapさん

ありがとうございます。

まずは「Make changes to a list of things…」で、サブスクに加入している(Yes)ユーザー、かつ、updateが本日の人のusageを3にリセットしようと実装してみたつもりなのですが、

・絞り込みの条件には、update のカラムが本日という条件も必要ですね。

の「本日」という表現(実装)方法が分からず、どのようにするのがよいでしょうか。

お手数をおかけしますが、ご教示いただけますと幸いです。

引き続きよろしくお願いいたします。

日付が本日か判断するには、
・updateが、現在日時の0時0分0秒以降
かつ
・updateが、現在日時の翌日の0時0分0秒より前
という条件で判断できます。
具体的には、Current date/time で現在日時を取得し、その後に change hours to 0change minutes to 0change seconds to 0 をつけて0時0分0秒にします。
翌日にするには、+ days: 1 を使います。
詳細は、公式ドキュメントをご覧ください。

「いいね!」 2

jansnapさん

ありがとうございます。

ドキュメントもありがとうございます。

現在の日付が本日のとき、updateが本日かつサブスク登録済み(yes)であれば、usageを3にする(その後、日付を毎日更新)
という処理をしてみたつもりなのですが、テストをしてみたところ、まだうまく動いておりません。。
issuesは特に出ておりません。

どこが問題か、お手数をおかけしますがご指摘いただけますと幸いです。

引き続きよろしくお願いいたします。

Search for Users で、updateを使った絞り込みをされたのですね。
= を使うと、右辺(右側の青文字の部分)に合致するレコードを取り出す。という意味になるので、>=<を使う必要があります。

update >= current date/time change hours to 0 change minutes to 0 change second to 0
(本日0時0分0秒より後)

update < Current date/time +days:1 change hours to 0 change minutes to 0 change seconds to 0
(翌日の0時0分0秒より前)

でどうでしょう?

「いいね!」 2

jansnapさん

ありがとうございます。

= を使うと、右辺(右側の青文字の部分)に合致するレコードを取り出す。という意味になるので、>=< を使う必要があります。

こちらご指摘いただいただきありがとうございます、理解いたしました。

本日0時0分0秒より後~翌日の0時0分0秒より前(つまるところ、updateが「本日」のもの)に修正してみましたがいかがでしょうか。

ちなみに、Schedule API Workflow の方は間違っていなさそうでしょうか?
毎日0:00に実行されるように設定したつもりです。
時間を変更してテストしてみたりしましたが、うまく動かない(実行されない)ようでして。。

お手数をおかけしますが、ご教示いただけますと幸いです。

引き続きよろしくお願いいたします。

どちらも良さそうに見えます。
実際のデータを使って動作確認するとよいと思います。
動作確認用に、ボタンを押したらMake changesが動くようにしたり、
次回スケジュールが設定されているか、Bubbleの右タブの「Logs」ー「Scheduler」から確認すれば、どこまで動いているか確認できるでしょう。

「いいね!」 1

jansnapさん

ありがとうございます。

仮でボタンを用意し、データも用意した上で試してみたところ、うまくリセットされました!
ありがとうございます!

ただ、やはりスケジュールは動いていなさそうです。
「Logs」ー「Scheduler」を開いてみましたが、特に何も表示されていませんでした。
こちら、何か設定が必要でしょうか?

お手数をおかけしますが、ご教示いただけますと幸いです。

引き続きよろしくお願いいたします。

データ書き換えができたようでよかったです:smile:

分かりづらいですが、貼っていただいたスケジュール確認画面は、「Show」ボタンをクリックすると表示される仕組みになっているので、「Show」ボタンを押してみてください。

なお、スケジュールは、初回はボタンクリックなどで起動する必要があります。
開発環境のプレビューで(debug_mode=trueにして)、ボタンクリック時にSchedule API Workflowがどんな条件で動いているか、確認できますか?

「いいね!」 2