AIに予約キャンセルを作らせた。取り消した枠は本当に戻るのか
美容室デモで予約を取り消し、別の画面から同じ時間へ再予約できるか実環境で確かめました。
予約を受け付けられても、予定が変わったときに店へ電話するしかないのでは不便です。そこで美容室デモへ、自分で予約を取り消せる機能を追加しました。
今回の問いは一つです。
AIに予約キャンセルを作らせたら、取り消した枠は別の画面でも正しく空きへ戻るか。
先に見せたい瞬間
画面Aで予約を作ると、その時間は予約済みになります。同じ枠を画面Bから申し込むと 409 Conflict で止まりました。
次に画面Aでキャンセルします。画面Bから同じ枠をもう一度申し込むと、今度は 201 Created で予約できました。
見た目からカードを消しただけではなく、全員が読む共有データから予約が削除され、枠が空きへ戻ったことを確認できました。
作ったもの
- 予約成功後にだけ表示されるキャンセル操作
- 受付番号と、その予約だけに発行するキャンセルキー
- キャンセル中も予約データをロックする処理
- キャンセル後に同じ枠を再予約できる処理
- 不正なキーと入力を拒否する処理
キャンセルキーは画面へ返しますが、サーバーにはそのまま保存しません。ハッシュに変換して保存し、キャンセル時に一致するか確認します。
なぜ受付番号だけでは足りないのか
受付番号だけで取り消せると、他人の番号を推測した人が予約を消せてしまいます。そのため今回は、長いランダムなキャンセルキーも一致した場合だけ削除します。
これは本格的な本人確認ではありません。実店舗なら、ログイン、確認メール、電話番号など、運用に合った確認方法が必要です。今回は個人情報を集めないデモなので、予約ごとの秘密キーに限定しました。
変更は「取り消して取り直す」
日時変更を直接書き換えると、変更先の枠が空いているかを確認しながら元の枠も扱う必要があります。処理が複雑になるため、今回の最小版では一度キャンセルし、新しい枠を予約し直します。
小さな店ではこの方法で足りる場合があります。一方、変更履歴、キャンセル料、通知、返金が必要なら、既存の予約サービスを使う方が管理しやすいこともあります。
サーバーが役立った部分
便利だったのは、別の画面でも同じ予約状況を読めることです。予約を受け付ける処理とキャンセル処理が、同じ保存先をロックして更新します。
ただし、このためだけに必ずレンタルサーバーを契約する必要はありません。外部の予約サービスで必要な機能が揃うなら、それが簡単です。独自の流れを小さく作りたい場合には、サーバー側の処理を置ける環境が選択肢になります。
今回の判定
2026年9月6日、公開環境で二つの独立した接続を使って検証しました。
| 操作 | 結果 |
|---|---|
| 1件目を予約 | 201 Created |
| 別接続から同じ枠を予約 | 409 Conflict |
| 不正なキャンセルキー | 404 Not Found |
| 正しいキーでキャンセル | 200 OK |
| 別接続から同じ枠へ再予約 | 201 Created |
キャンセル後、別の画面から同じ枠へ再予約できました。今回の最小条件は合格です。 検証用に作った予約は最後に削除しました。
現時点で作っていないのは、ログイン、通知、変更履歴、キャンセル料、返金、本物の顧客情報管理です。実店舗向けの予約システム全体が完成した、という意味ではありません。