予約用の資料を置いた無人の相談室
予約用の資料を置いた無人の相談室
この記事の内容
  1. 最初は予約希望の受付までを作る
  2. 申込みと予約枠を別の表に保存する
  3. 日付と定員の条件を先に決める
  4. 一つの操作ずつ実装を頼む
  5. 三件の練習申込みで流れを追う
  6. 変更と取消で古い画面を扱う
  7. 制作と運営の費用を分ける
  8. 受付停止と復旧の手順を残す

最初は予約希望の受付までを作る

美容相談の30分枠を例に、希望日、開始時刻、連絡先、相談内容を受け付ける画面を作ります。最初の版には決済、回数券、複数拠点の振り分けを入れません。「受付後に担当者が確定の連絡をする」と送信前と完了画面に表示し、申込みの保存だけで「予約確定」と表示する設計を避けます。AIへの指示には利用者画面と担当者画面を分け、確認メールの送信が失敗しても受付データは残ることを指定します。画面の見た目を整える前に、一件保存して再読込後に確認できる状態を目指します。

申込みと予約枠を別の表に保存する

requestsには受付ID、利用者ID、希望枠ID、受付状態、作成時刻、版番号を持たせ、slotsには開始・終了時刻、担当者、定員、受付可否を保存します。連絡先は申込み側で管理し、空き枠の公開一覧から氏名やメールアドレスを返さない構成にします。LovableのSupabase連携はバックエンドを用意する選択肢ですが、接続しただけで閲覧範囲が正しくなるわけではありません。本人が見られる申込み、担当者が処理できる申込みを定義し、練習中は実際の顧客情報ではなく架空の連絡先を使います。

日付と定員の条件を先に決める

店舗の基準時刻を日本時間とし、締切は開始時刻の24時間前という例を仕様に書きます。保存時刻は一貫した形式にし、画面の日本時間表示と対応を確認します。日付だけをUTCへ変換して前日にずれる処理や、端末の時計だけで締切を判断する処理は採用しません。定員一名の枠に複数の希望を受けるなら、受付と席の確保は別です。確定処理では、DBトランザクション内で予約枠の行をロックして残席を確認するか、残席がある場合だけ成功する条件付き更新を使います。残席の減算と確定状態の保存は、同じDBトランザクションで行います。ボタンを無効にするだけでは同時申込みに対応できません。

また、店舗都合で枠を閉じるときは、すでに確定した申込みを自動で取り消さず、影響を受ける受付の一覧を担当者へ示します。

予約用の資料を置いた無人の相談室
予約用の資料を置いた無人の相談室

一つの操作ずつ実装を頼む

申込み作成、本人の申込み一覧、担当者の確定、取消の順に実装を分けます。各操作で必要な権限、許される前の状態、保存する次の状態を指定します。例えば取消済みの申込みを確定しようとした場合は、更新せず理由を返すようにします。二重クリック対策と重複保存防止も区別します。同じ送信の再試行には同じ受付キーを用い、保存済みなら既存の受付結果を返します。エラー後に新しい受付IDを毎回作る指示では、利用者が再送した数だけ申込みが増えてしまいます。

三件の練習申込みで流れを追う

練習例ではAさんとBさんが同じ10時枠、Cさんが11時枠を希望します。Aさんだけを確定した後、Bさんの確定操作は満席として止まり、Cさんは別枠として確定できることを確認します。これは実装後の確認例で、サービス上で測定した結果ではありません。確定通知には受付ID、店舗基準の日時、変更・取消の窓口を入れます。通知に失敗しても予約そのものは取消さず、送信状態を別に残して再送できるようにします。送信前の希望日時と確定後の日時が同じかも照合します。

予約希望と確定を照合する
予約希望と確定を照合する
操作確認する記録期待する結果
同じ枠へ二件申込み希望二件・定員一名一件だけ確定
確定通知の失敗予約と送信状態予約を残して再送
取消の再送取消日時と残席残席は一度だけ戻る
古い画面で変更申込みの版番号最新情報へ戻る

変更と取消で古い画面を扱う

担当者が時刻を変更した間に利用者が取消画面を開いていた場合、古い版番号で更新すると競合を返すようにします。最新版を読み直し、何が変わったかを表示してから次の操作を選ばせます。確認せず古い日時や担当者を上書きする処理は避けます。取消では履歴を削除する代わりに取消日時と理由を保存します。残席を戻す処理は、一度だけ成立する状態変更に結び付けます。同じ取消を二度受け取っても定員が増えないこと、通知再送と予約の状態変更が混ざらないことを確かめます。

予約希望と確定を照合する
予約希望と確定を照合する確定操作 → 残席を確認; 残席を確認 → 希望のまま保留 (満席); 残席を確認 → 一件を確定 (空きあり); 一件を確定 → 通知状態を記録満席空きあり確定操作残席を確認希望のまま保留一件を確定通知状態を記録予約希望と確定を照合する確定操作 → 残席を確認; 残席を確認 → 希望のまま保留 (満席); 残席を確認 → 一件を確定 (空きあり); 一件を確定 → 通知状態を記録満席空きあり確定操作残席を確認希望のまま保留一件を確定通知状態を記録

確定は残席更新と同じ処理で保存します。通知の失敗だけで予約を取り消しません。

制作と運営の費用を分ける

開発時の修正回数に使うLovableの利用枠と、公開後のデータベース、通知メール、独自ドメインなどの費用は別の欄に記録します。月の受付件数だけでなく、担当者の一覧読込、利用者の再確認、通知の再送も運用量に含めます。最初は一店舗、一担当者、一種類の枠で動作を固め、必要性が分かってから複数担当者や決済を追加します。無料の試作ができても本番の保存・配信まで無料とは限りません。契約時には現行の利用枠と超過時の扱いを公式画面で確認します。

受付停止と復旧の手順を残す

予約の不整合が見つかったら、新しい受付を一時停止できるスイッチを用意します。停止中でも確定済みの情報と連絡先を担当者が確認できるようにし、誤った予約を一括削除して帳尻を合わせない運用にします。復旧後は受付番号と残席を照合します。公開前の確認表には、未ログイン、別利用者、担当者、取消済み、満席、通信切れを含めます。小さな実データの試行では予約台帳との照合担当を決め、問い合わせ先と対応時間も明記します。試作の完成と予約業務を任せられる状態を分けて判断します。

参照した公式情報

料金・提供条件・対応範囲は変更されることがあります。契約前に、下記の公式ページでご確認ください。

比較方針を読む広告について