「訪問の場合、交通費が確定しないと金額をお伝えできないんです」
予約完了と同時にSquareのカード決済リンクを送る仕組みを作った後で、この問題が浮上した。
訪問レッスンの料金は33,000円プラス交通費の実費。交通費はお客様の住所によって変わる。予約が入った時点では確定していない。金額が確定していないのに決済リンクを送ってしまうと、お客様が正しくない金額で決済してしまうリスクがある。
オンラインレッスンには問題がない。料金は19,800円で固定だ。Squareの決済リンクをそのまま送れる。
問題は訪問だけだ。訪問の場合は、金額確定後に個別で案内する必要がある。
これまで「片づけレッスン」は一つのservice_id=2で管理していた。訪問でもオンラインでも同じservice_idだった。だから支払案内のロジックも同じになってしまっていた。
解決策は単純だった。分割する。
service_id=2をオンライン専用にし、service_id=8を訪問専用として新設した。
GAS側では、サービス名のマップを更新した。
- '2': '片づけレッスン(オンライン)'
- '8': '片づけレッスン(訪問)'
支払案内の生成関数には、service_id='8'の分岐を追加した。
if (serviceId === '8') {
return '訪問レッスンは交通費を含めた金額を確定後に、改めてお支払い方法をご案内いたします。';
}
Googleカレンダーの所要時間定義も更新した。オンラインは3時間(180分)、訪問は5時間(300分)だ。これまでservice_id=2に300分を割り当てていたのは訪問を想定していたからで、オンライン専用になった今は180分に修正した。
LPのレッスンカードも変えた。「予約する」ボタンを一つから二つに増やした。
訪問と書いたボタンはピンク系の色でservice=8に飛ぶ。オンラインと書いたボタンはグリーンでservice=2に飛ぶ。色でも区別できるようにした。
管理画面とドロップダウンにも「片づけレッスン(訪問)」を追加した。枠の登録や予約の絞り込みで使う。
実際に動かしてみると、分けることで見通しがよくなった。
管理画面で「オンライン」の予約一覧を出せば、Squareの決済リンクを送ってあるお客様だけが並ぶ。「訪問」の一覧を出せば、交通費を確認して個別案内が必要なお客様だけが並ぶ。
やることが違うサービスを同じIDで管理していたことで、支払ロジックが曖昧になっていた。IDを分けるのはデータ設計の基本だが、後から気づくことがある。
お客様に見える変化は「予約するボタンが2つになった」だけだ。それだけで運営の手間と混乱が一つなくなる。
次回は、入退室管理システムシステムを複数教室に対応させたマルチテナント設計の話を書く。
シンプルシステム株式会社 代表 伊藤勝彦